I've started preliminary work on dbus-cxx version 2.0, and I would like to solicit some feedback from anybody who is using the library as to what new feature(s) people may be looking for. This would not be a complete re-write of the code, however it would still be a significant undertaking, as well as (most likely) making the library both ABI and API incompatible, although I expect that most software would be able to use the new version with only a recompilation.
To that end, I've come up with the following list of things to do, in no particular order:
- Convert the build system to CMake instead of autotools(mostly because I don't like autotools, and the current system does have some limitations/errors)
- Update the dependency on libsigc++ to 2.99.10(new API on libsigc++ that uses variadic templates instead of m4). Note that 2.99.10 is in preparation for a 3.0 libsigc++. This would also force a minimum version of C++14.
- The changes to libsigc++ would also make the definitions of methods simpler, as dbus-cxx would also use variadic templates at that point and not be limited to only 7 parameters.
- Update defines for DBusCxxPointer, I think these can actually be templated. Or alternatively remove this macro, as the point of this macro is to switch between smart pointer implementations, which is irrelevant with C++11 and above.
- Better integration with main loop libraries/frameworks, e.g. glib and Qt. I'm not familiar with glib but I do know enough about Qt to integrate with it. Is this something that people would like?
- Update xml2cpp tool to output better code and work better. Some updates to the code generation will have to be done, and the tool needs to have a big refresh.
- Hopefully make it less sensitive to the ordering of the #includes for custom types. This still needs more investigation.
- Use std::variant for DBus variants(note: this would force C++17)
- Use std::tuple for DBus structs
- Change the exceptions to not throw as shared_ptr - this change was made before 0.7.0 I think. I can't find it right now, but there was a message at one point about doing this to make it more consistent with the rest of the library. While that's not entirely false, it's a very strange way to pass errors back to the user.
- Remove all pthread references - this can now be accomplished with standard library classes.
- General code cleanup by removing inline(it's ignored by the compiler anyway) and adding const/constexpr functions. Also possibly making the DBus enums into 'enum class' for better typesafety.
Is there anything else that people would like / feel needs to be updated?
Timeline for this update would be at the earliest this summer, but realistically probably by the end of the year.
-Robert Middleton