allow udev backend on el6

afiestas recommended simply ommitting the new solid api for systems
with older udev, so here we are.
This commit is contained in:
Rex Dieter 2013-10-23 09:21:16 -05:00
parent 8207dace25
commit f3efe1f53c
2 changed files with 102 additions and 4 deletions

View File

@ -0,0 +1,95 @@
diff --git a/cmake/modules/FindUDev.cmake b/cmake/modules/FindUDev.cmake
index 4c8390d..1c05dd0 100644
--- a/cmake/modules/FindUDev.cmake
+++ b/cmake/modules/FindUDev.cmake
@@ -4,14 +4,32 @@
# UDEV_FOUND - system has UDev
# UDEV_INCLUDE_DIR - the libudev include directory
# UDEV_LIBS - The libudev libraries
+# UDEV_HAVE_GET_SYSATTR_LIST_ENTRY - TRUE if the udev library has the function
+# udev_device_get_sysattr_list_entry(), added in version 167 of libudev
# Copyright (c) 2010, Rafael Fernández López, <ereslibre@kde.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-find_path(UDEV_INCLUDE_DIR libudev.h)
-find_library(UDEV_LIBS udev)
+find_package(PkgConfig)
+if(PKG_CONFIG_FOUND)
+ pkg_check_modules(PC_LIBUDEV libudev)
+endif()
+
+find_path(UDEV_INCLUDE_DIR libudev.h
+ HINTS ${PC_LIBUDEV_INCLUDEDIR} ${PC_LIBUDEV_INCLUDE_DIRS})
+find_library(UDEV_LIBS udev
+ HINTS ${PC_LIBUDEV_LIBDIR} ${PC_LIBUDEV_LIBRARY_DIRS})
+
+if(UDEV_INCLUDE_DIR AND UDEV_LIBS)
+ include(CheckFunctionExists)
+ include(CMakePushCheckState)
+ cmake_push_check_state()
+ set(CMAKE_REQUIRED_LIBRARIES ${UDEV_LIBS} )
+ check_function_exists(udev_device_get_sysattr_list_entry UDEV_HAVE_GET_SYSATTR_LIST_ENTRY )
+ cmake_pop_check_state()
+endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(UDev DEFAULT_MSG UDEV_INCLUDE_DIR UDEV_LIBS)
diff --git a/solid/solid/CMakeLists.txt b/solid/solid/CMakeLists.txt
index a7f1f07..97ca6c4 100644
--- a/solid/solid/CMakeLists.txt
+++ b/solid/solid/CMakeLists.txt
@@ -200,6 +200,7 @@ if(NOT WIN32 AND NOT APPLE)
if ( UDEV_FOUND )
message(STATUS "Building Solid UDev backend." )
+ macro_bool_to_01(UDEV_HAVE_GET_SYSATTR_LIST_ENTRY)
set(solid_LIB_SRCS ${solid_LIB_SRCS}
backends/udev/utils.cpp
backends/udev/udevdevice.cpp
diff --git a/solid/solid/backends/shared/udevqt.h b/solid/solid/backends/shared/udevqt.h
index 228687e..9611658 100644
--- a/solid/solid/backends/shared/udevqt.h
+++ b/solid/solid/backends/shared/udevqt.h
@@ -49,7 +49,9 @@ class Device
QString primaryDeviceFile() const;
QStringList alternateDeviceSymlinks() const;
QStringList deviceProperties() const;
+#ifdef UDEV_HAVE_GET_SYSATTR_LIST_ENTRY
QStringList sysfsProperties() const;
+#endif
Device parent() const;
// ### should this really be a QVariant? as far as udev knows, everything is a string...
diff --git a/solid/solid/backends/shared/udevqtdevice.cpp b/solid/solid/backends/shared/udevqtdevice.cpp
index d18b616..4721b7a 100644
--- a/solid/solid/backends/shared/udevqtdevice.cpp
+++ b/solid/solid/backends/shared/udevqtdevice.cpp
@@ -197,6 +197,7 @@ QStringList Device::deviceProperties() const
return listFromListEntry(udev_device_get_properties_list_entry(d->udev));
}
+#ifdef UDEV_HAVE_GET_SYSATTR_LIST_ENTRY
QStringList Device::sysfsProperties() const
{
if (!d)
@@ -204,6 +205,7 @@ QStringList Device::sysfsProperties() const
return listFromListEntry(udev_device_get_sysattr_list_entry(d->udev));
}
+#endif
Device Device::parent() const
{
diff --git a/solid/solid/config-solid.h.cmake b/solid/solid/config-solid.h.cmake
index 84c3b5c..bb71645 100644
--- a/solid/solid/config-solid.h.cmake
+++ b/solid/solid/config-solid.h.cmake
@@ -19,4 +19,5 @@
*/
#cmakedefine UDEV_FOUND
+#cmakedefine UDEV_HAVE_GET_SYSATTR_LIST_ENTRY
#cmakedefine HUPNP_FOUND

View File

@ -23,7 +23,6 @@
%define cmake_pkg cmake28
%else
%define cmake_pkg cmake
%define udev 1
%define upower 1
%endif
@ -138,6 +137,11 @@ Patch49: kdelibs-solid_qt_no_debug_output.patch
# https://git.reviewboard.kde.org/r/102439/
Patch50: kdelibs-4.7.0-knewstuff2_gpg2.patch
# an improvement on
# https://projects.kde.org/projects/kde/kdelibs/repository/revisions/a8d3d3321522d35c2852abb02a475c6b43be5cfe
# strictly, only required for old pre-systemd systems (like el6)
Patch51: kdelibs-UDEV_HAVE_GET_SYSATTR_LIST_ENTRY.patch
# Toggle solid upnp support at runtime via env var SOLID_UPNP=1 (disabled by default)
Patch52: kdelibs-4.10.0-SOLID_UPNP.patch
@ -222,9 +226,7 @@ BuildRequires: pkgconfig(libattica) >= %{attica_ver}
BuildRequires: pkgconfig(liblzma)
BuildRequires: pkgconfig(libpcre)
BuildRequires: pkgconfig(libstreams) >= %{strigi_ver}
%if 0%{?udev}
BuildRequires: pkgconfig(libudev) >= 167
%endif
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(libxslt) pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(OpenEXR)
BuildRequires: pkgconfig(openssl)
@ -353,6 +355,7 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
# upstreamable patches
%patch50 -p1 -b .knewstuff2_gpg2
%patch51 -p1 -b .UDEV_HAVE_GET_SYSATTR_LIST_ENTRY
%patch52 -p1 -b .SOLID_UPNP
%patch53 -p1 -b .kjs-s390
%patch54 -p1 -b .kjs-locale