diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,18 +51,6 @@ 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) @@ -92,6 +80,49 @@ 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) diff --git a/cmake/SolidBackendsMacros.cmake b/cmake/SolidBackendsMacros.cmake new file mode 100644 --- /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 --- a/src/solid/devices/CMakeLists.txt +++ b/src/solid/devices/CMakeLists.txt @@ -93,38 +93,6 @@ 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) @@ -152,29 +120,6 @@ 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 --- 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 --- a/src/solid/devices/backends/fstab/CMakeLists.txt +++ b/src/solid/devices/backends/fstab/CMakeLists.txt @@ -1,13 +1,13 @@ -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 diff --git a/src/solid/devices/backends/hal/CMakeLists.txt b/src/solid/devices/backends/hal/CMakeLists.txt --- 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 --- a/src/solid/devices/backends/iokit/CMakeLists.txt +++ b/src/solid/devices/backends/iokit/CMakeLists.txt @@ -2,19 +2,20 @@ ${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 --- a/src/solid/devices/backends/udev/CMakeLists.txt +++ b/src/solid/devices/backends/udev/CMakeLists.txt @@ -1,16 +1,17 @@ -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) diff --git a/src/solid/devices/backends/udisks2/CMakeLists.txt b/src/solid/devices/backends/udisks2/CMakeLists.txt --- a/src/solid/devices/backends/udisks2/CMakeLists.txt +++ b/src/solid/devices/backends/udisks2/CMakeLists.txt @@ -1,19 +1,19 @@ -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 diff --git a/src/solid/devices/backends/upower/CMakeLists.txt b/src/solid/devices/backends/upower/CMakeLists.txt --- 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 --- 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 --- a/src/solid/devices/managerbase.cpp +++ b/src/solid/devices/managerbase.cpp @@ -21,26 +21,33 @@ #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 @@ -53,38 +60,38 @@ 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 } }