diff --git a/CMakeLists.txt b/CMakeLists.txt index 809653a79..a99a303b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,9 @@ OPTION( WITH_HAL "Enable HAL support" OFF ) OPTION( WITH_DEVKITPOWER "Enable DeviceKit Power support" OFF ) OPTION( WITH_LOGINDPOWER "Enable Logind/Systemd Power support" OFF ) OPTION( WITH_UPOWER "Enable uPower support" ${WITH_ALL_OPTIONS} ) +OPTION( WITH_UDISKS "Enable uDisks support" ${WITH_ALL_OPTIONS} ) +OPTION( WITH_UDISKS2 "Enable uDisks2 support" ${WITH_ALL_OPTIONS} ) +OPTION( WITH_UDEVIL "Enable udevil support" ${WITH_ALL_OPTIONS} ) OPTION( WITH_CONSOLEKIT "Enable ConsoleKit support" ${WITH_ALL_OPTIONS} ) OPTION( WITH_NETWORK_MANAGER_BACKEND "Enable network-manager support" OFF ) OPTION( WITH_SUDO_TDESU_BACKEND "Use sudo as backend for tdesu (default is su)" OFF ) diff --git a/tdecore/tdehw/CMakeLists.txt b/tdecore/tdehw/CMakeLists.txt index 9495b3717..737d0557c 100644 --- a/tdecore/tdehw/CMakeLists.txt +++ b/tdecore/tdehw/CMakeLists.txt @@ -17,6 +17,13 @@ if( NOT DBUS_SYSTEM_BUS ) set( DBUS_SYSTEM_BUS "unix:path=/var/run/dbus/system_bus_socket" CACHE INTERNAL "" FORCE ) endif() +if( WITH_TDEHWLIB_DAEMONS OR WITH_HAL OR WITH_DEVKITPOWER OR WITH_UPOWER OR WITH_UDISKS OR WITH_UDISKS2 OR + WITH_NETWORK_MANAGER_BACKEND OR WITH_CONSOLEKIT ) + list( APPEND TDEHW_CUSTOM_INCLUDE_DIRS ${DBUS_TQT_INCLUDE_DIRS} ) + list( APPEND TDEHW_CUSTOM_LIBRARY_DIRS ${DBUS_TQT_LIBRARY_DIRS} ) + list( APPEND TDEHW_CUSTOM_LIBRARIES ${DBUS_TQT_LIBRARIES} ) +endif( ) + if( WITH_TDEHWLIB_DAEMONS ) add_definitions( -DWITH_TDEHWLIB_DAEMONS ) endif( ) @@ -37,6 +44,18 @@ if( WITH_UPOWER ) add_definitions( -DWITH_UPOWER ) endif( ) +if( WITH_UDISKS ) + add_definitions( -DWITH_UDISKS ) +endif( ) + +if( WITH_UDISKS2 ) + add_definitions( -DWITH_UDISKS2 ) +endif( ) + +if( WITH_UDEVIL ) + add_definitions( -DWITH_UDEVIL ) +endif( ) + if( WITH_CONSOLEKIT ) add_definitions( -DWITH_CONSOLEKIT ) endif( ) @@ -73,13 +92,11 @@ include_directories( ${CMAKE_SOURCE_DIR}/tdecore ${CMAKE_SOURCE_DIR}/dcop ${CMAKE_BINARY_DIR}/tdeio/kssl - ${DBUS_TQT_INCLUDE_DIRS} ${TDEHW_CUSTOM_INCLUDE_DIRS} ) link_directories( ${TQT_LIBRARY_DIRS} - ${DBUS_TQT_LIBRARY_DIRS} ${TDEHW_CUSTOM_LIBRARY_DIRS} ) @@ -109,6 +126,5 @@ set( ${target}_SRCS tde_add_library( ${target} STATIC_PIC AUTOMOC SOURCES ${${target}_SRCS} - LINK udev ${TDENM_LIBRARIES} ${TDEUPOWER_LIBRARIES} ${DBUS_TQT_LIBRARIES} - ${TDEHW_CUSTOM_LIBRARIES} + LINK udev ${TDENM_LIBRARIES} ${TDEUPOWER_LIBRARIES} ${TDEHW_CUSTOM_LIBRARIES} ) diff --git a/tdecore/tdehw/disksHelper.cpp b/tdecore/tdehw/disksHelper.cpp index 0eab2d28c..2589e5053 100644 --- a/tdecore/tdehw/disksHelper.cpp +++ b/tdecore/tdehw/disksHelper.cpp @@ -20,16 +20,21 @@ #include "disksHelper.h" #include "tdelocale.h" #include "tdestoragedevice.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "tqdbusdatalist.h" +#if defined(WITH_UDISKS) || defined(WITH_UDISKS2) + #include + #include + #include + #include + #include + #include + #include + #include + #include "tqdbusdatalist.h" +#endif + + +#ifdef WITH_UDISKS //------------------------------- // UDisks //------------------------------- @@ -148,7 +153,10 @@ TQStringVariantMap UDisksUnmountDrive(TQString deviceNode, TQStringList unmountO } return result; } +#endif + +#ifdef WITH_UDISKS2 //------------------------------- // UDisks2 //------------------------------- @@ -310,5 +318,4 @@ TQStringVariantMap UDisks2UnmountDrive(TQString deviceNode, TQString unmountOpti } return result; } - - +#endif diff --git a/tdecore/tdehw/tdestoragedevice.cpp b/tdecore/tdehw/tdestoragedevice.cpp index d797ff032..bff09e319 100644 --- a/tdecore/tdehw/tdestoragedevice.cpp +++ b/tdecore/tdehw/tdestoragedevice.cpp @@ -308,6 +308,7 @@ bool TDEStorageDevice::lockDriveMedia(bool lock) { } bool TDEStorageDevice::ejectDrive() { +#ifdef WITH_UDISKS2 if (!(TDEGlobal::dirs()->findExe("udisksctl").isEmpty())) { TQStringVariantMap ejectResult = UDisks2EjectDrive(this); if (ejectResult["result"].toBool()) { @@ -318,6 +319,8 @@ bool TDEStorageDevice::ejectDrive() { fflush(stdout); } } +#endif +#ifdef WITH_UDISKS if (!(TDEGlobal::dirs()->findExe("udisks").isEmpty())) { TQStringVariantMap ejectResult = UDisksEjectDrive(this); if (ejectResult["result"].toBool()) { @@ -328,6 +331,7 @@ bool TDEStorageDevice::ejectDrive() { fflush(stdout); } } +#endif if (!(TDEGlobal::dirs()->findExe("eject").isEmpty())) { TQString command = TQString("eject -v '%1' 2>&1").arg(deviceNode()); @@ -718,7 +722,9 @@ TQStringVariantMap TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageM TQString devNode = deviceNode(); devNode.replace("'", "'\\''"); mediaName.replace("'", "'\\''"); + TQString command = TQString::null; +#if defined(WITH_UDISKS2) || defined(WITH_UDISKS) || defined(WITH_UDEVIL) // Prepare filesystem options for mount TQStringList udisksOptions; if (mountOptions["ro"] == "true") { @@ -770,13 +776,17 @@ TQStringVariantMap TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageM optionString.remove(0, 1); } - // Try to use UDISKS v2 via DBUS, if available TQString fileSystemType; if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { fileSystemType = mountOptions["filesystem"]; } - TQStringVariantMap mountResult = UDisks2MountDrive(devNode, fileSystemType, optionString); + TQStringVariantMap mountResult; +#endif + +#if defined(WITH_UDISKS2) + // Try to use UDISKS v2 via DBUS, if available + mountResult = UDisks2MountDrive(devNode, fileSystemType, optionString); if (mountResult["result"].toBool()) { // Update internal mount data TDEGlobal::hardwareDevices()->processModifiedMounts(); @@ -791,7 +801,9 @@ TQStringVariantMap TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageM result["result"] = false; return result; } +#endif +#if defined(WITH_UDISKS) // The UDISKS v2 DBUS service was either not available or was unusable // Try to use UDISKS v1 via DBUS, if available mountResult = UDisksMountDrive(devNode, fileSystemType, udisksOptions); @@ -809,10 +821,11 @@ TQStringVariantMap TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageM result["result"] = false; return result; } +#endif +#if defined(WITH_UDEVIL) // The UDISKS v1 DBUS service was either not available or was unusable // Use 'udevil' command, if available - TQString command = TQString::null; if (!TDEGlobal::dirs()->findExe("udevil").isEmpty()) { if (mountOptions.contains("filesystem") && !mountOptions["filesystem"].isEmpty()) { fileSystemType = TQString("-t %1").arg(mountOptions["filesystem"]); @@ -829,8 +842,9 @@ TQStringVariantMap TDEStorageDevice::mountDevice(TQString mediaName, TDEStorageM command = TQString("udevil mount %1 -o '%2' '%3' '%4' 2>&1") .arg(fileSystemType).arg(optionString).arg(devNode).arg(mountpoint); } +#endif - // If 'udevil' was not found, use 'pmount' command if available + // If no other method was found, use 'pmount' command if available if(command.isEmpty()) { if (!TDEGlobal::dirs()->findExe("pmount").isEmpty()) { // Create dummy password file @@ -990,9 +1004,12 @@ TQStringVariantMap TDEStorageDevice::unmountDevice() { mountpoint.replace("'", "'\\''"); TQString devNode = deviceNode(); + TQString command = TQString::null; + TQStringVariantMap unmountResult; +#if defined(WITH_UDISKS2) // Try to use UDISKS v2 via DBUS, if available - TQStringVariantMap unmountResult = UDisks2UnmountDrive(devNode, TQString::null); + unmountResult = UDisks2UnmountDrive(devNode, TQString::null); if (unmountResult["result"].toBool()) { // Update internal mount data TDEGlobal::hardwareDevices()->processModifiedMounts(); @@ -1006,7 +1023,9 @@ TQStringVariantMap TDEStorageDevice::unmountDevice() { result["result"] = false; return result; } +#endif +#if defined(WITH_UDISKS) // The UDISKS v2 DBUS service was either not available or was unusable // Try to use UDISKS v1 via DBUS, if available unmountResult = UDisksUnmountDrive(devNode, TQStringList()); @@ -1023,15 +1042,17 @@ TQStringVariantMap TDEStorageDevice::unmountDevice() { result["result"] = false; return result; } +#endif +#if defined(WITH_UDEVIL) // The UDISKS v1 DBUS service was either not available or was unusable // Use 'udevil' command, if available - TQString command = TQString::null; if (!TDEGlobal::dirs()->findExe("udevil").isEmpty()) { command = TQString("udevil umount '%1' 2>&1").arg(mountpoint); } +#endif - // If 'udevil' was not found, use 'pmount' command if available + // If no other method was found, use 'pmount' command if available if(command.isEmpty() && !TDEGlobal::dirs()->findExe("pumount").isEmpty()) { command = TQString("pumount '%1' 2>&1").arg(mountpoint); } diff --git a/tdeioslave/file/file.cc b/tdeioslave/file/file.cc index c445230e6..fda72f2d5 100644 --- a/tdeioslave/file/file.cc +++ b/tdeioslave/file/file.cc @@ -1670,16 +1670,19 @@ void FileProtocol::unmount( const TQString& _point ) bool FileProtocol::pmount(const TQString &dev) { - TQString mountProg; + TQString mountProg = TQString::null; TQCString buffer; +#ifdef WITH_UDISKS2 // Use 'udisksctl' (UDISKS2) if available mountProg = TDEGlobal::dirs()->findExe("udisksctl"); if (!mountProg.isEmpty()) { buffer.sprintf( "%s mount -b %s", TQFile::encodeName(mountProg).data(), TQFile::encodeName(TDEProcess::quote(dev)).data() ); } +#endif +#ifdef WITH_UDISKS // Use 'udisks' (UDISKS1) if available if (mountProg.isEmpty()) { mountProg = TDEGlobal::dirs()->findExe("udisks"); @@ -1688,6 +1691,7 @@ bool FileProtocol::pmount(const TQString &dev) TQFile::encodeName(TDEProcess::quote(dev)).data() ); } } +#endif // Use 'pmount', if available if (mountProg.isEmpty()) { @@ -1731,16 +1735,19 @@ bool FileProtocol::pumount(const TQString &point) if (dev.isEmpty()) return false; if (dev.endsWith("/")) dev.truncate(dev.length()-1); - TQString umountProg; + TQString umountProg = TQString::null; TQCString buffer; +#ifdef WITH_UDISKS2 // Use 'udisksctl' (UDISKS2), if available umountProg = TDEGlobal::dirs()->findExe("udisksctl"); if (!umountProg.isEmpty()) { buffer.sprintf( "%s unmount -b %s", TQFile::encodeName(umountProg).data(), TQFile::encodeName(TDEProcess::quote(dev)).data() ); } +#endif +#ifdef WITH_UDISKS // Use 'udisks' (UDISKS1), if available if (umountProg.isEmpty()) { umountProg = TDEGlobal::dirs()->findExe("udisks"); @@ -1749,6 +1756,7 @@ bool FileProtocol::pumount(const TQString &point) TQFile::encodeName(TDEProcess::quote(dev)).data() ); } } +#endif // Use 'pumount', if available if (umountProg.isEmpty()) {