diff --git a/CMakeLists.txt b/CMakeLists.txt index 59e2955..ddc8e83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,131 +1,162 @@ cmake_minimum_required(VERSION 3.5) set(KF5_VERSION "5.58.0") # handled by release scripts project(Solid VERSION ${KF5_VERSION}) include(FeatureSummary) find_package(ECM 5.58.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) include(KDEInstallDirs) include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE) include(KDECMakeSettings) include(ECMQtDeclareLoggingCategory) set(REQUIRED_QT_VERSION 5.10.0) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Xml Widgets) if (NOT ANDROID) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED DBus) endif() if(WIN32) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Network) endif() include(GenerateExportHeader) include(CMakePackageConfigHelpers) include(ECMSetupVersion) include(ECMGenerateHeaders) include(ECMMarkNonGuiExecutable) include(ECMAddQch) find_package(FLEX REQUIRED) set_package_properties(FLEX PROPERTIES URL "http://flex.sourceforge.net" DESCRIPTION "Fast Lexical Analyzer" TYPE REQUIRED PURPOSE "Required for the Predicate parser" ) find_package(BISON REQUIRED) set_package_properties(BISON PROPERTIES URL "http://www.gnu.org/software/bison" DESCRIPTION "general-purpose parser generator" TYPE REQUIRED PURPOSE "Required for the Predicate parser" ) -option(UDEV_DISABLED "Allows disabling UDev usage on Linux builds" OFF) -if (CMAKE_SYSTEM_NAME MATCHES Linux AND NOT UDEV_DISABLED) - find_package( UDev ) - if (UDev_FOUND) - set(UDEV_FOUND TRUE) # for config-solid.h - endif() - - set_package_properties(UDev PROPERTIES TYPE REQUIRED - PURPOSE "Allows Solid to use UDev to provide information about devices on Linux" - ) -endif() - include(ECMPoQmTools) option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)" OFF) add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") ecm_setup_version(PROJECT VARIABLE_PREFIX SOLID VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/solid_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5SolidConfigVersion.cmake" SOVERSION 5) # TODO: Remove these remove_definitions(-DQT_NO_CAST_FROM_ASCII) remove_definitions(-DQT_NO_CAST_FROM_BYTEARRAY) add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x050d00) if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ecm_install_po_files_as_qm(po) endif() option(WITH_NEW_SOLID_JOB "WIP: base Job class" Off) add_feature_info(Solid::Job WITH_NEW_SOLID_JOB "WIP: Base class for Solid Asynchronous apis") option(WITH_NEW_POWER_ASYNC_API "WIP: Asynchronous API for power management" Off) add_feature_info(Solid::PowerManagement WITH_NEW_POWER_ASYNC_API "WIP: Asynchronous API for power management") option(WITH_NEW_POWER_ASYNC_FREEDESKTOP "WIP: Freedesktop backend for the asynchronous api" Off) add_feature_info(Solid::PowerManagement WITH_NEW_POWER_ASYNC_FREEDESKTOP "WIP: Freedesktop backend for the asynchronous api") +include(SolidBackendsMacros) + +add_device_backends_begin() +add_device_backend(fakehw) +if (CMAKE_SYSTEM_NAME MATCHES Linux) + option(UDEV_DISABLED "Allows disabling UDev usage on Linux builds" OFF) + if (NOT UDEV_DISABLED) + find_package(UDev REQUIRED) + set_package_properties(UDev PROPERTIES + TYPE REQUIRED + PURPOSE "Allows Solid to use UDev to provide information about devices on Linux" + ) + endif() + if (UDev_FOUND) + set(UDEV_FOUND TRUE) # for config-solid.h + add_device_backend(udev) + endif() + add_device_backend(udisks2) + add_device_backend(fstab) + add_device_backend(upower) +elseif (APPLE) + find_package(IOKit REQUIRED) + add_device_backend(iokit) +elseif (WIN32) + add_device_backend(win) +elseif (NOT ANDROID) + add_device_backend(upower) + add_device_backend(fstab) + + if (CMAKE_SYSTEM_NAME MATCHES FreeBSD) + # FIXME: this should work on more Unix systems + option(EXPERIMENTAL_BSDISKS "Use UDisks2/bsdisks backend instead of HAL to manage disk devices" OFF) + else () + set(EXPERIMENTAL_BSDISKS FALSE) + endif() + if(EXPERIMENTAL_BSDISKS) + add_device_backend(udisks2) + else() + add_device_backend(hal) + endif() +endif() +add_device_backends_cmake() + add_subdirectory(src) if (BUILD_TESTING) add_subdirectory(autotests) endif() # create a Config.cmake and a ConfigVersion.cmake file and install them set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Solid") if (BUILD_QCH) ecm_install_qch_export( TARGETS KF5Solid_QCH FILE KF5SolidQchTargets.cmake DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF5SolidQchTargets.cmake\")") endif() configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KF5SolidConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KF5SolidConfig.cmake" PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KF5SolidConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/KF5SolidConfigVersion.cmake" DESTINATION "${CMAKECONFIG_INSTALL_DIR}" COMPONENT Devel ) install(EXPORT KF5SolidTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5SolidTargets.cmake NAMESPACE KF5:: ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/solid_version.h DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel ) install(FILES solid.categories DESTINATION ${KDE_INSTALL_CONFDIR} ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/cmake/SolidBackendsMacros.cmake b/cmake/SolidBackendsMacros.cmake new file mode 100644 index 0000000..3eaa988 --- /dev/null +++ b/cmake/SolidBackendsMacros.cmake @@ -0,0 +1,94 @@ +# Helper macros for dealing with device backends. + +# Copyright (c) 2019, Pino Toscano +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +# "Begin" the device backends addition, to be called *before* all the order +# add_device_backend* macros +macro(add_device_backends_begin) + set(ENABLED_DEVICE_BACKENDS) +endmacro() + +# Macro to add a new device backend; a new cmake option is automatically added +# to disable the build of that backend, available as +# BUILD_DEVICE_BACKEND_$name. +macro(add_device_backend backend) + _add_device_backend(${backend} "${CMAKE_CURRENT_SOURCE_DIR}") +endmacro() + +# Internal implementation of add_device_backend, mostly to pass the right +# source directory (in case of a function is the file containing that +# function). +function(_add_device_backend backend source_dir) + set(cmakelists_path "${source_dir}/src/solid/devices/backends/${backend}/CMakeLists.txt") + if(NOT (EXISTS "${cmakelists_path}")) + message(FATAL_ERROR "Missing CMakeLists.txt for backend ${backend}") + endif() + + option(BUILD_DEVICE_BACKEND_${backend} "Build the backend ${backend}" ON) + if(NOT BUILD_DEVICE_BACKEND_${backend}) + return() + endif() + + set(backends ${ENABLED_DEVICE_BACKENDS}) + list(APPEND backends ${backend}) + set(ENABLED_DEVICE_BACKENDS ${backends} PARENT_SCOPE) +endfunction() + +# After all the add_device_backend()s are called, create all the cmake +# material: +# - the BUILD_DEVICE_BACKEND_$name cmake variables, used to conditionally +# add stuff depending whether a backend is built +# - a feature info, to show that that backend was enabled +macro(add_device_backends_cmake) + foreach(backend ${ENABLED_DEVICE_BACKENDS}) + set(BUILD_DEVICE_BACKEND_${backend} TRUE) + add_feature_info(${backend} TRUE "Solid device '${backend}' backend.") + endforeach() +endmacro() + +# After all the add_device_backend()s are called, create/collect all the +# material used for the build: +# - create a config-backends.h file in the current binary directory, with +# BUILD_DEVICE_BACKEND_$name defines for all the built backends +# - fill the sources_var, and libs_var variables resp. with the sources, +# and the libraries needed for all the built backends +macro(add_device_backends_build base_backends_dir sources_var libs_var) + foreach(backend ${ENABLED_DEVICE_BACKENDS}) + string(APPEND config_backends_output "#define BUILD_DEVICE_BACKEND_${backend} 1\n") + unset(backend_sources) + unset(backend_libs) + include("${base_backends_dir}/${backend}/CMakeLists.txt") + foreach(source ${backend_sources}) + if(NOT (IS_ABSOLUTE ${source})) + set(source "${base_backends_dir}/${backend}/${source}") + endif() + list(APPEND ${sources_var} "${source}") + endforeach() + list(APPEND ${libs_var} ${backend_libs}) + endforeach() + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config-backends.h" "${config_backends_output}") +endmacro() diff --git a/src/solid/devices/CMakeLists.txt b/src/solid/devices/CMakeLists.txt index 542b019..37e13e9 100644 --- a/src/solid/devices/CMakeLists.txt +++ b/src/solid/devices/CMakeLists.txt @@ -1,180 +1,125 @@ include (CheckCXXSourceCompiles) if(WIN32) add_definitions(-DYY_NO_UNISTD_H) endif() if(MSVC OR (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "Intel")) check_cxx_source_compiles("int main() { __asm { pxor mm0, mm0 }; }" HAVE_X86_MMX) check_cxx_source_compiles("int main() { __asm { xorps xmm0, xmm0 }; }" HAVE_X86_SSE) check_cxx_source_compiles("int main() { __asm { xorpd xmm0, xmm0 }; }" HAVE_X86_SSE2) check_cxx_source_compiles("int main() { __asm { femms }; }" HAVE_X86_3DNOW) else() check_cxx_source_compiles(" #ifdef __SUNPRO_CC #define __asm__ asm #endif int main() { __asm__(\"pxor %mm0, %mm0\") ; }" HAVE_X86_MMX) check_cxx_source_compiles(" #ifdef __SUNPRO_CC #define __asm__ asm #endif int main() { __asm__(\"xorps %xmm0, %xmm0\"); }" HAVE_X86_SSE) check_cxx_source_compiles(" #ifdef __SUNPRO_CC #define __asm__ asm #endif int main() { __asm__(\"xorpd %xmm0, %xmm0\"); }" HAVE_X86_SSE2) check_cxx_source_compiles(" #ifdef __SUNPRO_CC #define __asm__ asm #endif int main() { __asm__(\"femms\"); }" HAVE_X86_3DNOW) endif() check_cxx_source_compiles(" #ifdef __SUNPRO_CC #define __asm__ asm #endif int main() { __asm__(\"mtspr 256, %0; vand %%v0, %%v0, %%v0\" : : \"r\"(-1) ); }" HAVE_PPC_ALTIVEC) configure_file(devices/config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-processor.h ) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/devices/ ${CMAKE_CURRENT_SOURCE_DIR}/devices/frontend/ ${CMAKE_CURRENT_BINARY_DIR}) set(solid_LIB_SRCS ${solid_LIB_SRCS} devices/managerbase.cpp devices/solidnamespace.cpp devices/predicateparse.cpp devices/frontend/device.cpp devices/frontend/devicemanager.cpp devices/frontend/deviceinterface.cpp devices/frontend/genericinterface.cpp devices/frontend/processor.cpp devices/frontend/block.cpp devices/frontend/storagedrive.cpp devices/frontend/opticaldrive.cpp devices/frontend/storagevolume.cpp devices/frontend/opticaldisc.cpp devices/frontend/storageaccess.cpp devices/frontend/camera.cpp devices/frontend/portablemediaplayer.cpp devices/frontend/networkshare.cpp devices/frontend/battery.cpp devices/frontend/predicate.cpp devices/ifaces/battery.cpp devices/ifaces/block.cpp devices/ifaces/camera.cpp devices/ifaces/opticaldrive.cpp devices/ifaces/device.cpp devices/ifaces/deviceinterface.cpp devices/ifaces/devicemanager.cpp devices/ifaces/genericinterface.cpp devices/ifaces/networkshare.cpp devices/ifaces/opticaldisc.cpp devices/ifaces/portablemediaplayer.cpp devices/ifaces/processor.cpp devices/ifaces/storagedrive.cpp devices/ifaces/storagevolume.cpp devices/ifaces/storageaccess.cpp devices/backends/shared/rootdevice.cpp devices/backends/shared/cpufeatures.cpp ) bison_target(SolidParser devices/predicate_parser.y ${CMAKE_CURRENT_BINARY_DIR}/predicate_parser.c COMPILE_FLAGS "-p Solid -d -b predicate_parser" ) set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/predicate_parser.h PROPERTY SKIP_AUTOMOC TRUE) # don't run automoc on this file flex_target(SolidLexer devices/predicate_lexer.l ${CMAKE_CURRENT_BINARY_DIR}/predicate_lexer.c COMPILE_FLAGS "-P Solid" ) add_flex_bison_dependency(SolidLexer SolidParser) list(APPEND solid_LIB_SRCS ${BISON_SolidParser_OUTPUTS} ${FLEX_SolidLexer_OUTPUTS}) -include(devices/backends/fakehw/CMakeLists.txt) - -if(NOT WIN32 AND NOT APPLE AND NOT ANDROID) - if (CMAKE_SYSTEM_NAME MATCHES FreeBSD) - option(EXPERIMENTAL_BSDISKS "Use UDisks2/bsdisks backend instead of HAL to manage disk devices" OFF) - else () - set(EXPERIMENTAL_BSDISKS FALSE) - endif() - - if ( UDev_FOUND ) - message(STATUS "Building Solid UDev backend." ) - include(devices/backends/udev/CMakeLists.txt) - endif() - - message(STATUS "Building Solid UPower backend." ) - include(devices/backends/upower/CMakeLists.txt) - - # FIXME: this should work on more Unix systems - if ((CMAKE_SYSTEM_NAME MATCHES Linux AND UDev_FOUND) OR EXPERIMENTAL_BSDISKS) - message(STATUS "Building Solid UDisks2 backend." ) - include(devices/backends/udisks2/CMakeLists.txt) - endif () - - message(STATUS "Building Solid fstab backend." ) - include(devices/backends/fstab/CMakeLists.txt) - - if (NOT CMAKE_SYSTEM_NAME MATCHES Linux) - message(STATUS "Building Solid HAL backend." ) - include(devices/backends/hal/CMakeLists.txt) - endif() -endif() - include(CheckIncludeFiles) include(CheckFunctionExists) include(CheckCXXSourceCompiles) #Needed for the fstab backend check_include_files(mntent.h HAVE_MNTENT_H) check_include_files(sys/types.h HAVE_SYS_TYPES_H) check_include_files(sys/param.h HAVE_SYS_PARAM_H) check_include_files("stdio.h;sys/mnttab.h" HAVE_SYS_MNTTAB_H) check_include_files("sys/param.h;sys/mount.h" HAVE_SYS_MOUNT_H) check_function_exists(getmntinfo HAVE_GETMNTINFO) check_function_exists(setmntent HAVE_SETMNTENT) check_cxx_source_compiles(" #include #include int main(){ struct statvfs *mntbufp; int flags; return getmntinfo(&mntbufp, flags); } " GETMNTINFO_USES_STATVFS ) configure_file(devices/config-solid.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-solid.h ) -if(APPLE) - find_package(IOKit REQUIRED) - - message(STATUS "-- Building Solid IOKit backend." ) - include(devices/backends/iokit/CMakeLists.txt) -endif() - -if(WIN32) - message(STATUS "-- Building Solid Windows backend." ) - include(devices/backends/win/CMakeLists.txt) -endif() - set(solid_OPTIONAL_LIBS) -if(WIN32) - set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} Qt5::Network setupapi) - set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} setupapi) -endif() - -if(APPLE) - set(solid_OPTIONAL_LIBS ${IOKIT_LIBRARY} "-framework DiskArbitration") -endif() - -if ( UDev_FOUND ) - set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} UDev::UDev) -endif () +add_device_backends_build("${CMAKE_CURRENT_SOURCE_DIR}/devices/backends" solid_LIB_SRCS solid_OPTIONAL_LIBS) diff --git a/src/solid/devices/backends/fakehw/CMakeLists.txt b/src/solid/devices/backends/fakehw/CMakeLists.txt index 4a4249b..6092819 100644 --- a/src/solid/devices/backends/fakehw/CMakeLists.txt +++ b/src/solid/devices/backends/fakehw/CMakeLists.txt @@ -1,17 +1,17 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/fakehw/fakebattery.cpp - devices/backends/fakehw/fakeblock.cpp - devices/backends/fakehw/fakecamera.cpp - devices/backends/fakehw/fakecdrom.cpp - devices/backends/fakehw/fakedevice.cpp - devices/backends/fakehw/fakedeviceinterface.cpp - devices/backends/fakehw/fakegenericinterface.cpp - devices/backends/fakehw/fakemanager.cpp - devices/backends/fakehw/fakenetworkshare.cpp - devices/backends/fakehw/fakeopticaldisc.cpp - devices/backends/fakehw/fakeportablemediaplayer.cpp - devices/backends/fakehw/fakeprocessor.cpp - devices/backends/fakehw/fakestorage.cpp - devices/backends/fakehw/fakestorageaccess.cpp - devices/backends/fakehw/fakevolume.cpp +set(backend_sources + fakebattery.cpp + fakeblock.cpp + fakecamera.cpp + fakecdrom.cpp + fakedevice.cpp + fakedeviceinterface.cpp + fakegenericinterface.cpp + fakemanager.cpp + fakenetworkshare.cpp + fakeopticaldisc.cpp + fakeportablemediaplayer.cpp + fakeprocessor.cpp + fakestorage.cpp + fakestorageaccess.cpp + fakevolume.cpp ) diff --git a/src/solid/devices/backends/fstab/CMakeLists.txt b/src/solid/devices/backends/fstab/CMakeLists.txt index 0cc5968..1f8e496 100644 --- a/src/solid/devices/backends/fstab/CMakeLists.txt +++ b/src/solid/devices/backends/fstab/CMakeLists.txt @@ -1,14 +1,14 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/fstab/fstabmanager.cpp - devices/backends/fstab/fstabdevice.cpp - devices/backends/fstab/fstabnetworkshare.cpp - devices/backends/fstab/fstabstorageaccess.cpp - devices/backends/fstab/fstabhandling.cpp - devices/backends/fstab/fstabwatcher.cpp +set(backend_sources + fstabmanager.cpp + fstabdevice.cpp + fstabnetworkshare.cpp + fstabstorageaccess.cpp + fstabhandling.cpp + fstabwatcher.cpp ) -ecm_qt_declare_logging_category(solid_LIB_SRCS +ecm_qt_declare_logging_category(backend_sources HEADER fstab_debug.h IDENTIFIER Solid::Backends::Fstab::FSTAB DEFAULT_SEVERITY Warning CATEGORY_NAME org.kde.solid.fstab) diff --git a/src/solid/devices/backends/hal/CMakeLists.txt b/src/solid/devices/backends/hal/CMakeLists.txt index 1103534..830db03 100644 --- a/src/solid/devices/backends/hal/CMakeLists.txt +++ b/src/solid/devices/backends/hal/CMakeLists.txt @@ -1,17 +1,17 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/hal/halbattery.cpp - devices/backends/hal/halblock.cpp - devices/backends/hal/halcamera.cpp - devices/backends/hal/halcdrom.cpp - devices/backends/hal/haldeviceinterface.cpp - devices/backends/hal/halfstabhandling.cpp - devices/backends/hal/halgenericinterface.cpp - devices/backends/hal/haldevice.cpp - devices/backends/hal/halmanager.cpp - devices/backends/hal/halopticaldisc.cpp - devices/backends/hal/halportablemediaplayer.cpp - devices/backends/hal/halprocessor.cpp - devices/backends/hal/halstorageaccess.cpp - devices/backends/hal/halstorage.cpp - devices/backends/hal/halvolume.cpp +set(backend_sources + halbattery.cpp + halblock.cpp + halcamera.cpp + halcdrom.cpp + haldeviceinterface.cpp + halfstabhandling.cpp + halgenericinterface.cpp + haldevice.cpp + halmanager.cpp + halopticaldisc.cpp + halportablemediaplayer.cpp + halprocessor.cpp + halstorageaccess.cpp + halstorage.cpp + halvolume.cpp ) diff --git a/src/solid/devices/backends/iokit/CMakeLists.txt b/src/solid/devices/backends/iokit/CMakeLists.txt index dcc9e5f..f6162f3 100644 --- a/src/solid/devices/backends/iokit/CMakeLists.txt +++ b/src/solid/devices/backends/iokit/CMakeLists.txt @@ -1,20 +1,21 @@ include_directories( ${Qt5Core_PRIVATE_INCLUDE_DIRS} ) -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/iokit/iokitmanager.cpp - devices/backends/iokit/iokitdevice.cpp - devices/backends/iokit/cfhelper.cpp - devices/backends/iokit/dadictionary.cpp - devices/backends/iokit/iokitdeviceinterface.cpp - devices/backends/iokit/iokitgenericinterface.cpp - devices/backends/iokit/iokitprocessor.cpp - devices/backends/iokit/iokitbattery.cpp - devices/backends/iokit/iokitblock.cpp - devices/backends/iokit/iokitstorage.cpp - devices/backends/iokit/iokitvolume.cpp - devices/backends/iokit/iokitstorageaccess.cpp - devices/backends/iokit/iokitopticaldrive.cpp - devices/backends/iokit/iokitopticaldisc.cpp +set(backend_sources + iokitmanager.cpp + iokitdevice.cpp + cfhelper.cpp + dadictionary.cpp + iokitdeviceinterface.cpp + iokitgenericinterface.cpp + iokitprocessor.cpp + iokitbattery.cpp + iokitblock.cpp + iokitstorage.cpp + iokitvolume.cpp + iokitstorageaccess.cpp + iokitopticaldrive.cpp + iokitopticaldisc.cpp ) +set(backend_libs ${IOKIT_LIBRARY} "-framework DiskArbitration") diff --git a/src/solid/devices/backends/udev/CMakeLists.txt b/src/solid/devices/backends/udev/CMakeLists.txt index 7f8a84f..14c5eb0 100644 --- a/src/solid/devices/backends/udev/CMakeLists.txt +++ b/src/solid/devices/backends/udev/CMakeLists.txt @@ -1,27 +1,28 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/udev/udevdevice.cpp - devices/backends/udev/udevmanager.cpp - devices/backends/udev/udevdeviceinterface.cpp - devices/backends/udev/udevgenericinterface.cpp - devices/backends/udev/cpuinfo.cpp - devices/backends/udev/udevprocessor.cpp - devices/backends/udev/udevcamera.cpp - devices/backends/udev/udevportablemediaplayer.cpp - devices/backends/udev/udevblock.cpp - devices/backends/shared/udevqtclient.cpp - devices/backends/shared/udevqtdevice.cpp +set(backend_sources + udevdevice.cpp + udevmanager.cpp + udevdeviceinterface.cpp + udevgenericinterface.cpp + cpuinfo.cpp + udevprocessor.cpp + udevcamera.cpp + udevportablemediaplayer.cpp + udevblock.cpp + ../shared/udevqtclient.cpp + ../shared/udevqtdevice.cpp ) +set(backend_libs UDev::UDev) set(UDEV_DETAILED_OUTPUT OFF CACHE BOOL "provide extended output regarding udev events") if(UDEV_DETAILED_OUTPUT) add_definitions(-DUDEV_DETAILED_OUTPUT) endif() # check for media-player-info (runtime-only optional dependency) find_package(MediaPlayerInfo) set_package_properties(MediaPlayerInfo PROPERTIES DESCRIPTION "Enables identification and querying of portable media players" PURPOSE "Runtime-only dependency of the udev solid backend. Support for m-p-i is included even if not found during build" URL "http://www.freedesktop.org/wiki/Software/media-player-info" TYPE RUNTIME ) diff --git a/src/solid/devices/backends/udisks2/CMakeLists.txt b/src/solid/devices/backends/udisks2/CMakeLists.txt index 6d12304..8ed90c4 100644 --- a/src/solid/devices/backends/udisks2/CMakeLists.txt +++ b/src/solid/devices/backends/udisks2/CMakeLists.txt @@ -1,20 +1,20 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/udisks2/udisksmanager.cpp - devices/backends/udisks2/udisksdevice.cpp - devices/backends/udisks2/udisksdevicebackend.cpp - devices/backends/udisks2/udisksblock.cpp - devices/backends/udisks2/udisksstoragevolume.cpp - devices/backends/udisks2/udisksdeviceinterface.cpp - devices/backends/udisks2/udisksopticaldisc.cpp - devices/backends/udisks2/udisksopticaldrive.cpp - devices/backends/udisks2/udisksstoragedrive.cpp - devices/backends/udisks2/udisksstorageaccess.cpp - devices/backends/udisks2/udisksgenericinterface.cpp - devices/backends/udisks2/dbus/manager.cpp +set(backend_sources + udisksmanager.cpp + udisksdevice.cpp + udisksdevicebackend.cpp + udisksblock.cpp + udisksstoragevolume.cpp + udisksdeviceinterface.cpp + udisksopticaldisc.cpp + udisksopticaldrive.cpp + udisksstoragedrive.cpp + udisksstorageaccess.cpp + udisksgenericinterface.cpp + dbus/manager.cpp ) -ecm_qt_declare_logging_category(solid_LIB_SRCS +ecm_qt_declare_logging_category(backend_sources HEADER udisks_debug.h IDENTIFIER Solid::Backends::UDisks2::UDISKS2 DEFAULT_SEVERITY Warning CATEGORY_NAME org.kde.solid.udisks2) diff --git a/src/solid/devices/backends/upower/CMakeLists.txt b/src/solid/devices/backends/upower/CMakeLists.txt index ec924bf..bc8a1eb 100644 --- a/src/solid/devices/backends/upower/CMakeLists.txt +++ b/src/solid/devices/backends/upower/CMakeLists.txt @@ -1,7 +1,7 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/upower/upowermanager.cpp - devices/backends/upower/upowerdevice.cpp - devices/backends/upower/upowerbattery.cpp - devices/backends/upower/upowerdeviceinterface.cpp - devices/backends/upower/upowergenericinterface.cpp +set(backend_sources + upowermanager.cpp + upowerdevice.cpp + upowerbattery.cpp + upowerdeviceinterface.cpp + upowergenericinterface.cpp ) diff --git a/src/solid/devices/backends/win/CMakeLists.txt b/src/solid/devices/backends/win/CMakeLists.txt index 4d9ea3f..931bd5d 100644 --- a/src/solid/devices/backends/win/CMakeLists.txt +++ b/src/solid/devices/backends/win/CMakeLists.txt @@ -1,15 +1,16 @@ -set(solid_LIB_SRCS ${solid_LIB_SRCS} - devices/backends/win/winblock.cpp - devices/backends/win/winopticaldrive.cpp - devices/backends/win/wininterface.cpp - devices/backends/win/wingenericinterface.cpp - devices/backends/win/windevice.cpp - devices/backends/win/windevicemanager.cpp - devices/backends/win/winopticaldisc.cpp - devices/backends/win/winprocessor.cpp - #devices/backends/win/wmiportablemediaplayer.cpp - devices/backends/win/winstorageaccess.cpp - devices/backends/win/winstoragedrive.cpp - devices/backends/win/winstoragevolume.cpp - devices/backends/win/winbattery.cpp +set(backend_sources + winblock.cpp + winopticaldrive.cpp + wininterface.cpp + wingenericinterface.cpp + windevice.cpp + windevicemanager.cpp + winopticaldisc.cpp + winprocessor.cpp + #wmiportablemediaplayer.cpp + winstorageaccess.cpp + winstoragedrive.cpp + winstoragevolume.cpp + winbattery.cpp ) +set(backend_libs Qt5::Network setupapi) diff --git a/src/solid/devices/managerbase.cpp b/src/solid/devices/managerbase.cpp index 787e117..a512e4c 100644 --- a/src/solid/devices/managerbase.cpp +++ b/src/solid/devices/managerbase.cpp @@ -1,95 +1,102 @@ /* Copyright 2006-2007 Kevin Ottens This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 6 of version 3 of the license. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "managerbase_p.h" #include -#if !defined (Q_OS_WIN) && !defined (Q_OS_MAC) -#include -#endif -#include "backends/fakehw/fakemanager.h" +#include -#if defined (Q_OS_MAC) -#include "backends/iokit/iokitmanager.h" -#elif defined (Q_OS_UNIX) && !defined(Q_OS_ANDROID) +// do *not* use other defines than BUILD_DEVICE_BACKEND_$backend to include +// the managers, and keep an alphabetical order +#ifdef BUILD_DEVICE_BACKEND_fakehw +#include "backends/fakehw/fakemanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_fstab +#include "backends/fstab/fstabmanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_hal #include "backends/hal/halmanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_iokit +#include "backends/iokit/iokitmanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_udev +#include "backends/udev/udevmanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_udisks2 #include "backends/udisks2/udisksmanager.h" +#endif +#ifdef BUILD_DEVICE_BACKEND_upower #include "backends/upower/upowermanager.h" - -#if UDEV_FOUND -#include "backends/udev/udevmanager.h" #endif - -#include "backends/fstab/fstabmanager.h" - -#elif defined (Q_OS_WIN) && !defined(_WIN32_WCE) +#ifdef BUILD_DEVICE_BACKEND_win #include "backends/win/windevicemanager.h" #endif Solid::ManagerBasePrivate::ManagerBasePrivate() { } Solid::ManagerBasePrivate::~ManagerBasePrivate() { qDeleteAll(m_backends); } +// do *not* use other defines than BUILD_DEVICE_BACKEND_$backend to add +// the managers, and keep an alphabetical order void Solid::ManagerBasePrivate::loadBackends() { QString solidFakeXml(QString::fromLocal8Bit(qgetenv("SOLID_FAKEHW"))); if (!solidFakeXml.isEmpty()) { +#ifdef BUILD_DEVICE_BACKEND_fakehw m_backends << new Solid::Backends::Fake::FakeManager(nullptr, solidFakeXml); +#endif } else { -# if defined(Q_OS_MAC) +#ifdef BUILD_DEVICE_BACKEND_fstab + m_backends << new Solid::Backends::Fstab::FstabManager(nullptr); +#endif +#ifdef BUILD_DEVICE_BACKEND_hal + m_backends << new Solid::Backends::Hal::HalManager(nullptr); +#endif +#ifdef BUILD_DEVICE_BACKEND_iokit m_backends << new Solid::Backends::IOKit::IOKitManager(nullptr); - -# elif defined(Q_OS_FREEBSD) - m_backends << new Solid::Backends::UPower::UPowerManager(nullptr) -# if EXPERIMENTAL_BSDISKS - << new Solid::Backends::UDisks2::Manager(nullptr) -# else - << new Solid::Backends::Hal::HalManager(nullptr) -# endif - << new Solid::Backends::Fstab::FstabManager(nullptr); - -# elif defined(Q_OS_WIN) && !defined(_WIN32_WCE) +#endif +#ifdef BUILD_DEVICE_BACKEND_udev + m_backends << new Solid::Backends::UDev::UDevManager(nullptr); +#endif +#ifdef BUILD_DEVICE_BACKEND_udisks2 + m_backends << new Solid::Backends::UDisks2::Manager(nullptr); +#endif +#ifdef BUILD_DEVICE_BACKEND_upower + m_backends << new Solid::Backends::UPower::UPowerManager(nullptr); +#endif +#ifdef BUILD_DEVICE_BACKEND_win m_backends << new Solid::Backends::Win::WinDeviceManager(nullptr); -# elif defined(Q_OS_UNIX) && !defined(Q_OS_LINUX) - m_backends << new Solid::Backends::Hal::HalManager(nullptr); - -# elif defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) -# if UDEV_FOUND - m_backends << new Solid::Backends::UDev::UDevManager(nullptr); - m_backends << new Solid::Backends::UDisks2::Manager(nullptr); -# endif - m_backends << new Solid::Backends::UPower::UPowerManager(nullptr) - << new Solid::Backends::Fstab::FstabManager(nullptr); -# endif +#endif } } QList Solid::ManagerBasePrivate::managerBackends() const { return m_backends; }