diff options
-rw-r--r-- | CMake/FindUdev.cmake | 25 | ||||
-rw-r--r-- | CMake/config.h.in | 3 | ||||
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | apt-pkg/CMakeLists.txt | 2 | ||||
-rw-r--r-- | apt-pkg/cdrom.cc | 47 | ||||
-rw-r--r-- | apt-pkg/cdrom.h | 31 | ||||
-rw-r--r-- | debian/control | 1 | ||||
-rwxr-xr-x | prepare-release | 1 |
8 files changed, 63 insertions, 52 deletions
diff --git a/CMake/FindUdev.cmake b/CMake/FindUdev.cmake new file mode 100644 index 000000000..e416c43da --- /dev/null +++ b/CMake/FindUdev.cmake @@ -0,0 +1,25 @@ +# - Try to find UDEV +# Once done, this will define +# +# UDEV_FOUND - system has UDEV +# UDEV_INCLUDE_DIRS - the UDEV include directories +# UDEV_LIBRARIES - the UDEV library +find_package(PkgConfig) + +pkg_check_modules(UDEV_PKGCONF libudev) + +find_path(UDEV_INCLUDE_DIRS + NAMES libudev.h + PATHS ${UDEV_PKGCONF_INCLUDE_DIRS} +) + + +find_library(UDEV_LIBRARIES + NAMES udev + PATHS ${UDEV_PKGCONF_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Udev DEFAULT_MSG UDEV_INCLUDE_DIRS UDEV_LIBRARIES) + +mark_as_advanced(UDEV_INCLUDE_DIRS UDEV_LIBRARIES) diff --git a/CMake/config.h.in b/CMake/config.h.in index f5a03eedd..e1e4f83a1 100644 --- a/CMake/config.h.in +++ b/CMake/config.h.in @@ -17,6 +17,9 @@ /* Define if we have the lz4 library for lz4 */ #cmakedefine HAVE_LZ4 +/* Define if we have the udev library */ +#cmakedefine HAVE_UDEV + /* These two are used by the statvfs shim for glibc2.0 and bsd */ /* Define if we have sys/vfs.h */ #cmakedefine HAVE_VFS_H diff --git a/CMakeLists.txt b/CMakeLists.txt index f9ad2cd71..28d5cce07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -119,6 +119,11 @@ if (LZ4_FOUND) set(HAVE_LZ4 1) endif() +find_package(Udev) +if (UDEV_FOUND) + set(HAVE_UDEV 1) +endif() + # Mount()ing and stat()ing and friends check_symbol_exists(statfs sys/vfs.h HAVE_VFS_H) check_include_files(sys/params.h HAVE_PARAMS_H) diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt index e3e078b81..651e55c79 100644 --- a/apt-pkg/CMakeLists.txt +++ b/apt-pkg/CMakeLists.txt @@ -44,6 +44,7 @@ target_include_directories(apt-pkg ${BZIP2_INCLUDE_DIR} ${LZMA_INCLUDE_DIRS} ${LZ4_INCLUDE_DIRS} + ${UDEV_INCLUDE_DIRS} ${ICONV_INCLUDE_DIRS} ) @@ -54,6 +55,7 @@ target_link_libraries(apt-pkg ${BZIP2_LIBRARIES} ${LZMA_LIBRARIES} ${LZ4_LIBRARIES} + ${UDEV_LIBRARIES} ${ICONV_LIBRARIES} ) set_target_properties(apt-pkg PROPERTIES VERSION ${MAJOR}.${MINOR}) diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 2dccc6d12..4f57153f9 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -27,6 +27,10 @@ #include <apti18n.h> +#ifdef HAVE_UDEV +#include <libudev.h> +#endif + using namespace std; // FindPackages - Find the package files on the CDROM /*{{{*/ @@ -913,43 +917,15 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ return true; } /*}}}*/ -pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ -: d(NULL), libudev_handle(NULL), udev_new(NULL), udev_enumerate_add_match_property(NULL), - udev_enumerate_scan_devices(NULL), udev_enumerate_get_list_entry(NULL), - udev_device_new_from_syspath(NULL), udev_enumerate_get_udev(NULL), - udev_list_entry_get_name(NULL), udev_device_get_devnode(NULL), - udev_enumerate_new(NULL), udev_list_entry_get_next(NULL), - udev_device_get_property_value(NULL), udev_enumerate_add_match_sysattr(NULL) + +pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ + : d(NULL) { } /*}}}*/ bool pkgUdevCdromDevices::Dlopen() /*{{{*/ { - // alread open - if(libudev_handle != NULL) - return true; - - // see if we can get libudev - void *h = ::dlopen("libudev.so.0", RTLD_LAZY); - if(h == NULL) - return false; - - // get the pointers to the udev structs - libudev_handle = h; - udev_new = (udev* (*)(void)) dlsym(h, "udev_new"); - udev_enumerate_add_match_property = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_property"); - udev_enumerate_add_match_sysattr = (int (*)(udev_enumerate*, const char*, const char*))dlsym(h, "udev_enumerate_add_match_sysattr"); - udev_enumerate_scan_devices = (int (*)(udev_enumerate*))dlsym(h, "udev_enumerate_scan_devices"); - udev_enumerate_get_list_entry = (udev_list_entry* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_list_entry"); - udev_device_new_from_syspath = (udev_device* (*)(udev*, const char*))dlsym(h, "udev_device_new_from_syspath"); - udev_enumerate_get_udev = (udev* (*)(udev_enumerate*))dlsym(h, "udev_enumerate_get_udev"); - udev_list_entry_get_name = (const char* (*)(udev_list_entry*))dlsym(h, "udev_list_entry_get_name"); - udev_device_get_devnode = (const char* (*)(udev_device*))dlsym(h, "udev_device_get_devnode"); - udev_enumerate_new = (udev_enumerate* (*)(udev*))dlsym(h, "udev_enumerate_new"); - udev_list_entry_get_next = (udev_list_entry* (*)(udev_list_entry*))dlsym(h, "udev_list_entry_get_next"); - udev_device_get_property_value = (const char* (*)(udev_device *, const char *))dlsym(h, "udev_device_get_property_value"); - return true; } /*}}}*/ @@ -963,13 +939,11 @@ vector<CdromDevice> pkgUdevCdromDevices::Scan() vector<CdromDevice> pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)/*{{{*/ { vector<CdromDevice> cdrom_devices; +#ifdef HAVE_UDEV struct udev_enumerate *enumerate; struct udev_list_entry *l, *devices; struct udev *udev_ctx; - if(libudev_handle == NULL) - return cdrom_devices; - udev_ctx = udev_new(); enumerate = udev_enumerate_new (udev_ctx); if (CdromOnly) @@ -1008,15 +982,14 @@ vector<CdromDevice> pkgUdevCdromDevices::ScanForRemovable(bool CdromOnly)/*{{{*/ cdrom.MountPath = ""; } cdrom_devices.push_back(cdrom); - } + } +#endif return cdrom_devices; } /*}}}*/ pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/ { - if (libudev_handle != NULL) - dlclose(libudev_handle); } /*}}}*/ diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 7425c09c1..6bc2b34f9 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -99,22 +99,23 @@ struct CdromDevice /*{{{*/ class pkgUdevCdromDevices /*{{{*/ { void * const d; + protected: - // libudev dlopen structure - void *libudev_handle; - struct udev* (*udev_new)(void); - int (*udev_enumerate_add_match_property)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); - int (*udev_enumerate_scan_devices)(struct udev_enumerate *udev_enumerate); - struct udev_list_entry* (*udev_enumerate_get_list_entry)(struct udev_enumerate *udev_enumerate); - struct udev_device* (*udev_device_new_from_syspath)(struct udev *udev, const char *syspath); - struct udev* (*udev_enumerate_get_udev)(struct udev_enumerate *udev_enumerate); - const char* (*udev_list_entry_get_name)(struct udev_list_entry *list_entry); - const char* (*udev_device_get_devnode)(struct udev_device *udev_device); - struct udev_enumerate *(*udev_enumerate_new) (struct udev *udev); - struct udev_list_entry *(*udev_list_entry_get_next)(struct udev_list_entry *list_entry); - const char* (*udev_device_get_property_value)(struct udev_device *udev_device, const char *key); - int (*udev_enumerate_add_match_sysattr)(struct udev_enumerate *udev_enumerate, const char *property, const char *value); - // end libudev dlopen + // old libudev dlopen structure, not used anymore, but can't break ABI + void *_padding; + struct _padding *(*_padding__new)(void); + int (*_padding__enumerate_add_match_property)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); + int (*_padding__enumerate_scan_devices)(struct _padding_enumerate *_padding_enumerate); + struct _padding_list_entry *(*_padding__enumerate_get_list_entry)(struct _padding_enumerate *_padding_enumerate); + struct _padding_device *(*_padding__device_new_from_syspath)(struct _padding *_padding, const char *syspath); + struct _padding *(*_padding__enumerate_get__padding)(struct _padding_enumerate *_padding_enumerate); + const char *(*_padding__list_entry_get_name)(struct _padding_list_entry *list_entry); + const char *(*_padding__device_get_devnode)(struct _padding_device *_padding_device); + struct _padding_enumerate *(*_padding__enumerate_new)(struct _padding *_padding); + struct _padding_list_entry *(*_padding__list_entry_get_next)(struct _padding_list_entry *list_entry); + const char *(*_padding__device_get_property_value)(struct _padding_device *_padding_device, const char *key); + int (*_padding__enumerate_add_match_sysattr)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); + // end lib_padding dlopen public: pkgUdevCdromDevices(); diff --git a/debian/control b/debian/control index 0ea6d2b55..8af75e9f0 100644 --- a/debian/control +++ b/debian/control @@ -21,6 +21,7 @@ Build-Depends: cmake (>= 3.4), libgnutls28-dev (>= 3.4.6), liblz4-dev (>= 0.0~r126), liblzma-dev, + libudev-dev [linux-any], pkg-config, po4a (>= 0.34-2), xsltproc, diff --git a/prepare-release b/prepare-release index d7eb14705..e12ca2dc9 100755 --- a/prepare-release +++ b/prepare-release @@ -39,6 +39,7 @@ test_deb_control() { ) | tr '\n' ' '\ | sed -r -e 's#<[^,<>()@]*>##g' \ -e 's#@[^,<>()@]*@##g' \ + -e 's#\[linux-any\]*##g' \ -e 's#dpkg-dev \([^)]*\)#dpkg-dev#g' \ -e 's#debhelper \([^)]*\)#debhelper#g' \ -e 's#g\+\+ \([^)]*\)#g++#g' \ |