mirror of
https://github.com/Kistler-Group/sdbus-cpp.git
synced 2025-07-29 17:47:18 +02:00
fix: cleanup for older libsystemd versions (#454)
Fix inconsistencies in documentation and CMake files regarding minimum required libsystemd version (which is v238 for sdbus-c++ v2.0). Also fix compiler error bug in sdbus-c++ code when compiled against older libsystemd versions. Plus some extra related cleanups.
This commit is contained in:
committed by
GitHub
parent
b7a038f11f
commit
1b7acaa735
@ -17,7 +17,7 @@ if(NOT SDBUSCPP_BUILD_LIBSYSTEMD)
|
|||||||
set(SDBUSCPP_SDBUS_LIB "default" CACHE STRING "sd-bus implementation library to search for and use (default, systemd, elogind, or basu)")
|
set(SDBUSCPP_SDBUS_LIB "default" CACHE STRING "sd-bus implementation library to search for and use (default, systemd, elogind, or basu)")
|
||||||
set_property(CACHE SDBUSCPP_SDBUS_LIB PROPERTY STRINGS default systemd elogind basu)
|
set_property(CACHE SDBUSCPP_SDBUS_LIB PROPERTY STRINGS default systemd elogind basu)
|
||||||
else()
|
else()
|
||||||
set(SDBUSCPP_LIBSYSTEMD_VERSION "242" CACHE STRING "libsystemd version (>=239) to build and incorporate into libsdbus-c++")
|
set(SDBUSCPP_LIBSYSTEMD_VERSION "252" CACHE STRING "libsystemd version (>=239) to build and incorporate into libsdbus-c++")
|
||||||
set(SDBUSCPP_LIBSYSTEMD_EXTRA_CONFIG_OPTS "" CACHE STRING "Additional configuration options to be passed as-is to libsystemd build system")
|
set(SDBUSCPP_LIBSYSTEMD_EXTRA_CONFIG_OPTS "" CACHE STRING "Additional configuration options to be passed as-is to libsystemd build system")
|
||||||
endif()
|
endif()
|
||||||
option(SDBUSCPP_INSTALL "Enable installation of sdbus-c++ (downstream projects embedding sdbus-c++ may want to turn this OFF)" ON)
|
option(SDBUSCPP_INSTALL "Enable installation of sdbus-c++ (downstream projects embedding sdbus-c++ may want to turn this OFF)" ON)
|
||||||
@ -86,17 +86,19 @@ else()
|
|||||||
set(SDBUS_LIBS systemd elogind basu) # This is the default search order
|
set(SDBUS_LIBS systemd elogind basu) # This is the default search order
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(MINIMUM_SDBUS_VERSION 238)
|
||||||
|
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
foreach(LIB ${SDBUS_LIBS})
|
foreach(LIB ${SDBUS_LIBS})
|
||||||
if(LIB STREQUAL "systemd")
|
if(LIB STREQUAL "systemd")
|
||||||
pkg_check_modules(Systemd IMPORTED_TARGET GLOBAL libsystemd>=238)
|
pkg_check_modules(Systemd IMPORTED_TARGET GLOBAL libsystemd>=${MINIMUM_SDBUS_VERSION})
|
||||||
if(TARGET PkgConfig::Systemd)
|
if(TARGET PkgConfig::Systemd)
|
||||||
set(SDBUS_IMPL "systemd")
|
set(SDBUS_IMPL "systemd")
|
||||||
set(SDBUS_LIB "libsystemd")
|
set(SDBUS_LIB "libsystemd")
|
||||||
break()
|
break()
|
||||||
endif()
|
endif()
|
||||||
elseif(LIB STREQUAL "elogind")
|
elseif(LIB STREQUAL "elogind")
|
||||||
pkg_check_modules(Systemd IMPORTED_TARGET GLOBAL libelogind>=238)
|
pkg_check_modules(Systemd IMPORTED_TARGET GLOBAL libelogind>=${MINIMUM_SDBUS_VERSION})
|
||||||
if(TARGET PkgConfig::Systemd)
|
if(TARGET PkgConfig::Systemd)
|
||||||
set(SDBUS_IMPL "elogind")
|
set(SDBUS_IMPL "elogind")
|
||||||
set(SDBUS_LIB "libelogind")
|
set(SDBUS_LIB "libelogind")
|
||||||
@ -326,6 +328,6 @@ set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
|||||||
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
|
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
|
||||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||||
set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON)
|
set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON)
|
||||||
set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "libsystemd-dev (>=236)")
|
set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "libsystemd-dev (>=${MINIMUM_SDBUS_VERSION})")
|
||||||
|
|
||||||
include(CPack)
|
include(CPack)
|
||||||
|
34
README.md
34
README.md
@ -28,35 +28,39 @@ $ sudo cmake --build . --target install
|
|||||||
|
|
||||||
* `SDBUSCPP_BUILD_CODEGEN` [boolean]
|
* `SDBUSCPP_BUILD_CODEGEN` [boolean]
|
||||||
|
|
||||||
Option for building the stub code generator `sdbus-c++-xml2cpp` for generating the adaptor and proxy interfaces out of the D-Bus IDL XML description. Default value: `OFF`. Use `-DSDBUSCPP_BUILD_CODEGEN=ON` flag to turn on building the code gen.
|
Build the codegen tool `sdbus-c++-xml2cpp` for generating the high level C++ bindings out of the D-Bus IDL XML description. Default value: `OFF`. Use `-DSDBUSCPP_BUILD_CODEGEN=ON` flag to turn on building the code gen.
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_DOCS` [boolean]
|
* `SDBUSCPP_BUILD_DOCS` [boolean]
|
||||||
|
|
||||||
Option for including sdbus-c++ documentation files and tutorials. Default value: `ON`. With this option turned on, you may also enable/disable the following option:
|
Include sdbus-c++ documentation files and tutorials. Default value: `ON`. With this option turned on, you may also enable/disable the following option:
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_DOXYGEN_DOCS` [boolean]
|
* `SDBUSCPP_BUILD_DOXYGEN_DOCS` [boolean]
|
||||||
|
|
||||||
Option for building Doxygen documentation of sdbus-c++ API. If enabled, the documentation must still be built explicitly through `cmake --build . --target doc`. Default value: `OFF`. Use `-DSDBUSCPP_BUILD_DOXYGEN_DOCS=OFF` to disable searching for Doxygen and building Doxygen documentation of sdbus-c++ API.
|
Build Doxygen documentation of sdbus-c++ API. If enabled, the documentation must still be built explicitly through `cmake --build . --target doc`. Default value: `OFF`. Use `-DSDBUSCPP_BUILD_DOXYGEN_DOCS=OFF` to disable searching for Doxygen and building Doxygen documentation of sdbus-c++ API.
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_TESTS` [boolean]
|
* `SDBUSCPP_BUILD_TESTS` [boolean]
|
||||||
|
|
||||||
Option for building sdbus-c++ unit and integration tests, invokable by `cmake --build . --target test` (Note: before invoking `cmake --build . --target test`, make sure you copy `tests/integrationtests/files/org.sdbuscpp.integrationtests.conf` file to `/etc/dbus-1/system.d` directory). That incorporates downloading and building static libraries of Google Test. Default value: `OFF`. Use `-DBUILD_TESTS=ON` to enable building the tests. With this option turned on, you may also enable/disable the following options:
|
Build sdbus-c++ unit and integration tests, invokable by `cmake --build . --target test` (Note: before invoking `cmake --build . --target test`, make sure you copy `tests/integrationtests/files/org.sdbuscpp.integrationtests.conf` file to `/etc/dbus-1/system.d` directory). That incorporates downloading and building static libraries of Google Test. Default value: `OFF`. Use `-DBUILD_TESTS=ON` to enable building the tests. With this option turned on, you may also enable/disable the following options:
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_PERF_TESTS` [boolean]
|
* `SDBUSCPP_BUILD_PERF_TESTS` [boolean]
|
||||||
|
|
||||||
Option for building sdbus-c++ performance tests. Default value: `OFF`.
|
Build sdbus-c++ performance tests. Default value: `OFF`.
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_STRESS_TESTS` [boolean]
|
* `SDBUSCPP_BUILD_STRESS_TESTS` [boolean]
|
||||||
|
|
||||||
Option for building sdbus-c++ stress tests. Default value: `OFF`.
|
Build sdbus-c++ stress tests. Default value: `OFF`.
|
||||||
|
|
||||||
* `SDBUSCPP_TESTS_INSTALL_PATH` [string]
|
* `SDBUSCPP_TESTS_INSTALL_PATH` [string]
|
||||||
|
|
||||||
Path where the test binaries shall get installed. Default value: `${CMAKE_INSTALL_PREFIX}/tests/sdbus-c++` (previously: `/opt/test/bin`).
|
Path where the test binaries shall get installed. Default value: `${CMAKE_INSTALL_PREFIX}/tests/sdbus-c++` (previously: `/opt/test/bin`).
|
||||||
|
|
||||||
|
* `SDBUSCPP_BUILD_EXAMPLES` [boolean]
|
||||||
|
|
||||||
|
Build example programs which are located in the _example_ directory. Examples are not installed. Default value: `OFF`.
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_LIBSYSTEMD` [boolean]
|
* `SDBUSCPP_BUILD_LIBSYSTEMD` [boolean]
|
||||||
|
|
||||||
Option for building libsystemd as a sd-bus implementation when sdbus-c++ is built, and making libsystemd an integral part of sdbus-c++ library. Default value: `OFF`, which means that the sd-bus implementation library (`libsystemd`, `libelogind`, or `basu`) will be searched via `pkg-config` in the system.
|
Build sd-bus (libsystemd library) instead of searching for it in the system, and make it part of sdbus-c++ library. Default value: `OFF`, which means that the sd-bus implementation library (`libsystemd`, `libelogind`, or `basu`) will be searched via `pkg-config` in the system.
|
||||||
|
|
||||||
This option may be very helpful in environments where sd-bus implementation library is unavailable (see [Solving sd-bus dependency](docs/using-sdbus-c++.md#solving-sd-bus-dependency) for more information).
|
This option may be very helpful in environments where sd-bus implementation library is unavailable (see [Solving sd-bus dependency](docs/using-sdbus-c++.md#solving-sd-bus-dependency) for more information).
|
||||||
|
|
||||||
@ -70,29 +74,25 @@ $ sudo cmake --build . --target install
|
|||||||
|
|
||||||
* `SDBUSCPP_LIBSYSTEMD_VERSION` [string]
|
* `SDBUSCPP_LIBSYSTEMD_VERSION` [string]
|
||||||
|
|
||||||
Defines version of systemd to be downloaded, built and integrated into sdbus-c++. Default value: `242`.
|
Defines version of systemd to be downloaded, built and integrated into sdbus-c++. Default value: `252`, minimum value: `239`.
|
||||||
|
|
||||||
* `SDBUSCPP_LIBSYSTEMD_EXTRA_CONFIG_OPTS` [string]
|
* `SDBUSCPP_LIBSYSTEMD_EXTRA_CONFIG_OPTS` [string]
|
||||||
|
|
||||||
Additional options to be passed as-is to the libsystemd build system (meson for systemd v242) in its configure step. Can be used for passing e.g. toolchain file path in case of cross builds. Default value: empty.
|
Additional options to be passed as-is to the libsystemd build system in its configure step. Can be used for passing e.g. toolchain file path in case of cross builds. Default value: empty.
|
||||||
|
|
||||||
* `CMAKE_BUILD_TYPE` [string]
|
* `CMAKE_BUILD_TYPE` [string]
|
||||||
|
|
||||||
This is a CMake-builtin option. Set to `Release` to build sdbus-c++ for production use. Set to `Debug` if you want to help further develop (and debug) the library :)
|
CMake-builtin option. Set to `Release` to build sdbus-c++ for production use. Set to `Debug` if you want to help further develop (and debug) the library :)
|
||||||
|
|
||||||
* `BUILD_SHARED_LIBS` [boolean]
|
* `BUILD_SHARED_LIBS` [boolean]
|
||||||
|
|
||||||
This is a global CMake flag, promoted in sdbus-c++ project to a CMake option. Use this to control whether sdbus-c++ is built as either a shared or static library. Default value: `ON`.
|
Global CMake flag, promoted in sdbus-c++ project to a CMake option. Use this to control whether sdbus-c++ is built as either a shared or static library. Default value: `ON`.
|
||||||
|
|
||||||
* `SDBUSCPP_BUILD_EXAMPLES` [boolean]
|
|
||||||
|
|
||||||
Build example programs which are located in the _example_ directory. Examples are not installed. Default value: `OFF`
|
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* `C++17` - the library uses C++17 features.
|
* `C++20/C++17` - the library uses C++20 features, but its public API is backwards compatible with C++17 and provides optional extra features when C++20 features are available
|
||||||
* `libsystemd`/`libelogind`/`basu` - libraries containing sd-bus implementation that sdbus-c++ is written around. In case of `libsystemd` and `libelogind`, version >= 236 is needed. (In case you have you're missing any of those sd-bus implementations, don't worry, see [Solving sd-bus dependency](docs/using-sdbus-c++.md#solving-sd-bus-dependency) for more information.)
|
* `libsystemd`/`libelogind`/`basu` - libraries containing sd-bus implementation that sdbus-c++ is written around. In case of `libsystemd` and `libelogind`, version >= 238 is needed. (In case you have you're missing any of those sd-bus implementations, don't worry, see [Solving sd-bus dependency](docs/using-sdbus-c++.md#solving-sd-bus-dependency) for more information.)
|
||||||
* `googletest` - google unit testing framework, only necessary when building tests, will be downloaded and built automatically.
|
* `googletest` - google unit testing framework, only necessary when building tests, will be downloaded and built automatically.
|
||||||
* `pkgconfig` - required for sdbus-c++ to be able to find some dependency packages.
|
* `pkgconfig` - required for sdbus-c++ to be able to find some dependency packages.
|
||||||
* `expat` - necessary when building the xml2cpp binding code generator (`SDBUSCPP_BUILD_CODEGEN` option is `ON`).
|
* `expat` - necessary when building the xml2cpp binding code generator (`SDBUSCPP_BUILD_CODEGEN` option is `ON`).
|
||||||
|
@ -113,7 +113,7 @@ $ ninja libsystemd.so.0.26.0 # or another version number depending which system
|
|||||||
|
|
||||||
sdbus-c++ provides `SDBUSCPP_BUILD_LIBSYSTEMD` configuration option. When turned on, sdbus-c++ will automatically download and build libsystemd as a static library and make it an opaque part of sdbus-c++ shared library for you. This is the most convenient and effective approach to build, distribute and use sdbus-c++ as a self-contained, systemd-independent library in non-systemd environments. Just make sure your build machine has all dependencies needed by libsystemd build process. That includes, among others, `meson`, `ninja`, `git`, `gperf`, and -- primarily -- libraries and library headers for `libmount`, `libcap` and `librt` (part of glibc). Also, when distributing, make sure these dependency libraries are installed on the production machine.
|
sdbus-c++ provides `SDBUSCPP_BUILD_LIBSYSTEMD` configuration option. When turned on, sdbus-c++ will automatically download and build libsystemd as a static library and make it an opaque part of sdbus-c++ shared library for you. This is the most convenient and effective approach to build, distribute and use sdbus-c++ as a self-contained, systemd-independent library in non-systemd environments. Just make sure your build machine has all dependencies needed by libsystemd build process. That includes, among others, `meson`, `ninja`, `git`, `gperf`, and -- primarily -- libraries and library headers for `libmount`, `libcap` and `librt` (part of glibc). Also, when distributing, make sure these dependency libraries are installed on the production machine.
|
||||||
|
|
||||||
You may additionally set the `SDBUSCPP_LIBSYSTEMD_VERSION` configuration flag to fine-tune the version of systemd to be taken in. (The default value is 242).
|
You may additionally set the `SDBUSCPP_LIBSYSTEMD_VERSION` configuration flag to fine-tune the version of systemd to be taken in. (The default value is 242, the minimum value is 239).
|
||||||
|
|
||||||
Distributing sdbus-c++
|
Distributing sdbus-c++
|
||||||
----------------------
|
----------------------
|
||||||
@ -854,7 +854,7 @@ protected:
|
|||||||
{
|
{
|
||||||
// Return error if there are no numbers in the collection
|
// Return error if there are no numbers in the collection
|
||||||
if (numbers.empty())
|
if (numbers.empty())
|
||||||
throw sdbus::Error("org.sdbuscpp.Concatenator.Error", "No numbers provided");
|
throw sdbus::Error(sdbus::Error::Name{"org.sdbuscpp.Concatenator.Error"}, "No numbers provided");
|
||||||
|
|
||||||
// Concatenate the numbers
|
// Concatenate the numbers
|
||||||
std::string result;
|
std::string result;
|
||||||
|
@ -127,7 +127,7 @@ int SdBus::sd_bus_set_method_call_timeout(sd_bus *bus, uint64_t usec)
|
|||||||
#else
|
#else
|
||||||
(void)bus;
|
(void)bus;
|
||||||
(void)usec;
|
(void)usec;
|
||||||
throw sdbus::Error(SD_BUS_ERROR_NOT_SUPPORTED, "Setting general method call timeout not supported by underlying version of libsystemd");
|
throw Error(Error::Name{SD_BUS_ERROR_NOT_SUPPORTED}, "Setting general method call timeout not supported by underlying version of libsystemd");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ int SdBus::sd_bus_get_method_call_timeout(sd_bus *bus, uint64_t *ret)
|
|||||||
#else
|
#else
|
||||||
(void)bus;
|
(void)bus;
|
||||||
(void)ret;
|
(void)ret;
|
||||||
throw sdbus::Error(SD_BUS_ERROR_NOT_SUPPORTED, "Getting general method call timeout not supported by underlying version of libsystemd");
|
throw Error(Error::Name{SD_BUS_ERROR_NOT_SUPPORTED}, "Getting general method call timeout not supported by underlying version of libsystemd");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user