Compare commits

...
6 Commits
Author SHA1 Message Date
Stanislav Angelovič 28b78822cf chore: release version v2.2.1 2025-11-21 18:14:15 +01:00
AlexeyandStanislav Angelovič 70750e4557 fix: invalid cpack configuration inside CMakeLists.txt (#521)
* Change CPACK_COMPONENTS_ALL variable in CMakeLists.txt according to components names referenced in install function call
* Remove redundant sdbus-c++ from Debian packages

---------

Co-authored-by: Stanislav Angelovič <stanislav.angelovic@protonmail.com>
2025-11-21 18:08:32 +01:00
Stanislav Angelovič 2f3a10a73c chore: release version v2.2.0 2025-11-19 22:00:11 +01:00
Stanislav Angelovič 071c595717 fix: disable invalid errno test for basu backend (#519) 2025-11-19 21:47:48 +01:00
Stanislav Angelovič 91f0d3fca7 fix: create sdbus::Error correctly when errno is 0 (#517) 2025-11-12 22:43:44 +01:00
SimonBraunschmidtIBAandStanislav Angelovic 126ac9ffbe fix: add signature_of specialization for r-value references (#515)
* test: add Variant move test

* fix: provide signature_of<_T&&>

Provide signature_of specialization for rvalue references resp.
allow when forwarding references resolve to rvalue references

signature_of<_T&&> is needed e.g. for std::map::try_emplace() when the
emplaced sdbus:: type is passed as rvalue reference, otherwise the
static_assert "Unsupported D-Bus type ..." would trigger

See https://github.com/Kistler-Group/sdbus-cpp/issues/513#issuecomment-3429733769
for an elaborate explanation

Signed-off-by: Simon Braunschmidt <simon.braunschmidt@iba-group.com>

---------

Signed-off-by: Simon Braunschmidt <simon.braunschmidt@iba-group.com>
Co-authored-by: Stanislav Angelovic <stanislav.angelovic.ext@siemens.com>
2025-10-23 21:08:25 +02:00
7 changed files with 106 additions and 14 deletions
+6 -4
View File
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.14)
project(sdbus-c++ VERSION 2.1.0 LANGUAGES CXX C)
project(sdbus-c++ VERSION 2.2.1 LANGUAGES CXX C)
include(GNUInstallDirs) # Installation directories for `install` command and pkgconfig file
@@ -318,12 +318,14 @@ set(CPACK_PACKAGE_VENDOR "Kistler")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "High-level C++ D-Bus library")
set(CPACK_PACKAGE_CONTACT "info@kistler.com")
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_COMPONENTS_ALL runtime dev doc)
set(CPACK_COMPONENT_DEV_DEPENDS "runtime")
set(CPACK_COMPONENTS_ALL sdbus-c++-runtime sdbus-c++-dev sdbus-c++-doc)
set(CPACK_COMPONENT_DEV_DEPENDS "sdbus-c++-runtime")
# specific for DEB generator
set(CPACK_DEB_COMPONENT_INSTALL ON)
set(CPACK_DEBIAN_RUNTIME_DEBUGINFO_PACKAGE ON)
set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_DEBIAN_SDBUS-C++-RUNTIME_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_DEBIAN_SDBUS-C++-DEV_PACKAGE_NAME "sdbus-c++-dev")
set(CPACK_DEBIAN_SDBUS-C++-DOC_PACKAGE_NAME "sdbus-c++-doc")
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
+14
View File
@@ -301,3 +301,17 @@ v2.1.0
- Change googletest to default version 1.14.0
- Add version parameter to the xml2cpp codegen tool
- A few other internal refactorings and improvements
v2.2.0
- Add createLightWeightProxy() overload for convenience
- Add cookie-related API to Message class
- Add async overloads of GetManagedObjects() function
- Add signature_of specialization for r-value references
- Create a valid sdbus::Error even when errno is invalid or zero
- Fix the return type of some slot-returning functions
- Fix annotation generation in xml2cpp tool
- A few other, mainly CI related updates
v2.2.1
- Fix component names in CPack configuration
- Generate correct, expected DEB package names
+2 -2
View File
@@ -64,7 +64,7 @@ namespace sdbus {
}
Error(Name name, std::string message)
: std::runtime_error("[" + name + "] " + message)
: std::runtime_error(!message.empty() ? "[" + name + "] " + message : "[" + name + "]")
, name_(std::move(name))
, message_(std::move(message))
{
@@ -90,7 +90,7 @@ namespace sdbus {
std::string message_;
};
Error createError(int errNo, std::string customMsg);
Error createError(int errNo, std::string customMsg = {});
inline const Error::Name SDBUSCPP_ERROR_NAME{"org.sdbuscpp.Error"};
}
+4
View File
@@ -151,6 +151,10 @@ namespace sdbus {
struct signature_of<_T&> : signature_of<_T>
{};
template <typename _T>
struct signature_of<_T&&> : signature_of<_T>
{};
template <>
struct signature_of<void>
{
+12 -5
View File
@@ -32,17 +32,24 @@
namespace sdbus
{
sdbus::Error createError(int errNo, std::string customMsg)
Error createError(int errNo, std::string customMsg)
{
sd_bus_error sdbusError = SD_BUS_ERROR_NULL;
sd_bus_error_set_errno(&sdbusError, errNo);
SCOPE_EXIT{ sd_bus_error_free(&sdbusError); };
Error::Name name(sdbusError.name);
Error::Name name(sd_bus_error_is_set(&sdbusError) ? sdbusError.name : "");
std::string message(std::move(customMsg));
message.append(" (");
message.append(sdbusError.message);
message.append(")");
if (!message.empty() && sdbusError.message != nullptr)
{
message.append(" (");
message.append(sdbusError.message);
message.append(")");
}
else if (sdbusError.message != nullptr)
{
message = sdbusError.message;
}
return Error(std::move(name), std::move(message));
}
+67 -2
View File
@@ -97,6 +97,29 @@ TEST(AVariant, CanBeCopied)
ASSERT_THAT(variantCopy2.get<std::string>(), Eq(value));
}
TEST(AVariant, CanBeMoved)
{
auto value = "hello"s;
sdbus::Variant variant(value);
auto movedVariant{std::move(variant)};
ASSERT_THAT(movedVariant.get<std::string>(), Eq(value));
ASSERT_TRUE(variant.isEmpty());
}
TEST(AVariant, CanBeMovedIntoAMap)
{
auto value = "hello"s;
sdbus::Variant variant(value);
std::map<std::string, sdbus::Variant> mymap;
mymap.try_emplace("payload", std::move(variant));
ASSERT_THAT(mymap["payload"].get<std::string>(), Eq(value));
ASSERT_TRUE(variant.isEmpty());
}
TEST(AVariant, IsNotEmptyWhenContainsAValue)
{
sdbus::Variant v("hello");
@@ -430,6 +453,7 @@ TEST(AnError, CanBeConstructedFromANameAndAMessage)
auto error = sdbus::Error(sdbus::Error::Name{"org.sdbuscpp.error"}, "message");
EXPECT_THAT(error.getName(), Eq<std::string>("org.sdbuscpp.error"));
EXPECT_THAT(error.getMessage(), Eq<std::string>("message"));
EXPECT_TRUE(error.isValid());
}
TEST(AnError, CanBeConstructedFromANameOnly)
@@ -439,6 +463,47 @@ TEST(AnError, CanBeConstructedFromANameOnly)
EXPECT_THAT(error1.getName(), Eq<std::string>("org.sdbuscpp.error"));
EXPECT_THAT(error2.getName(), Eq<std::string>("org.sdbuscpp.error"));
EXPECT_THAT(error1.getMessage(), Eq<std::string>(""));
EXPECT_THAT(error2.getMessage(), Eq<std::string>(""));
EXPECT_TRUE(error1.getMessage().empty());
EXPECT_TRUE(error2.getMessage().empty());
EXPECT_TRUE(error1.isValid());
EXPECT_TRUE(error2.isValid());
}
TEST(AnError, IsInvalidWhenConstructedWithAnEmptyName)
{
auto error = sdbus::Error({});
EXPECT_TRUE(error.getName().empty());
EXPECT_TRUE(error.getMessage().empty());
EXPECT_FALSE(error.isValid());
}
TEST(AnErrorFactory, CanCreateAnErrorFromErrno)
{
auto error = sdbus::createError(ENOENT, "custom message");
EXPECT_THAT(error.getName(), Eq<std::string>("org.freedesktop.DBus.Error.FileNotFound"));
EXPECT_THAT(error.getMessage(), Eq<std::string>("custom message (No such file or directory)"));
EXPECT_TRUE(error.isValid());
}
#ifndef SDBUS_basu // Creating error from invalid errno is not supported on basu backend
TEST(AnErrorFactory, CreatesGenericErrorWhenErrnoIsUnknown)
{
auto error = sdbus::createError(123456, "custom message");
EXPECT_THAT(error.getName(), Eq<std::string>("org.freedesktop.DBus.Error.Failed"));
EXPECT_THAT(error.getMessage(), Eq<std::string>("custom message (Unknown error 123456)"));
EXPECT_TRUE(error.isValid());
}
#endif // SDBUS_basu
TEST(AnErrorFactory, CreatesEmptyInvalidErrorWhenErrnoIsZero)
{
auto error = sdbus::createError(0, "custom message");
EXPECT_TRUE(error.getName().empty());
EXPECT_THAT(error.getMessage(), Eq<std::string>("custom message"));
EXPECT_FALSE(error.isValid());
}
+1 -1
View File
@@ -4,7 +4,7 @@
cmake_minimum_required(VERSION 3.5)
project(sdbus-c++-tools VERSION 2.1.0)
project(sdbus-c++-tools VERSION 2.2.1)
include(GNUInstallDirs)