diff --git a/CMakeLists.txt b/CMakeLists.txt index d3b1068..8489527 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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_property(CACHE SDBUSCPP_SDBUS_LIB PROPERTY STRINGS default systemd elogind basu) 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") endif() 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 endif() + set(MINIMUM_SDBUS_VERSION 238) + find_package(PkgConfig REQUIRED) foreach(LIB ${SDBUS_LIBS}) 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) set(SDBUS_IMPL "systemd") set(SDBUS_LIB "libsystemd") break() endif() 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) set(SDBUS_IMPL "elogind") 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_SHLIBDEPS 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) diff --git a/README.md b/README.md index 96f3977..559c327 100644 --- a/README.md +++ b/README.md @@ -28,35 +28,39 @@ $ sudo cmake --build . --target install * `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] - 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] - 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] - 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] - Option for building sdbus-c++ performance tests. Default value: `OFF`. + Build sdbus-c++ performance tests. Default value: `OFF`. * `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] 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] - 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). @@ -70,29 +74,25 @@ $ sudo cmake --build . --target install * `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] - 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] - 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] - 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`. - -* `SDBUSCPP_BUILD_EXAMPLES` [boolean] - - Build example programs which are located in the _example_ directory. Examples are not installed. Default value: `OFF` + 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`. Dependencies ------------ -* `C++17` - the library uses C++17 features. -* `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.) +* `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 >= 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. * `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`). diff --git a/docs/using-sdbus-c++.md b/docs/using-sdbus-c++.md index b1d6489..071488c 100644 --- a/docs/using-sdbus-c++.md +++ b/docs/using-sdbus-c++.md @@ -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. -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++ ---------------------- @@ -854,7 +854,7 @@ protected: { // Return error if there are no numbers in the collection 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 std::string result; diff --git a/src/SdBus.cpp b/src/SdBus.cpp index 4d6228c..7828400 100644 --- a/src/SdBus.cpp +++ b/src/SdBus.cpp @@ -127,7 +127,7 @@ int SdBus::sd_bus_set_method_call_timeout(sd_bus *bus, uint64_t usec) #else (void)bus; (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 } @@ -140,7 +140,7 @@ int SdBus::sd_bus_get_method_call_timeout(sd_bus *bus, uint64_t *ret) #else (void)bus; (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 }