This is an automated email from the ASF dual-hosted git repository. pengzheng pushed a commit to branch feature/579-automatic-dependency-deduction in repository https://gitbox.apache.org/repos/asf/celix.git
commit 554311977b2441833ee2b3548379ca46279890a0 Merge: 276afafe 456de193 Author: PengZheng <[email protected]> AuthorDate: Wed Jul 12 19:55:19 2023 +0800 Merge branch 'master' into feature/579-automatic-dependency-deduction # Conflicts: # libs/framework/CMakeLists.txt # libs/utils/CMakeLists.txt .clang-format | 2 +- .../log_admin/gtest/src/LogAdminTestSuite.cc | 20 +- .../src/pubsub_topology_manager.c | 1 - .../topology_manager/tms_tst/tms_tests.cpp | 28 +- documents/README.md | 1 + documents/framework.md | 35 +- documents/scheduled_events .md | 136 ++++ .../readme_c_examples/CMakeLists.txt | 6 + .../src/schedule_events_bundle_activator.c | 70 ++ .../readme_cxx_examples/CMakeLists.txt | 7 + .../src/ScheduleEventsBundleActivator.cc | 51 ++ libs/framework/CMakeLists.txt | 3 +- libs/framework/gtest/CMakeLists.txt | 4 +- .../src/CelixBundleContextServicesTestSuite.cc | 2 +- .../framework/gtest/src/CelixFrameworkTestSuite.cc | 19 + .../framework/gtest/src/ScheduledEventTestSuite.cc | 706 +++++++++++++++++++++ .../ScheduledEventWithErrorInjectionTestSuite.cc | 56 ++ libs/framework/include/celix/BundleContext.h | 9 + libs/framework/include/celix/Framework.h | 2 +- libs/framework/include/celix/ScheduledEvent.h | 162 +++++ .../include/celix/ScheduledEventBuilder.h | 128 ++++ libs/framework/include/celix/dm/Component.h | 2 + .../framework/include/celix/dm/DependencyManager.h | 3 + libs/framework/include/celix_bundle_context.h | 159 ++++- libs/framework/include/celix_constants.h | 15 + libs/framework/include/celix_dependency_manager.h | 13 +- libs/framework/include/celix_framework.h | 61 +- libs/framework/src/bundle_context.c | 56 +- libs/framework/src/celix_scheduled_event.c | 301 +++++++++ libs/framework/src/celix_scheduled_event.h | 191 ++++++ libs/framework/src/framework.c | 417 +++++++++--- libs/framework/src/framework_private.h | 106 +++- libs/framework/src/service_tracker.c | 81 ++- libs/utils/CMakeLists.txt | 7 +- libs/utils/gtest/CMakeLists.txt | 1 + libs/utils/gtest/src/LogTestSuite.cc | 56 ++ libs/utils/gtest/src/LogUtilsTestSuite.cc | 28 +- libs/utils/gtest/src/ThreadsTestSuite.cc | 40 +- libs/utils/gtest/src/TimeUtilsTestSuite.cc | 81 ++- libs/utils/include/celix_errno.h | 1 + libs/utils/include/celix_log_level.h | 46 +- libs/utils/include/celix_log_utils.h | 20 +- libs/utils/include/celix_threads.h | 62 +- libs/utils/include/celix_utils.h | 16 + libs/utils/src/celix_log_level.c | 97 +++ libs/utils/src/celix_log_utils.c | 68 +- libs/utils/src/celix_threads.c | 59 +- libs/utils/src/utils.c | 36 ++ 48 files changed, 3135 insertions(+), 336 deletions(-) diff --cc libs/framework/CMakeLists.txt index 6fb8d6a6,3cde3860..b25c48fe --- a/libs/framework/CMakeLists.txt +++ b/libs/framework/CMakeLists.txt @@@ -15,77 -15,74 +15,78 @@@ # specific language governing permissions and limitations # under the License. -find_package(ZLIB REQUIRED) -find_package(libuuid REQUIRED) -find_package(CURL REQUIRED) +celix_subproject(FRAMEWORK "Option to build the Celix Framework" ON) +if (FRAMEWORK) + find_package(libuuid REQUIRED) + find_package(CURL REQUIRED) -set(FRAMEWORK_SRC - src/attribute.c src/bundle.c src/bundle_archive.c src/celix_bundle_cache.c - src/bundle_context.c src/bundle_revision.c - src/framework.c src/manifest.c - src/manifest_parser.c src/module.c - src/requirement.c src/capability.c src/resolver.c src/wire.c - src/service_reference.c src/service_registration.c - src/service_registry.c src/service_tracker.c src/service_tracker_customizer.c - src/celix_log.c src/celix_launcher.c - src/celix_framework_factory.c - src/dm_dependency_manager_impl.c src/dm_component_impl.c - src/dm_service_dependency.c src/celix_libloader.c - src/framework_bundle_lifecycle_handler.c - src/celix_bundle_state.c - src/celix_framework_utils.c - src/celix_scheduled_event.c -) -set(FRAMEWORK_DEPS libuuid::libuuid CURL::libcurl ZLIB::ZLIB ${CMAKE_DL_LIBS}) + set(FRAMEWORK_SRC + src/attribute.c src/bundle.c src/bundle_archive.c src/celix_bundle_cache.c + src/bundle_context.c src/bundle_revision.c + src/framework.c src/manifest.c + src/manifest_parser.c src/module.c + src/requirement.c src/capability.c src/resolver.c src/wire.c + src/service_reference.c src/service_registration.c + src/service_registry.c src/service_tracker.c src/service_tracker_customizer.c + src/celix_log.c src/celix_launcher.c + src/celix_framework_factory.c + src/dm_dependency_manager_impl.c src/dm_component_impl.c + src/dm_service_dependency.c src/celix_libloader.c + src/framework_bundle_lifecycle_handler.c + src/celix_bundle_state.c + src/celix_framework_utils.c - src/celix_module_private.h) ++ src/celix_scheduled_event.c ++ ) + set(FRAMEWORK_DEPS libuuid::libuuid CURL::libcurl ${CMAKE_DL_LIBS}) -add_library(framework SHARED ${FRAMEWORK_SRC}) + add_library(framework SHARED ${FRAMEWORK_SRC}) -set_target_properties(framework - PROPERTIES - C_VISIBILITY_PRESET hidden - "VERSION" "${CELIX_MAJOR}.${CELIX_MINOR}.${CELIX_MICRO}" - "SOVERSION" ${CELIX_MAJOR} - OUTPUT_NAME "celix_framework") -target_include_directories(framework PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> -) -target_include_directories(framework PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include_deprecated) -target_compile_options(framework PRIVATE -DUSE_FILE32API) -target_compile_options(framework PRIVATE -Wno-deprecated-declarations) #note part of the api is deprecated, ignore this warning on own api -target_link_libraries(framework PUBLIC Celix::utils ${CELIX_OPTIONAL_EXTRA_LIBS}) -target_link_libraries(framework PRIVATE ${FRAMEWORK_DEPS}) + set_target_properties(framework + PROPERTIES + C_VISIBILITY_PRESET hidden + "VERSION" "${CELIX_MAJOR}.${CELIX_MINOR}.${CELIX_MICRO}" + "SOVERSION" ${CELIX_MAJOR} + OUTPUT_NAME "celix_framework") + target_include_directories(framework PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> + ) + target_include_directories(framework PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include_deprecated) + target_compile_options(framework PRIVATE -DUSE_FILE32API) + target_compile_options(framework PRIVATE -Wno-deprecated-declarations) #note part of the api is deprecated, ignore this warning on own api + target_link_libraries(framework PUBLIC Celix::utils ${CELIX_OPTIONAL_EXTRA_LIBS}) + target_link_libraries(framework PRIVATE ${FRAMEWORK_DEPS}) -generate_export_header(framework - BASE_NAME "CELIX_FRAMEWORK" - EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/framework/celix_framework_export.h") -target_include_directories(framework PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/framework>) -celix_deprecated_utils_headers(framework) + generate_export_header(framework + BASE_NAME "CELIX_FRAMEWORK" + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/framework/celix_framework_export.h") + target_include_directories(framework PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/framework>) + celix_deprecated_utils_headers(framework) -install(TARGETS framework EXPORT celix LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) -install(DIRECTORY include_deprecated/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) -install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/framework/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) + install(TARGETS framework EXPORT celix LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) + if (CELIX_INSTALL_DEPRECATED_API) + install(DIRECTORY include_deprecated/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) + endif () + install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/framework/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/framework COMPONENT framework) -#Alias setup to match external usage -add_library(Celix::framework ALIAS framework) + #Alias setup to match external usage + add_library(Celix::framework ALIAS framework) -if (ENABLE_TESTING AND CELIX_CXX17) #framework tests are C++17 - add_library(framework_cut STATIC ${FRAMEWORK_SRC}) - target_include_directories(framework_cut PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/src - ${CMAKE_CURRENT_LIST_DIR}/include - ${CMAKE_BINARY_DIR}/celix/gen/includes/framework - ${CMAKE_CURRENT_LIST_DIR}/include_deprecated - ) - target_compile_options(framework_cut PRIVATE -DUSE_FILE32API) - target_compile_options(framework_cut PRIVATE -Wno-deprecated-declarations) #note part of the api is deprecated, ignore this warning on own api - target_link_libraries(framework_cut PUBLIC Celix::utils ${CELIX_OPTIONAL_EXTRA_LIBS} ${FRAMEWORK_DEPS}) - celix_deprecated_utils_headers(framework_cut) - add_subdirectory(gtest) -endif() + if (ENABLE_TESTING AND CELIX_CXX17) #framework tests are C++17 + add_library(framework_cut STATIC ${FRAMEWORK_SRC}) + target_include_directories(framework_cut PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/src + ${CMAKE_CURRENT_LIST_DIR}/include + ${CMAKE_BINARY_DIR}/celix/gen/includes/framework + ${CMAKE_CURRENT_LIST_DIR}/include_deprecated + ) + target_compile_options(framework_cut PRIVATE -DUSE_FILE32API) + target_compile_options(framework_cut PRIVATE -Wno-deprecated-declarations) #note part of the api is deprecated, ignore this warning on own api + target_link_libraries(framework_cut PUBLIC Celix::utils ${CELIX_OPTIONAL_EXTRA_LIBS} ${FRAMEWORK_DEPS}) + celix_deprecated_utils_headers(framework_cut) + add_subdirectory(gtest) + endif() -add_subdirectory(benchmark) + add_subdirectory(benchmark) +endif () diff --cc libs/utils/CMakeLists.txt index e7fbcd37,e9362dc0..c8733c9c --- a/libs/utils/CMakeLists.txt +++ b/libs/utils/CMakeLists.txt @@@ -15,175 -15,174 +15,176 @@@ # specific language governing permissions and limitations # under the License. -find_package(libzip REQUIRED) - -set(MEMSTREAM_SOURCES ) -set(MEMSTREAM_INCLUDES ) -include(CheckFunctionExists) -#check_function_exists(fmemopen FMEMOPEN_EXISTS) -check_function_exists(open_memstream OPEN_MEMSTREAM_EXISTS) -if (NOT OPEN_MEMSTREAM_EXISTS) - set(MEMSTREAM_SOURCES src/memstream/open_memstream.c src/memstream/fmemopen.c ${MEMSTREAM_SOURCES}) - set(MEMSTREAM_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/memstream ${MEMSTREAM_INCLUDE_DIR}) - install(DIRECTORY include/memstream/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/memstream COMPONENT framework) -endif() - -set(UTILS_SRC - src/array_list.c - src/hash_map.c - src/linked_list.c - src/linked_list_iterator.c - src/celix_threads.c - src/version.c - src/version_range.c - src/properties.c - src/utils.c - src/ip_utils.c - src/filter.c - src/celix_log_level.c - src/celix_log_utils.c - src/celix_hash_map.c - src/celix_file_utils.c - src/celix_convert_utils.c - src/celix_errno.c - src/celix_err.c - ${MEMSTREAM_SOURCES} - ) -set(UTILS_PRIVATE_DEPS libzip::libzip) -set(UTILS_PUBLIC_DEPS) - -add_library(utils SHARED ${UTILS_SRC} src/celix_log_level.c) - -target_link_libraries(utils PRIVATE libzip::libzip) -set_target_properties(utils - PROPERTIES - C_VISIBILITY_PRESET hidden - SOVERSION ${CELIX_MAJOR} - OUTPUT_NAME "celix_utils") - -if (NOT OPEN_MEMSTREAM_EXISTS) - target_compile_definitions(utils PUBLIC -DCELIX_UTILS_NO_MEMSTREAM_AVAILABLE) -endif () - -if (ANDROID) - target_compile_definitions(utils PRIVATE -DUSE_FILE32API) -endif () - -if (NOT APPLE) - set(UTILS_PUBLIC_DEPS ${UTILS_PUBLIC_DEPS} rt) -endif () - -target_include_directories(utils PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> - $<BUILD_INTERFACE:${MEMSTREAM_INCLUDE_DIR}> - ) -target_include_directories(utils PRIVATE src include_deprecated) -IF(UNIX AND NOT ANDROID) - set(UTILS_PRIVATE_DEPS ${UTILS_PRIVATE_DEPS} m pthread) -ELSEIF(ANDROID) - set(UTILS_PRIVATE_DEPS ${UTILS_PRIVATE_DEPS} m) -ENDIF() - -target_link_libraries(utils PUBLIC ${UTILS_PUBLIC_DEPS} PRIVATE ${UTILS_PRIVATE_DEPS}) -generate_export_header(utils - BASE_NAME "CELIX_UTILS" - EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/utils/celix_utils_export.h") -target_include_directories(utils PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/utils>) - -#Configure celix_err_constant header file -set(CELIX_ERR_BUFFER_SIZE 512 CACHE STRING "The size of the thread-specific buffer used for library error messages") -configure_file("${CMAKE_CURRENT_LIST_DIR}/src/celix_err_constants.h.in" "${CMAKE_BINARY_DIR}/celix/gen/includes/utils/celix_err_constants.h" @ONLY) - -install(TARGETS utils EXPORT celix LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils) -install(DIRECTORY include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils/ - COMPONENT framework PATTERN memstream* EXCLUDE) -install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/utils/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils/ - COMPONENT framework) - -if (CELIX_INSTALL_DEPRECATED_API) - install(DIRECTORY include_deprecated/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils COMPONENT framework) -endif () - -#Alias setup to match external usage -add_library(Celix::utils ALIAS utils) - - -if (ENABLE_TESTING) - add_library(utils_cut STATIC ${UTILS_SRC}) - target_include_directories(utils_cut PUBLIC - ${CMAKE_CURRENT_LIST_DIR}/include - ${MEMSTREAM_INCLUDE_DIR} - ${CMAKE_BINARY_DIR}/celix/gen/includes/utils - src include_deprecated - ) - target_link_libraries(utils_cut PUBLIC ${UTILS_PUBLIC_DEPS} ${UTILS_PRIVATE_DEPS}) - - if (CELIX_CXX17) #utils tests are C++17 - add_subdirectory(gtest) +celix_subproject(UTILS "Option to enable building the Utilities library" ON) +if (UTILS) + find_package(libzip REQUIRED) + + set(MEMSTREAM_SOURCES ) + set(MEMSTREAM_INCLUDES ) + include(CheckFunctionExists) + #check_function_exists(fmemopen FMEMOPEN_EXISTS) + check_function_exists(open_memstream OPEN_MEMSTREAM_EXISTS) + if (NOT OPEN_MEMSTREAM_EXISTS) + set(MEMSTREAM_SOURCES src/memstream/open_memstream.c src/memstream/fmemopen.c ${MEMSTREAM_SOURCES}) + set(MEMSTREAM_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/memstream ${MEMSTREAM_INCLUDE_DIR}) + install(DIRECTORY include/memstream/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/memstream COMPONENT framework) endif() - find_package(CppUTest) - - if (CppUTest_FOUND) - include_directories(SYSTEM PRIVATE ${CppUTest_INCLUDE_DIR}) - include_directories(include) - include_directories(src) - - add_executable(hash_map_test private/test/hash_map_test.cpp) - target_include_directories(hash_map_test PRIVATE include_deprecated) - target_link_libraries(hash_map_test utils_cut CppUTest::CppUTest pthread) - - add_executable(array_list_test private/test/array_list_test.cpp) - target_include_directories(array_list_test PRIVATE include_deprecated) - target_link_libraries(array_list_test utils_cut CppUTest::CppUTest pthread) - - add_executable(linked_list_test private/test/linked_list_test.cpp) - target_include_directories(linked_list_test PRIVATE include_deprecated) - target_link_libraries(linked_list_test utils_cut CppUTest::CppUTest pthread) - - add_executable(properties_test private/test/properties_test.cpp) - target_include_directories(properties_test PRIVATE include_deprecated) - target_link_libraries(properties_test CppUTest::CppUTest CppUTest::CppUTestExt utils_cut pthread) - - add_executable(ip_utils_test private/test/ip_utils_test.cpp) - target_include_directories(ip_utils_test PRIVATE include_deprecated) - target_link_libraries(ip_utils_test CppUTest::CppUTest utils_cut pthread) - - add_executable(version_test private/test/version_test.cpp) - target_include_directories(version_test PRIVATE include_deprecated) - target_link_libraries(version_test CppUTest::CppUTest utils_cut pthread) - + set(UTILS_SRC + src/array_list.c + src/hash_map.c + src/linked_list.c + src/linked_list_iterator.c + src/celix_threads.c + src/version.c + src/version_range.c + src/properties.c + src/utils.c + src/ip_utils.c + src/filter.c ++ src/celix_log_level.c + src/celix_log_utils.c + src/celix_hash_map.c + src/celix_file_utils.c + src/celix_convert_utils.c + src/celix_errno.c + src/celix_err.c + ${MEMSTREAM_SOURCES} + ) + set(UTILS_PRIVATE_DEPS libzip::libzip) + set(UTILS_PUBLIC_DEPS) - if (LINKER_WRAP_SUPPORTED) - add_executable(version_ei_test private/test/version_ei_test.cc) - target_include_directories(version_ei_test PRIVATE include_deprecated) - target_link_libraries(version_ei_test CppUTest::CppUTest utils_cut Celix::malloc_ei Celix::utils_ei pthread) - add_test(NAME version_ei_test COMMAND version_ei_test) - endif () + add_library(utils SHARED ${UTILS_SRC}) - configure_file(private/resources-test/properties.txt ${CMAKE_CURRENT_BINARY_DIR}/resources-test/properties.txt COPYONLY) + set_target_properties(utils + PROPERTIES + C_VISIBILITY_PRESET hidden + SOVERSION ${CELIX_MAJOR} + OUTPUT_NAME "celix_utils") - add_test(NAME run_array_list_test COMMAND array_list_test) - add_test(NAME run_hash_map_test COMMAND hash_map_test) - add_test(NAME run_linked_list_test COMMAND linked_list_test) - add_test(NAME run_properties_test COMMAND properties_test) - add_test(NAME run_ip_utils_test COMMAND ip_utils_test) - add_test(NAME version_test COMMAND version_test) + if (NOT OPEN_MEMSTREAM_EXISTS) + target_compile_definitions(utils PUBLIC -DCELIX_UTILS_NO_MEMSTREAM_AVAILABLE) + endif () - setup_target_for_coverage(array_list_test) - setup_target_for_coverage(hash_map_test) - setup_target_for_coverage(linked_list_test) - setup_target_for_coverage(properties_test) - setup_target_for_coverage(ip_utils_test) - setup_target_for_coverage(version_test) - else () - message(WARNING "Cannot find CppUTest, deprecated cpputest-based unit test will not be added") - endif () #end CppUTest_FOUND + if (ANDROID) + target_compile_definitions(utils PRIVATE -DUSE_FILE32API) + endif () - if (NOT APPLE) - set(UTILS_PUBLIC_DEPS ${UTILS_PUBLIC_DEPS} rt) - endif () ++if (NOT APPLE) ++ set(UTILS_PUBLIC_DEPS ${UTILS_PUBLIC_DEPS} rt) + endif () -add_subdirectory(benchmark) + target_include_directories(utils PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> + $<BUILD_INTERFACE:${MEMSTREAM_INCLUDE_DIR}> + ) + target_include_directories(utils PRIVATE src include_deprecated) + IF(UNIX AND NOT ANDROID) + set(UTILS_PRIVATE_DEPS ${UTILS_PRIVATE_DEPS} m pthread) + ELSEIF(ANDROID) + set(UTILS_PRIVATE_DEPS ${UTILS_PRIVATE_DEPS} m) + ENDIF() + + target_link_libraries(utils PUBLIC ${UTILS_PUBLIC_DEPS} PRIVATE ${UTILS_PRIVATE_DEPS}) + generate_export_header(utils + BASE_NAME "CELIX_UTILS" + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/utils/celix_utils_export.h") + target_include_directories(utils PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/utils>) + + #Configure celix_err_constant header file + set(CELIX_ERR_BUFFER_SIZE 512 CACHE STRING "The size of the thread-specific buffer used for library error messages") + configure_file("${CMAKE_CURRENT_LIST_DIR}/src/celix_err_constants.h.in" "${CMAKE_BINARY_DIR}/celix/gen/includes/utils/celix_err_constants.h" @ONLY) + + install(TARGETS utils EXPORT celix LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils) + install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils/ + COMPONENT framework PATTERN memstream* EXCLUDE) + install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/utils/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils/ + COMPONENT framework) + + if (CELIX_INSTALL_DEPRECATED_API) + install(DIRECTORY include_deprecated/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix/utils COMPONENT framework) + endif () + + #Alias setup to match external usage + add_library(Celix::utils ALIAS utils) + + + if (ENABLE_TESTING) + add_library(utils_cut STATIC ${UTILS_SRC}) + target_include_directories(utils_cut PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/include + ${MEMSTREAM_INCLUDE_DIR} + ${CMAKE_BINARY_DIR}/celix/gen/includes/utils + src include_deprecated + ) + target_link_libraries(utils_cut PUBLIC ${UTILS_PUBLIC_DEPS} ${UTILS_PRIVATE_DEPS}) + + if (CELIX_CXX17) #utils tests are C++17 + add_subdirectory(gtest) + endif() + + find_package(CppUTest) + + if (CppUTest_FOUND) + include_directories(SYSTEM PRIVATE ${CppUTest_INCLUDE_DIR}) + include_directories(include) + include_directories(src) + + add_executable(hash_map_test private/test/hash_map_test.cpp) + target_include_directories(hash_map_test PRIVATE include_deprecated) + target_link_libraries(hash_map_test utils_cut CppUTest::CppUTest pthread) + + add_executable(array_list_test private/test/array_list_test.cpp) + target_include_directories(array_list_test PRIVATE include_deprecated) + target_link_libraries(array_list_test utils_cut CppUTest::CppUTest pthread) + + add_executable(linked_list_test private/test/linked_list_test.cpp) + target_include_directories(linked_list_test PRIVATE include_deprecated) + target_link_libraries(linked_list_test utils_cut CppUTest::CppUTest pthread) + + add_executable(properties_test private/test/properties_test.cpp) + target_include_directories(properties_test PRIVATE include_deprecated) + target_link_libraries(properties_test CppUTest::CppUTest CppUTest::CppUTestExt utils_cut pthread) + + add_executable(ip_utils_test private/test/ip_utils_test.cpp) + target_include_directories(ip_utils_test PRIVATE include_deprecated) + target_link_libraries(ip_utils_test CppUTest::CppUTest utils_cut pthread) + + add_executable(version_test private/test/version_test.cpp) + target_include_directories(version_test PRIVATE include_deprecated) + target_link_libraries(version_test CppUTest::CppUTest utils_cut pthread) + + + if (LINKER_WRAP_SUPPORTED) + add_executable(version_ei_test private/test/version_ei_test.cc) + target_include_directories(version_ei_test PRIVATE include_deprecated) + target_link_libraries(version_ei_test CppUTest::CppUTest utils_cut Celix::malloc_ei Celix::utils_ei pthread) + add_test(NAME version_ei_test COMMAND version_ei_test) + endif () + + configure_file(private/resources-test/properties.txt ${CMAKE_CURRENT_BINARY_DIR}/resources-test/properties.txt COPYONLY) + + add_test(NAME run_array_list_test COMMAND array_list_test) + add_test(NAME run_hash_map_test COMMAND hash_map_test) + add_test(NAME run_linked_list_test COMMAND linked_list_test) + add_test(NAME run_properties_test COMMAND properties_test) + add_test(NAME run_ip_utils_test COMMAND ip_utils_test) + add_test(NAME version_test COMMAND version_test) + + setup_target_for_coverage(array_list_test) + setup_target_for_coverage(hash_map_test) + setup_target_for_coverage(linked_list_test) + setup_target_for_coverage(properties_test) + setup_target_for_coverage(ip_utils_test) + setup_target_for_coverage(version_test) + else () + message(WARNING "Cannot find CppUTest, deprecated cpputest-based unit test will not be added") + endif () #end CppUTest_FOUND + + endif () + + add_subdirectory(benchmark) +endif ()
