This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/cxx in repository https://gitbox.apache.org/repos/asf/celix.git
commit 9e854fdaf08a04f51d42a34d37e7964c056703a8 Author: Pepijn Noltes <pepijnnol...@gmail.com> AuthorDate: Thu Jan 3 11:40:54 2019 +0100 CELIX-438: Updates to compile on gcc, adds glog as external project and fixes code coverage setup --- CMakeLists.txt | 8 ++++---- bundles/shell/cxx_shell/CMakeLists.txt | 4 ++-- bundles/shell/cxx_shell/src/ShellActivator.cc | 1 + bundles/shell/cxx_shell_tui/CMakeLists.txt | 4 ++-- .../shell/cxx_shell_tui/src/ShellTuiActivator.cc | 9 +++++---- .../celix_project/AddGLog.cmake | 19 ++++++++---------- cmake/celix_project/CodeCoverage.cmake | 11 +++++++++-- libs/framework/tst/CMakeLists.txt | 3 ++- libs/framework_cxx/CMakeLists.txt | 3 ++- libs/framework_cxx/gtest/CMakeLists.txt | 3 ++- libs/framework_cxx/gtest/src/Framework_tests.cc | 8 +++++--- libs/framework_cxx/src/Bundle.h | 10 +++++++--- libs/framework_cxx/src/BundleContext.cc | 8 +++++--- libs/framework_cxx/src/Framework.cc | 23 ++++++++++++++-------- libs/registry/CMakeLists.txt | 3 ++- libs/registry/gtest/CMakeLists.txt | 3 ++- .../gtest/src/RegistryConcurrency_tests.cc | 2 ++ libs/registry/gtest/src/Registry_tests.cc | 5 ++++- libs/registry/include/celix/Filter.h | 1 + libs/registry/include/celix/IResourceBundle.h | 1 + libs/registry/include/celix/ServiceRegistry.h | 2 ++ libs/registry/include/celix/Utils.h | 2 +- libs/registry/src/ServiceRegistry.cc | 11 ++++++----- 23 files changed, 90 insertions(+), 54 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ba636e..c1c4a43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,17 +47,17 @@ ELSE () ENDIF() # Set version for the framework package/release -set(CELIX_MAJOR "2") -set(CELIX_MINOR "2") +set(CELIX_MAJOR "3") +set(CELIX_MINOR "0") set(CELIX_MICRO "0") -option(ENABLE_TESTING "Enables unit testing using CPPUTEST" OFF) -option(ENABLE_GTESTING "Enables unit testing using GTest" ON) +option(ENABLE_TESTING "Enables unit testing" OFF) if (ENABLE_TESTING) enable_testing() include(cmake/celix_project/AddGTest.cmake) endif () +include(cmake/celix_project/AddGLog.cmake) # Default bundle version set(DEFAULT_VERSION 1.0.0) diff --git a/bundles/shell/cxx_shell/CMakeLists.txt b/bundles/shell/cxx_shell/CMakeLists.txt index ccdf03b..a4ad2df 100644 --- a/bundles/shell/cxx_shell/CMakeLists.txt +++ b/bundles/shell/cxx_shell/CMakeLists.txt @@ -34,8 +34,8 @@ add_library(celix_cxx_shell SHARED src/QueryCommand.cc ) target_include_directories(celix_cxx_shell PRIVATE src) -target_link_libraries(celix_cxx_shell PRIVATE celix_cxx_shell_api) -target_link_libraries(celix_cxx_shell PUBLIC glog::glog celix_framework_cxx) +target_link_libraries(celix_cxx_shell PRIVATE celix_cxx_shell_api glog::glog) +target_link_libraries(celix_cxx_shell PUBLIC celix_framework_cxx) #if (ENABLE_TESTING) # add_subdirectory(gtest) diff --git a/bundles/shell/cxx_shell/src/ShellActivator.cc b/bundles/shell/cxx_shell/src/ShellActivator.cc index 58c8f2f..bfbbb8f 100644 --- a/bundles/shell/cxx_shell/src/ShellActivator.cc +++ b/bundles/shell/cxx_shell/src/ShellActivator.cc @@ -44,6 +44,7 @@ namespace { } token = strtok_r(nullptr, " ", &savePtr); } + free(cl); bool commandCalled = false; diff --git a/bundles/shell/cxx_shell_tui/CMakeLists.txt b/bundles/shell/cxx_shell_tui/CMakeLists.txt index df20046..cfbf6cf 100644 --- a/bundles/shell/cxx_shell_tui/CMakeLists.txt +++ b/bundles/shell/cxx_shell_tui/CMakeLists.txt @@ -24,8 +24,8 @@ add_library(celix_cxx_shell_tui SHARED src/ShellTuiActivator.cc src/shell_test.cc) target_include_directories(celix_cxx_shell_tui PRIVATE src) -target_link_libraries(celix_cxx_shell_tui PRIVATE celix_cxx_shell_api) -target_link_libraries(celix_cxx_shell_tui PUBLIC glog::glog celix_framework_cxx) +target_link_libraries(celix_cxx_shell_tui PRIVATE celix_cxx_shell_api glog::glog) +target_link_libraries(celix_cxx_shell_tui PUBLIC celix_framework_cxx) #if (ENABLE_TESTING) # add_subdirectory(gtest) diff --git a/bundles/shell/cxx_shell_tui/src/ShellTuiActivator.cc b/bundles/shell/cxx_shell_tui/src/ShellTuiActivator.cc index a1ddf5a..a66bea5 100644 --- a/bundles/shell/cxx_shell_tui/src/ShellTuiActivator.cc +++ b/bundles/shell/cxx_shell_tui/src/ShellTuiActivator.cc @@ -21,6 +21,7 @@ #include <cstdio> #include <unistd.h> #include <fcntl.h> +#include <mutex> #include <glog/logging.h> @@ -115,10 +116,10 @@ namespace { std::mutex mutex{}; std::shared_ptr<celix::IShell> shell{}; - std::thread readThread; + std::thread readThread{}; - int readPipeFd; - int writePipeFd; + int readPipeFd{}; + int writePipeFd{}; char in[LINE_SIZE+1]{}; @@ -136,7 +137,7 @@ namespace { } private: ShellTui tui{}; - celix::ServiceTracker trk; + celix::ServiceTracker trk{}; }; __attribute__((constructor)) diff --git a/libs/registry/CMakeLists.txt b/cmake/celix_project/AddGLog.cmake similarity index 64% copy from libs/registry/CMakeLists.txt copy to cmake/celix_project/AddGLog.cmake index ee537cc..8cc3414 100644 --- a/libs/registry/CMakeLists.txt +++ b/cmake/celix_project/AddGLog.cmake @@ -15,18 +15,15 @@ # specific language governing permissions and limitations # under the License. -find_package(glog REQUIRED) -add_library(celix_registry STATIC - src/ServiceRegistry.cc - src/Filter.cc +include(ExternalProject) +ExternalProject_Add( + googlelog_project + GIT_REPOSITORY https://github.com/google/glog.git + GIT_TAG v0.3.5 + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glog + CMAKE_ARGS -DWITH_GFLAGS=OFF -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/glog -DCMAKE_CXX_FLAGS=-w ) -target_include_directories(celix_registry PRIVATE src) -target_include_directories(celix_registry PUBLIC include) -target_link_libraries(celix_registry PRIVATE glog::glog) #TODO make glog static and private -add_library(celix::registry ALIAS celix_registry) +set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/glog ${CMAKE_PREFIX_PATH}") -if (ENABLE_TESTING) - add_subdirectory(gtest) -endif () \ No newline at end of file diff --git a/cmake/celix_project/CodeCoverage.cmake b/cmake/celix_project/CodeCoverage.cmake index 51b5001..d9e5002 100644 --- a/cmake/celix_project/CodeCoverage.cmake +++ b/cmake/celix_project/CodeCoverage.cmake @@ -103,6 +103,13 @@ FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") ENDIF() # NOT GENHTML_PATH + set(SCAN_DIR ".") + if (NOT ARGV3) + set(SCAN_DIR ".") + else() + set(SCAN_DIR "${ARGV3}") + endif () + # Setup target ADD_CUSTOM_TARGET(${_targetname}_coverage @@ -115,8 +122,8 @@ FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) # Capturing lcov counters and generating report COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/coverage COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/coverage/${_testrunner} - COMMAND ${LCOV_PATH} --directory . --capture --output-file ${_outputname}.info - COMMAND ${LCOV_PATH} --remove ${_outputname}.info 'mock/*' 'test/*' '/usr/*' --output-file ${_outputname}.info.cleaned + COMMAND ${LCOV_PATH} --directory ${SCAN_DIR} --capture --output-file ${_outputname}.info + COMMAND ${LCOV_PATH} --remove ${_outputname}.info 'mock/*' '**/test/*' '**/gtest/*' '**/tst/*' '**/googletest_project/*' '**/glog/*' '/usr/*' --output-file ${_outputname}.info.cleaned WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." diff --git a/libs/framework/tst/CMakeLists.txt b/libs/framework/tst/CMakeLists.txt index 48f0d05..9837bdc 100644 --- a/libs/framework/tst/CMakeLists.txt +++ b/libs/framework/tst/CMakeLists.txt @@ -36,6 +36,7 @@ configure_file(config.properties.in config.properties @ONLY) configure_file(framework1.properties.in framework1.properties @ONLY) configure_file(framework2.properties.in framework2.properties @ONLY) + add_test(NAME run_test_framework COMMAND test_framework) -SETUP_TARGET_FOR_COVERAGE(test_framework_cov test_framework ${CMAKE_BINARY_DIR}/coverage/test_framework/test_framework) +SETUP_TARGET_FOR_COVERAGE(test_framework_cov test_framework ${CMAKE_BINARY_DIR}/coverage/test_framework/test_framework ..) diff --git a/libs/framework_cxx/CMakeLists.txt b/libs/framework_cxx/CMakeLists.txt index 472bd60..c47ae80 100644 --- a/libs/framework_cxx/CMakeLists.txt +++ b/libs/framework_cxx/CMakeLists.txt @@ -24,7 +24,8 @@ add_library(celix_framework_cxx SHARED src/Bundle.cc) target_include_directories(celix_framework_cxx PRIVATE src) target_include_directories(celix_framework_cxx PUBLIC include) -target_link_libraries(celix_framework_cxx PUBLIC celix::registry glog::glog) #TODO glog private and static lib +target_link_libraries(celix_framework_cxx PRIVATE glog::glog) +target_link_libraries(celix_framework_cxx PUBLIC celix::registry) if (ENABLE_TESTING) add_subdirectory(gtest) diff --git a/libs/framework_cxx/gtest/CMakeLists.txt b/libs/framework_cxx/gtest/CMakeLists.txt index 0f407cc..23fdfb7 100644 --- a/libs/framework_cxx/gtest/CMakeLists.txt +++ b/libs/framework_cxx/gtest/CMakeLists.txt @@ -22,5 +22,6 @@ set(SOURCES add_executable(celix_framework_cxx_tests ${SOURCES}) target_link_libraries(celix_framework_cxx_tests PRIVATE gtest celix_framework_cxx) +#NOTE last .. argument for the setup coverage is the scan dir (i.e. not gtest dir, but a dir higher) add_test(NAME celix_framework_cxx_tests COMMAND celix_framework_cxx_tests) -SETUP_TARGET_FOR_COVERAGE(celix_framework_cxx_tests_cov celix_framework_cxx_tests ${CMAKE_BINARY_DIR}/coverage/framework/celix_framework_cxx_tests) \ No newline at end of file +SETUP_TARGET_FOR_COVERAGE(celix_framework_cxx_tests_cov celix_framework_cxx_tests ${CMAKE_BINARY_DIR}/coverage/celix_framework_cxx_tests/celix_framework_cxx_tests ..) \ No newline at end of file diff --git a/libs/framework_cxx/gtest/src/Framework_tests.cc b/libs/framework_cxx/gtest/src/Framework_tests.cc index 5bf8cdb..88580f3 100644 --- a/libs/framework_cxx/gtest/src/Framework_tests.cc +++ b/libs/framework_cxx/gtest/src/Framework_tests.cc @@ -17,6 +17,8 @@ *under the License. */ +#include <atomic> + #include "gtest/gtest.h" #include "celix/Framework.h" @@ -46,12 +48,12 @@ TEST_F(FrameworkTest, CreateDestroy) { class EmbeddedActivator : public celix::IBundleActivator { public: - EmbeddedActivator(std::shared_ptr<celix::BundleContext>) { - startCount++; + explicit EmbeddedActivator(std::shared_ptr<celix::BundleContext>) { + startCount.fetch_add(1); } virtual ~EmbeddedActivator() { - stopCount++; + stopCount.fetch_add(1); } static std::atomic<int> startCount; diff --git a/libs/framework_cxx/src/Bundle.h b/libs/framework_cxx/src/Bundle.h index 2ee1af6..5541013 100644 --- a/libs/framework_cxx/src/Bundle.h +++ b/libs/framework_cxx/src/Bundle.h @@ -20,6 +20,8 @@ #ifndef CXX_CELIX_BUNDLE_H #define CXX_CELIX_BUNDLE_H +#include <atomic> + #include "celix/Constants.h" #include "celix/IBundle.h" #include "celix/BundleContext.h" @@ -28,10 +30,13 @@ namespace celix { class Bundle : public celix::IBundle { public: Bundle(long _bndId, celix::Framework *_fw, celix::Properties _manifest) : - bndId{_bndId}, fw{_fw}, bndManifest{std::move(_manifest)} { + bndId{_bndId}, fw{_fw}, bndManifest{std::move(_manifest)}, bndState{BundleState::INSTALLED} { bndState.store(BundleState::INSTALLED, std::memory_order_release); } + Bundle(const Bundle&) = delete; + Bundle& operator=(const Bundle&) = delete; + //resource part bool has(const std::string &) const noexcept override; bool isDir(const std::string &) const noexcept override; @@ -76,9 +81,8 @@ namespace celix { const long bndId; celix::Framework *const fw; const celix::Properties bndManifest; - std::weak_ptr <celix::BundleContext> context; - std::atomic <BundleState> bndState; + std::atomic<BundleState> bndState; }; } diff --git a/libs/framework_cxx/src/BundleContext.cc b/libs/framework_cxx/src/BundleContext.cc index 1d5a0a7..5b9b192 100644 --- a/libs/framework_cxx/src/BundleContext.cc +++ b/libs/framework_cxx/src/BundleContext.cc @@ -29,6 +29,9 @@ namespace celix { reg{&bnd->framework().registry(celix::CXX_LANG)}, cReg(&bnd->framework().registry(celix::C_LANG)){} + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + const std::shared_ptr<celix::IBundle> bnd; celix::ServiceRegistry * const reg; //TODO make weak_ptr celix::ServiceRegistry * const cReg; //TODO make weak_ptr @@ -36,9 +39,8 @@ namespace celix { }; } -celix::BundleContext::BundleContext(std::shared_ptr<celix::IBundle> bnd) { - pimpl = std::unique_ptr<celix::BundleContext::Impl>{new celix::BundleContext::Impl{std::move(bnd)}}; -} +celix::BundleContext::BundleContext(std::shared_ptr<celix::IBundle> bnd) : + pimpl{std::unique_ptr<celix::BundleContext::Impl>{new celix::BundleContext::Impl{std::move(bnd)}}} {} celix::BundleContext::~BundleContext() = default; diff --git a/libs/framework_cxx/src/Framework.cc b/libs/framework_cxx/src/Framework.cc index 64fa7d5..a96ce86 100644 --- a/libs/framework_cxx/src/Framework.cc +++ b/libs/framework_cxx/src/Framework.cc @@ -27,6 +27,9 @@ #include <set> #include <vector> #include <future> +#include <algorithm> + +#include <linux/limits.h> #include <glog/logging.h> @@ -54,6 +57,9 @@ class celix::Framework::Impl : public IBundle { public: Impl(celix::Framework *_fw, celix::Properties _config) : fw{_fw}, config{std::move(_config)}, bndManifest{createManifest()}, cwd{createCwd()} {} + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + ~Impl() { stopFramework(); waitForShutdown(); @@ -237,10 +243,10 @@ public: //resource bundle part long id() const noexcept override { return 1L /*note registry empty bundle is id 0, framework is id 1*/; } - bool has(const std::string&) const override { return false; } - bool isDir(const std::string&) const override { return false; } - bool isFile(const std::string&) const override { return false; } - std::vector<std::string> readDir(const std::string&) const override { return std::vector<std::string>{};} + bool has(const std::string&) const noexcept override { return false; } + bool isDir(const std::string&) const noexcept override { return false; } + bool isFile(const std::string&) const noexcept override { return false; } + std::vector<std::string> readDir(const std::string&) const noexcept override { return std::vector<std::string>{};} const std::string& root() const noexcept override { //TODO return cwd; } @@ -326,21 +332,22 @@ private: struct { mutable std::mutex mutex{}; - std::unordered_map<std::string, celix::ServiceRegistry> entries; - } registries; + std::unordered_map<std::string, celix::ServiceRegistry> entries{}; + } registries{}; }; /*********************************************************************************************************************** * Framework **********************************************************************************************************************/ -celix::Framework::Framework(celix::Properties config) { - pimpl = std::unique_ptr<Impl>{new Impl{this, std::move(config)}}; +celix::Framework::Framework(celix::Properties config) : pimpl{std::unique_ptr<Impl>{new Impl{this, std::move(config)}}} { registerFramework(this); } + celix::Framework::~Framework() { unregisterFramework(this); } + celix::Framework::Framework(Framework &&rhs) = default; celix::Framework& celix::Framework::operator=(Framework&& rhs) = default; diff --git a/libs/registry/CMakeLists.txt b/libs/registry/CMakeLists.txt index ee537cc..2a279de 100644 --- a/libs/registry/CMakeLists.txt +++ b/libs/registry/CMakeLists.txt @@ -23,7 +23,8 @@ add_library(celix_registry STATIC ) target_include_directories(celix_registry PRIVATE src) target_include_directories(celix_registry PUBLIC include) -target_link_libraries(celix_registry PRIVATE glog::glog) #TODO make glog static and private +target_link_libraries(celix_registry PRIVATE glog::glog) +target_compile_options(celix_registry PRIVATE -fPIC) add_library(celix::registry ALIAS celix_registry) diff --git a/libs/registry/gtest/CMakeLists.txt b/libs/registry/gtest/CMakeLists.txt index 4f3076e..cdf666b 100644 --- a/libs/registry/gtest/CMakeLists.txt +++ b/libs/registry/gtest/CMakeLists.txt @@ -27,5 +27,6 @@ set(SOURCES add_executable(celix_registry_tests ${SOURCES}) target_link_libraries(celix_registry_tests PRIVATE gtest glog::glog celix::registry) +#NOTE last .. argument for the setup coverage is the scan dir (i.e. not gtest dir, but a dir higher) add_test(NAME celix_registry_tests COMMAND celix_registry_tests) -SETUP_TARGET_FOR_COVERAGE(celix_registry_tests_cov celix_registry_tests ${CMAKE_BINARY_DIR}/coverage/registry) \ No newline at end of file +SETUP_TARGET_FOR_COVERAGE(celix_registry_tests_cov celix_registry_tests ${CMAKE_BINARY_DIR}/coverage/celix_registry_tests/celix_registry_tests ..) \ No newline at end of file diff --git a/libs/registry/gtest/src/RegistryConcurrency_tests.cc b/libs/registry/gtest/src/RegistryConcurrency_tests.cc index b460bf3..d2626ec 100644 --- a/libs/registry/gtest/src/RegistryConcurrency_tests.cc +++ b/libs/registry/gtest/src/RegistryConcurrency_tests.cc @@ -19,6 +19,8 @@ #include <thread> +#include <mutex> +#include <condition_variable> #include "gtest/gtest.h" diff --git a/libs/registry/gtest/src/Registry_tests.cc b/libs/registry/gtest/src/Registry_tests.cc index 9bbb899..d8fad0e 100644 --- a/libs/registry/gtest/src/Registry_tests.cc +++ b/libs/registry/gtest/src/Registry_tests.cc @@ -17,8 +17,11 @@ *under the License. */ -#include "gtest/gtest.h" + +#include <memory> + +#include <gtest/gtest.h> #include <glog/logging.h> #include "celix/ServiceRegistry.h" diff --git a/libs/registry/include/celix/Filter.h b/libs/registry/include/celix/Filter.h index db851ba..8d8fab0 100644 --- a/libs/registry/include/celix/Filter.h +++ b/libs/registry/include/celix/Filter.h @@ -20,6 +20,7 @@ #ifndef CXX_CELIX_FILTER_H #define CXX_CELIX_FILTER_H +#include <memory> #include <string> #include <vector> diff --git a/libs/registry/include/celix/IResourceBundle.h b/libs/registry/include/celix/IResourceBundle.h index 97c64de..38b76b3 100644 --- a/libs/registry/include/celix/IResourceBundle.h +++ b/libs/registry/include/celix/IResourceBundle.h @@ -21,6 +21,7 @@ #define CXX_CELIX_IRESOURCEBUNDLE_H #include <string> +#include <vector> namespace celix { diff --git a/libs/registry/include/celix/ServiceRegistry.h b/libs/registry/include/celix/ServiceRegistry.h index ae7aeb2..76b277d 100644 --- a/libs/registry/include/celix/ServiceRegistry.h +++ b/libs/registry/include/celix/ServiceRegistry.h @@ -22,6 +22,8 @@ #include <utility> #include <vector> +#include <functional> +#include <memory> #include "celix/Constants.h" #include "celix/Properties.h" diff --git a/libs/registry/include/celix/Utils.h b/libs/registry/include/celix/Utils.h index ae61cd7..5640636 100644 --- a/libs/registry/include/celix/Utils.h +++ b/libs/registry/include/celix/Utils.h @@ -20,7 +20,7 @@ #ifndef CXX_CELIX_UTILS_H #define CXX_CELIX_UTILS_H - +#include <cstring> #include <string> #include <iostream> diff --git a/libs/registry/src/ServiceRegistry.cc b/libs/registry/src/ServiceRegistry.cc index ac9a9dd..a7465e2 100644 --- a/libs/registry/src/ServiceRegistry.cc +++ b/libs/registry/src/ServiceRegistry.cc @@ -26,6 +26,7 @@ #include <future> #include <glog/logging.h> +#include <assert.h> #include "celix/Constants.h" #include "celix/ServiceRegistry.h" @@ -306,7 +307,7 @@ namespace { } private: struct { - mutable std::mutex mutex; //protects matchedEntries & highestRanking + mutable std::mutex mutex{}; //protects matchedEntries & highestRanking std::map<std::shared_ptr<const SvcEntry>, std::shared_ptr<void>, SvcEntryLess> entries{}; std::shared_ptr<void> highest{}; } tracked{}; @@ -338,8 +339,10 @@ public: class celix::ServiceRegistry::Impl { public: + Impl(std::string _regName) : regName{_regName} {} + const std::shared_ptr<const celix::IResourceBundle> emptyBundle = std::shared_ptr<const celix::IResourceBundle>{new EmptyBundle{}}; - std::string regName; + const std::string regName; struct { mutable std::mutex mutex{}; @@ -511,9 +514,7 @@ public: **********************************************************************************************************************/ -celix::ServiceRegistry::ServiceRegistry(std::string name) : pimpl{new ServiceRegistry::Impl{}} { - pimpl->regName = std::move(name); -} +celix::ServiceRegistry::ServiceRegistry(std::string name) : pimpl{new ServiceRegistry::Impl{std::move(name)}} {} celix::ServiceRegistry::ServiceRegistry(celix::ServiceRegistry &&rhs) = default; celix::ServiceRegistry& celix::ServiceRegistry::operator=(celix::ServiceRegistry &&rhs) = default; celix::ServiceRegistry::~ServiceRegistry() {