Hello community,
here is the log from the commit of package libusb-compat for openSUSE:Factory checked in at 2015-05-29 09:52:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libusb-compat (Old)
and /work/SRC/openSUSE:Factory/.libusb-compat.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libusb-compat"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libusb-compat/libusb-compat.changes 2014-02-16 09:10:42.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libusb-compat.new/libusb-compat.changes 2015-05-29 09:52:55.000000000 +0200
@@ -1,0 +2,23 @@
+Tue May 26 10:35:59 UTC 2015 - dgutu@suse.com
+
+- Added PowerPC architectures to spec file
+
+-------------------------------------------------------------------
+Wed Apr 22 13:09:26 UTC 2015 - jengelh@inai.de
+
+- remove --with-pic, it is implicit for shared libraries anyway
+ (and we do not build static libraries). Use %_smp_mflags for
+ parallel build.
+
+-------------------------------------------------------------------
+Mon Apr 20 19:14:56 CEST 2015 - sbrabec@suse.cz
+
+- Add upstream fixes:
+ * Update NEWS (libusb-compat-update-news.patch).
+ * Replace atexit() by library destructor
+ (libusb-compat-revert-atexit.patch,
+ libusb-compat-add-destructor.patch).
+- Hide libusb-1.0 symbols to prevent symbol clash
+ (libusb-compat-hide-libusb-1_0.patch, boo#596411).
+
+-------------------------------------------------------------------
New:
----
libusb-compat-add-destructor.patch
libusb-compat-hide-libusb-1_0.patch
libusb-compat-revert-atexit.patch
libusb-compat-update-news.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libusb-compat.spec ++++++
--- /var/tmp/diff_new_pack.kvBvG5/_old 2015-05-29 09:52:56.000000000 +0200
+++ /var/tmp/diff_new_pack.kvBvG5/_new 2015-05-29 09:52:56.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package libusb-compat
#
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,14 +20,26 @@
Url: http://libusb.info/
Summary: libusb-1.0 Compatibility Layer for libusb-0.1
License: BSD-3-Clause and LGPL-2.1+
-Group: System/Libraries
+Group: Development/Libraries/C and C++
Version: 0.1.5
Release: 0
Source: http://downloads.sourceforge.net/project/libusb/%{name}-0.1/%{name}-%{version}/%{name}-%{version}.tar.bz2
Source1: baselibs.conf
Source2: %{name}.rpmlintrc
+# PATCH-FIX-UPSTREAM libusb-compat-update-news.patch sbrabec@suse.cz -- Update news for 0.1.5.
+Patch0: libusb-compat-update-news.patch
+# PATCH-FIX-UPSTREAM libusb-compat-revert-atexit.patch sbrabec@suse.cz -- Revert atexit().
+Patch1: libusb-compat-revert-atexit.patch
+# PATCH-FIX-UPSTREAM libusb-compat-add-destructor.patch sbrabec@suse.cz -- Add destructor.
+Patch2: libusb-compat-add-destructor.patch
+# PATCH-FEATURE-OPENSUSE libusb-compat-hide-libusb-1_0.patch boo#596411 sbrabec@suse.cz -- Hide libusb-1.0 symbols to prevent symbol clash.
+Patch3: libusb-compat-hide-libusb-1_0.patch
BuildRequires: pkg-config
BuildRequires: pkgconfig(libusb-1.0)
+# Needed for libusb-compat-hide-libusb-1_0.patch:
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: libtool
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define debug_package_requires libusb-0_1-5 = %{version}-%{release}
@@ -48,6 +60,12 @@
# This symbol is also required by several third party packages!
Provides: libusb = 0.1.13
Obsoletes: libusb < 0.1.13
+# libusb-compat-hide-libusb-1_0.patch hides this requirement
+%ifarch ia64 x86_64 s390x ppc ppc64 ppc64le
+Requires: libusb-1.0.so.0()(64bit)
+%else
+Requires: libusb-1.0.so.0
+%endif
%description -n libusb-0_1-4
A compatibility layer allowing applications written for libusb-0.1 to
@@ -73,15 +91,18 @@
%prep
%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
%build
-%configure\
- --with-pic\
- --disable-static
-make %{?jobs:-j%jobs}
+autoreconf -f -i
+%configure --disable-static
+make %{?_smp_mflags}
%install
-%makeinstall
+%make_install
rm %{buildroot}%{_libdir}/*.la
%post -n libusb-0_1-4 -p /sbin/ldconfig
++++++ libusb-compat-add-destructor.patch ++++++
From 072a5e4ee6a2658d8f422a707115fb36f3e6f959 Mon Sep 17 00:00:00 2001
From: Nathan Hjelm
Date: Tue, 25 Feb 2014 23:10:01 -0700
Subject: [PATCH] Add a library destructor to handle cleaning up libusb.
References #6
---
libusb/core.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/libusb/core.c b/libusb/core.c
index 2dd1b5f..e6e500b 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -1,7 +1,9 @@
+/* -*- Mode: C; c-basic-offset:8 ; indent-tabs-mode:t -*- */
/*
* Core functions for libusb-compat-0.1
* Copyright (C) 2008 Daniel Drake
* Copyright (c) 2000-2003 Johannes Erdfelt
+ * Copyright (c) 2014 Nathan Hjelm
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -59,6 +61,14 @@ API_EXPORTED struct usb_bus *usb_busses = NULL;
#define compat_err(e) -(errno=libusb_to_errno(e))
+static void __attribute__ ((destructor)) _usb_exit (void)
+{
+ if (ctx) {
+ libusb_exit (ctx);
+ ctx = NULL;
+ }
+}
+
static int libusb_to_errno(int result)
{
switch (result) {
--
2.3.5
++++++ libusb-compat-hide-libusb-1_0.patch ++++++
https://sourceforge.net/p/libusb/mailman/message/33485838/
Date: Mon, 23 Feb 2015 20:11:03 +0100
From: Stanislav Brabec
To: libusb-devel@lists.sourceforge.net
Subject: [libusb] [libusb-compat-0.1][PATCH] Prevent libusb-1.0 library symbol clash
libusb-1.0 uses functions like libusb_open. These names are generic, and
there are applications using libusb-0.1 using these names for its own
functions (e. g. scanbuttond). If such applications uses libusb-compat,
it crashes due to symbol clash.
Dynamic linker does not allow to hide symbols from dependent library.
This could be worked around by loading this library later by dlopen()
with RTLD_LOCAL flag.
Do this on platforms where it can be done.
This change makes visible only libusb-0.1 symbols but not libusb-1.0
symbols.
(It could be theoretically possible to introduce clashes with libdl, but
it is much less probable.)
How to reproduce:
Take testlibusb.c from libusb-0.1.12/tests and replace print_device
by libusb_open. Without this change the application crashes.
Reference:
https://bugzilla.opensuse.org/show_bug.cgi?id=596411
---
configure.ac | 14 ++++
libusb/Makefile.am | 6 +-
libusb/core.c | 14 ++++
libusb/libusb-dload.h | 203 ++++++++++++++++++++++++++++++++++++++++++++++
m4/au_check_lib_soname.m4 | 39 +++++++++
m4/au_have_gnu_errno.m4 | 17 ++++
6 files changed, 292 insertions(+), 1 deletion(-)
create mode 100644 libusb/libusb-dload.h
create mode 100644 m4/au_check_lib_soname.m4
create mode 100644 m4/au_have_gnu_errno.m4
diff --git a/configure.ac b/configure.ac
index debfef2..8a2750b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,6 +26,20 @@ PKG_CHECK_MODULES([LIBUSB_1_0], libusb-1.0 >= 0.9.1)
AC_SUBST(LIBUSB_1_0_CFLAGS)
AC_SUBST(LIBUSB_1_0_LIBS)
+# Checks for dynamic loading of libusb-1.0
+ac_save_LIBS="$LIBS"
+AC_CHECK_HEADER([dlfcn.h], [
+ AC_CHECK_LIB([dl], [dlopen], [
+ AC_CHECK_FUNC([dl], [dlsym], [
+ AU_CHECK_LIB_SONAME([LIBUSB_1_0], [usb-1.0], [libusb_open])])])])
+LIBS="$ac_save_LIBS"
+if test x"$LIBUSB_1_0_SONAME" != x ; then
+ AC_DEFINE_UNQUOTED([LIBUSB_1_0_SONAME], ["$LIBUSB_1_0_SONAME"], [SONAME of libusb-1.0. If defined, libusb-1.0 can be hidden.])
+fi
+AM_CONDITIONAL([USE_LIBUSB_1_0_DLOAD], [test x"$LIBUSB_1_0_SONAME" != x])
+
+AU_HAVE_GNU_ERRNO_H
+
# Message logging
AC_ARG_ENABLE([log], [AS_HELP_STRING([--disable-log], [disable all logging])],
[log_enabled=$enableval],
diff --git a/libusb/Makefile.am b/libusb/Makefile.am
index 33a609a..4585025 100644
--- a/libusb/Makefile.am
+++ b/libusb/Makefile.am
@@ -1,9 +1,13 @@
include_HEADERS = usb.h
lib_LTLIBRARIES = libusb.la
-libusb_la_SOURCES = core.c usbi.h
+libusb_la_SOURCES = core.c usbi.h libusb-dload.h
libusb_la_CFLAGS = -fvisibility=hidden $(AM_CFLAGS) $(LIBUSB_1_0_CFLAGS)
+if USE_LIBUSB_1_0_DLOAD
+libusb_la_LIBADD = -ldl
+else
libusb_la_LIBADD = $(LIBUSB_1_0_LIBS)
+endif
libusb_la_LDFLAGS = -version-info $(LT_MAJOR):$(LT_REVISION):$(LT_AGE) \
-release 0.1
diff --git a/libusb/core.c b/libusb/core.c
index e6e500b..8b5470a 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -31,6 +31,10 @@
#include "usb.h"
#include "usbi.h"
+#ifdef LIBUSB_1_0_SONAME
+#include "libusb-dload.h"
+#endif
+
static libusb_context *ctx = NULL;
static int usb_debug = 0;
@@ -61,12 +65,22 @@ API_EXPORTED struct usb_bus *usb_busses = NULL;
#define compat_err(e) -(errno=libusb_to_errno(e))
+#ifdef LIBUSB_1_0_SONAME
+static void __attribute__ ((constructor)) _usb_init (void)
+{
+ libusb_dl_init ();
+}
+#endif
+
static void __attribute__ ((destructor)) _usb_exit (void)
{
if (ctx) {
libusb_exit (ctx);
ctx = NULL;
}
+#ifdef LIBUSB_1_0_SONAME
+ libusb_dl_exit ();
+#endif
}
static int libusb_to_errno(int result)
diff --git a/libusb/libusb-dload.h b/libusb/libusb-dload.h
new file mode 100644
index 0000000..8524645
--- /dev/null
+++ b/libusb/libusb-dload.h
@@ -0,0 +1,203 @@
+#include "config.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define libusb_bulk_transfer (dl_libusb_bulk_transfer)
+static int (*dl_libusb_bulk_transfer)(libusb_device_handle *dev_handle,
+ unsigned char endpoint, unsigned char *data, int length,
+ int *actual_length, unsigned int timeout);
+
+#define libusb_claim_interface (dl_libusb_claim_interface)
+static int (*dl_libusb_claim_interface)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_release_interface (dl_libusb_release_interface)
+static int (*dl_libusb_release_interface)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_clear_halt (dl_libusb_clear_halt)
+static int (*dl_libusb_clear_halt)(libusb_device_handle *dev,
+ unsigned char endpoint);
+
+#define libusb_reset_device (dl_libusb_reset_device)
+static int (*dl_libusb_reset_device)(libusb_device_handle *dev);
+
+#define libusb_get_bus_number (dl_libusb_get_bus_number)
+static uint8_t (*libusb_get_bus_number)(libusb_device *dev);
+
+#define libusb_open (dl_libusb_open)
+static int (*libusb_open)(libusb_device *dev, libusb_device_handle **handle);
+
+#define libusb_close (dl_libusb_close)
+static void (*dl_libusb_close)(libusb_device_handle *dev_handle);
+
+#define libusb_set_configuration (dl_libusb_set_configuration)
+static int (*dl_libusb_set_configuration)(libusb_device_handle *dev,
+ int configuration);
+
+#define libusb_control_transfer (dl_libusb_control_transfer)
+static int (*dl_libusb_control_transfer)(libusb_device_handle *dev_handle,
+ uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex,
+ unsigned char *data, uint16_t wLength, unsigned int timeout);
+
+#define libusb_detach_kernel_driver (dl_libusb_detach_kernel_driver)
+static int (*dl_libusb_detach_kernel_driver)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_exit (dl_libusb_exit)
+static void (*dl_libusb_exit)(libusb_context *ctx);
+
+#define libusb_set_debug (dl_libusb_set_debug)
+static void (*dl_libusb_set_debug)(libusb_context *ctx, int level);
+
+#define libusb_free_config_descriptor (dl_libusb_free_config_descriptor)
+static void (*dl_libusb_free_config_descriptor)(
+ struct libusb_config_descriptor *config);
+
+#define libusb_free_device_list (dl_libusb_free_device_list)
+static void (*dl_libusb_free_device_list)(libusb_device **list,
+ int unref_devices);
+
+#define libusb_ref_device (dl_libusb_ref_device)
+static libusb_device * (*dl_libusb_ref_device)(libusb_device *dev);
+
+#define libusb_unref_device (dl_libusb_unref_device)
+static void (*dl_libusb_unref_device)(libusb_device *dev);
+
+#define libusb_get_config_descriptor (dl_libusb_get_config_descriptor)
+static int (*dl_libusb_get_config_descriptor)(libusb_device *dev,
+ uint8_t config_index, struct libusb_config_descriptor **config);
+
+#define libusb_free_config_descriptor (dl_libusb_free_config_descriptor)
+static void (*dl_libusb_free_config_descriptor)(
+ struct libusb_config_descriptor *config);
+
+#define libusb_get_device_address (dl_libusb_get_device_address)
+static uint8_t (*dl_libusb_get_device_address)(libusb_device *dev);
+
+#define libusb_get_device_descriptor (dl_libusb_get_device_descriptor)
+static int (*dl_libusb_get_device_descriptor)(libusb_device *dev,
+ struct libusb_device_descriptor *desc);
+
+#define libusb_get_device_list (dl_libusb_get_device_list)
+static ssize_t (*dl_libusb_get_device_list)(libusb_context *ctx,
+ libusb_device ***list);
+
+#define libusb_free_device_list (dl_libusb_free_device_list)
+static void (*dl_libusb_free_device_list)(libusb_device **list,
+ int unref_devices);
+
+#define libusb_get_string_descriptor_ascii (dl_libusb_get_string_descriptor_ascii)
+static int (*dl_libusb_get_string_descriptor_ascii)(libusb_device_handle *dev,
+ uint8_t desc_index, unsigned char *data, int length);
+
+#define libusb_init (dl_libusb_init)
+static int (*dl_libusb_init)(libusb_context **ctx);
+
+#define libusb_exit (dl_libusb_exit)
+static void (*dl_libusb_exit)(libusb_context *ctx);
+
+#define libusb_set_debug (dl_libusb_set_debug)
+static void (*dl_libusb_set_debug)(libusb_context *ctx, int level);
+
+#define libusb_interrupt_transfer (dl_libusb_interrupt_transfer)
+static int (*dl_libusb_interrupt_transfer)(libusb_device_handle *dev_handle,
+ unsigned char endpoint, unsigned char *data, int length,
+ int *actual_length, unsigned int timeout);
+
+#define libusb_kernel_driver_active (dl_libusb_kernel_driver_active)
+static int (*dl_libusb_kernel_driver_active)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_detach_kernel_driver (dl_libusb_detach_kernel_driver)
+static int (*dl_libusb_detach_kernel_driver)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_ref_device (dl_libusb_ref_device)
+static libusb_device * (*dl_libusb_ref_device)(libusb_device *dev);
+
+#define libusb_unref_device (dl_libusb_unref_device)
+static void (*dl_libusb_unref_device)(libusb_device *dev);
+
+#define libusb_release_interface (dl_libusb_release_interface)
+static int (*dl_libusb_release_interface)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_reset_device (dl_libusb_reset_device)
+static int (*dl_libusb_reset_device)(libusb_device_handle *dev);
+
+#define libusb_set_configuration (dl_libusb_set_configuration)
+static int (*dl_libusb_set_configuration)(libusb_device_handle *dev,
+ int configuration);
+
+#define libusb_claim_interface (dl_libusb_claim_interface)
+static int (*dl_libusb_claim_interface)(libusb_device_handle *dev,
+ int interface_number);
+
+#define libusb_set_debug (dl_libusb_set_debug)
+static void (*dl_libusb_set_debug)(libusb_context *ctx, int level);
+
+#define libusb_set_interface_alt_setting (dl_libusb_set_interface_alt_setting)
+static int (*dl_libusb_set_interface_alt_setting)(libusb_device_handle *dev,
+ int interface_number, int alternate_setting);
+
+#define libusb_clear_halt (dl_libusb_clear_halt)
+static int (*dl_libusb_clear_halt)(libusb_device_handle *dev,
+ unsigned char endpoint);
+
+#define libusb_unref_device (dl_libusb_unref_device)
+static void (*dl_libusb_unref_device)(libusb_device *dev);
+
+static void *libusb_dl_handle;
+
+#define libusb_dl_set_call(call)\
+ if (!(dl_##call = dlsym(libusb_dl_handle, #call)))\
+ goto failure;
+static inline void libusb_dl_init(void) {
+ if (!(libusb_dl_handle = dlopen(LIBUSB_1_0_SONAME, RTLD_NOW|RTLD_LOCAL)))
+ goto failure;
+ libusb_dl_set_call(libusb_bulk_transfer);
+ libusb_dl_set_call(libusb_claim_interface);
+ libusb_dl_set_call(libusb_clear_halt);
+ libusb_dl_set_call(libusb_get_bus_number);
+ libusb_dl_set_call(libusb_open);
+ libusb_dl_set_call(libusb_close);
+ libusb_dl_set_call(libusb_control_transfer);
+ libusb_dl_set_call(libusb_detach_kernel_driver);
+ libusb_dl_set_call(libusb_exit);
+ libusb_dl_set_call(libusb_free_config_descriptor);
+ libusb_dl_set_call(libusb_free_device_list);
+ libusb_dl_set_call(libusb_get_config_descriptor);
+ libusb_dl_set_call(libusb_get_device_address);
+ libusb_dl_set_call(libusb_get_device_descriptor);
+ libusb_dl_set_call(libusb_get_device_list);
+ libusb_dl_set_call(libusb_get_string_descriptor_ascii);
+ libusb_dl_set_call(libusb_init);
+ libusb_dl_set_call(libusb_interrupt_transfer);
+ libusb_dl_set_call(libusb_kernel_driver_active);
+ libusb_dl_set_call(libusb_ref_device);
+ libusb_dl_set_call(libusb_release_interface);
+ libusb_dl_set_call(libusb_reset_device);
+ libusb_dl_set_call(libusb_set_configuration);
+ libusb_dl_set_call(libusb_set_debug);
+ libusb_dl_set_call(libusb_set_interface_alt_setting);
+ libusb_dl_set_call(libusb_unref_device);
+ return;
+failure:
+#ifdef HAVE_GNU_ERRNO_H
+ fprintf(stderr, "%s: error while loading " LIBUSB_1_0_SONAME " from libusb-0.1.so.4: %s\n",
+ program_invocation_name, dlerror());
+#else
+ fprintf(stderr, "libusb-compat: error while loading " LIBUSB_1_0_SONAME " from libusb-0.1.so.4: %s\n",
+ dlerror());
+#endif
+ exit(127);
+};
+
+static inline void libusb_dl_exit(void) {
+ dlclose(libusb_dl_handle);
+};
diff --git a/m4/au_check_lib_soname.m4 b/m4/au_check_lib_soname.m4
new file mode 100644
index 0000000..6b49fec
--- /dev/null
+++ b/m4/au_check_lib_soname.m4
@@ -0,0 +1,39 @@
+m4_pattern_allow([^AU_])
+
+# AU_CHECK_LIB_SONAME(VARIABLE, LIBRARY, FUNCTION,
+# [ACTION-IF-FOUND], [ACTION-IF-FOUND-BUT-NO-SONAME],
+# [ACTION-IF-NOT-FOUND],
+# [OTHER-LIBRARIES])
+#------------------------------------------------------------------------
+# This is similar to AC_CHECK_LIB, but also sets LIB${VARIABLE}_SONAME
+# If SONAME is not found and ACTION-IF-FOUND-BUT-NO-SONAME is called,
+# it still does things which does AC_CHECK_LIB for ACTION-IF-FOUND.
+AC_DEFUN([AU_CHECK_LIB_SONAME], [
+ AC_REQUIRE([LT_INIT])
+ AS_VAR_PUSHDEF([ac_Lib_SONAME], [au_cv_lib_soname_$1])
+ AC_ARG_VAR([$1][_SONAME], [SONAME of lib$2, overriding ldd check])
+ AC_CHECK_LIB($2,$3,[
+ AC_PATH_PROG([PATH_LDD], [ldd])
+ AC_CACHE_CHECK([for SONAME of lib$2], [ac_Lib_SONAME],[
+ AS_IF([test x"$[$1][_SONAME]" = x""], [
+ AS_IF([test x"$PATH_LDD" != x""], [
+ AS_VAR_SET([ac_Lib_SONAME], ["unknown"])
+ AU_CHECK_LIB_SONAME_LIBS="$LIBS"
+ LIBS="$LIBS $7 -l$2"
+ shrext_regexp=`echo "$shrext_cmds" | sed 's/\./\\\\./'`
+ AC_TRY_LINK([], [],
+ [AS_VAR_SET([ac_Lib_SONAME], [`ldd conftest$ac_exeext | grep 'lib[$2]'$shrext_regexp | sed 's/^@<:@ \t@:>@*lib[$2]'$shrext_regexp'/lib[$2]'$shrext_regexp'/;s/@<:@ \t@:>@.*$//'`])])
+ LIBS="$AU_CHECK_LIB_SONAME_LIBS"
+ AS_IF([test x"$ac_Lib_SONAME" = x ],
+ [AS_VAR_SET([ac_Lib_SONAME], [unknown])])
+ AS_IF([test x"$ac_Lib_SONAME" != x"unknown" ], [
+ AS_VAR_SET([$1][_SONAME], ["$ac_Lib_SONAME"])
+ $4], [
+ $5])], [
+ AS_VAR_SET([ac_Lib_SONAME], [unknown])
+ $5])], [
+ AS_VAR_SET([ac_Lib_SONAME], ["$[$1][_SONAME]"])
+ $4])])],
+ [$6], [$7])
+ AS_VAR_POPDEF([ac_Lib_SONAME])
+])
diff --git a/m4/au_have_gnu_errno.m4 b/m4/au_have_gnu_errno.m4
new file mode 100644
index 0000000..c06cbf1
--- /dev/null
+++ b/m4/au_have_gnu_errno.m4
@@ -0,0 +1,17 @@
+m4_pattern_allow([^AU_])
+
+# AU_HAVE_GNU_ERRNO_H
+#--------------------
+# Check for GNU extensions of errno.h.
+AC_DEFUN([AU_HAVE_GNU_ERRNO_H], [
+ AC_CACHE_CHECK([for GNU extensions of errno.h], [ac_cv_have_gnu_errno_h],[
+ AC_TRY_COMPILE([
+#define _GNU_SOURCE
+#include
+ ], [char *testvar = program_invocation_name;],
+ [ac_cv_have_gnu_errno_h=yes], [ac_cv_have_gnu_errno_h=no])])
+ AS_IF([test x"$ac_cv_have_gnu_errno_h" = x"yes"], [
+ AC_DEFINE([HAVE_GNU_ERRNO_H], [1], [Define to 1 if you have the header file with GNU extensions.])
+ AC_DEFINE([_GNU_SOURCE], [], [Force _GNU_SOURCE from AC_HAVE[]_GNU_ERRNO_H.])
+ ])
+])
--
2.3.0
--
Best Regards / S pozdravem,
Stanislav Brabec
software developer
---------------------------------------------------------------------
SUSE LINUX, s. r. o. e-mail: sbrabec@...
Lihovarská 1060/12 tel: +49 911 7405384547
190 00 Praha 9 fax: +420 284 084 001
Czech Republic http://www.suse.cz/
PGP: 830B 40D5 9E05 35D8 5E27 6FA3 717C 209F A04F CD76
++++++ libusb-compat-revert-atexit.patch ++++++
From eb590b4dac00a5188b93e1d6ebdd60b06f9ab3d7 Mon Sep 17 00:00:00 2001
From: Hans de Goede
Date: Thu, 13 Feb 2014 17:25:27 +0100
Subject: [PATCH] Revert "use atexit() to call libusb_exit()"
The use of atexit() breaks various users of libusb-compat,
see ie: https://bugzilla.redhat.com/show_bug.cgi?id=1003193
This reverts commit 0be16b8dd25733d242ae32b57823a9513ec21353.
Closes libusbx/libusb-compat-0.1#2
Signed-off-by: Hans de Goede
---
libusb/core.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/libusb/core.c b/libusb/core.c
index c0ccb1f..2dd1b5f 100644
--- a/libusb/core.c
+++ b/libusb/core.c
@@ -21,7 +21,6 @@
#include
#include
#include
-#include
#include
#include
@@ -137,13 +136,6 @@ static void usbi_log(enum usbi_log_level level, const char *function,
fprintf(stream, "\n");
}
-static void _usb_finalize(void) {
- if (ctx) {
- libusb_exit(ctx);
- ctx = NULL;
- }
-}
-
API_EXPORTED void usb_init(void)
{
int r;
@@ -159,8 +151,6 @@ API_EXPORTED void usb_init(void)
/* usb_set_debug can be called before usb_init */
if (usb_debug)
libusb_set_debug(ctx, 3);
-
- atexit(_usb_finalize);
}
}
--
2.3.5
++++++ libusb-compat-update-news.patch ++++++
From 8fc7a4f671833d7142e632517d25d0015b648c3c Mon Sep 17 00:00:00 2001
From: Nathan Hjelm
Date: Thu, 23 May 2013 19:11:16 -0600
Subject: [PATCH] Update news for 0.1.5
---
NEWS | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/NEWS b/NEWS
index 05928ca..5dcd53a 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,10 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
+2013-05-20: libusb-compat-0.1.5 release
+ * Update autoconf/automake files to fix warnings.
+ * Use an atexit function to call libusb_exit().
+
2012-04-24: libusb-compat-0.1.4 release
* Change usb_*_write() prototypes to use const for read-only parameters
* Fix #42 usb_detach_kernel_driver_np() error mapping
--
2.3.5