This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/685-update-container-config-properties-usage in repository https://gitbox.apache.org/repos/asf/celix.git
commit 74f425794cadb0b7ce71056da9727b178eaca4f2 Author: Pepijn Noltes <pnol...@apache.org> AuthorDate: Thu May 30 15:42:43 2024 +0200 gh-685: Refactor config prop cmake gen and test config props --- CHANGES.md | 2 +- .../gtest/client.properties.in | 21 ++-- .../gtest/config.properties.in | 25 +---- .../gtest/server.properties.in | 37 ++----- .../topology_manager/tms_tst/CMakeLists.txt | 20 ++-- cmake/cmake_celix/BundlePackaging.cmake | 26 ++--- cmake/cmake_celix/ContainerPackaging.cmake | 123 ++++++++++++--------- .../bundle_with_private_lib/CMakeLists.txt | 2 +- .../celix-examples/hello_world_c/CMakeLists.txt | 3 +- libs/framework/gtest/config.properties.in | 23 +--- libs/framework/gtest/framework1.properties.in | 25 +---- libs/framework/gtest/framework2.properties.in | 25 +---- .../gtest/install_and_start_bundles.properties.in | 33 +----- libs/framework/src/celix_launcher.c | 59 ++++++---- libs/utils/gtest/CMakeLists.txt | 4 +- .../config_admin_tst/config.properties.in | 25 +---- 16 files changed, 188 insertions(+), 265 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 2720590a4..593decd40 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -33,7 +33,7 @@ limitations under the License. - pubsub_serializer.h is removed and no longer supported. Use pubsub_message_serialization_service.h instead. - C++11 support for dm is removed. C++14 is now the minimum required version. - C++17 string_view support is removed from the utils and framework lib. -- Apache Celix CMake bundle functions without a celix_ prefix or infix are removed. +- Apache Celix CMake container & bundle functions without a celix_ prefix or infix are removed. - Apache Celix CMake support for creating docker images and creating runtimes dirs is removed. - Support and usage of "service.lang" service property is removed. - Rename of `CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR` config property to `CELIX_FRAMEWORK_CACHE_DIR`. diff --git a/bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in index 506ed25ea..00ef4e8cd 100644 --- a/bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in +++ b/bundles/remote_services/remote_service_admin_dfi/gtest/client.properties.in @@ -1,10 +1,11 @@ -CELIX_AUTO_START_1=@rsa_bundle_file@ @discovery_bundle_file@ @topology_manager_bundle_file@ @tst_bundle_file@ -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -CELIX_FRAMEWORK_CACHE_DIR=.cacheClient - -DISCOVERY_CFG_POLL_INTERVAL=1 -DISCOVERY_CFG_POLL_TIMEOUT=5 -RSA_PORT=50881 -DISCOVERY_CFG_SERVER_PORT=50991 -DISCOVERY_CFG_POLL_ENDPOINTS=http://localhost:50992/org.apache.celix.discovery.configured \ No newline at end of file +{ + "CELIX_AUTO_START_1":"@rsa_bundle_file@ @discovery_bundle_file@ @topology_manager_bundle_file@ @tst_bundle_file@", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true, + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true, + "CELIX_FRAMEWORK_CACHE_DIR":".cacheClient", + "DISCOVERY_CFG_POLL_INTERVAL":1, + "DISCOVERY_CFG_POLL_TIMEOUT":5, + "RSA_PORT":50881, + "DISCOVERY_CFG_SERVER_PORT":50991, + "DISCOVERY_CFG_POLL_ENDPOINTS":"http://localhost:50992/org.apache.celix.discovery.configured" +} \ No newline at end of file diff --git a/bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in index 52730b288..cac7390d2 100644 --- a/bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in +++ b/bundles/remote_services/remote_service_admin_dfi/gtest/config.properties.in @@ -1,20 +1,5 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CELIX_AUTO_START_1=@rsa_bundle_file@ @calc_bundle_file@ -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true +{ + "CELIX_AUTO_START_1":"@rsa_bundle_file@ @calc_bundle_file@", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true, + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true +} diff --git a/bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in b/bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in index 7812c7fe0..8d74011aa 100644 --- a/bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in +++ b/bundles/remote_services/remote_service_admin_dfi/gtest/server.properties.in @@ -1,26 +1,11 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -CELIX_AUTO_START_1=@rsa_bundle_file@ @calc_bundle_file@ @remote_example_bundle_file@ @discovery_bundle_file@ @topology_manager_bundle_file@ -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -CELIX_FRAMEWORK_CACHE_DIR=.cacheServer - -DISCOVERY_CFG_POLL_INTERVAL=1 -DISCOVERY_CFG_POLL_TIMEOUT=5 -RSA_PORT=50882 -DISCOVERY_CFG_SERVER_PORT=50992 -DISCOVERY_CFG_POLL_ENDPOINTS=http://localhost:50991/org.apache.celix.discovery.configured +{ + "CELIX_AUTO_START_1":"@rsa_bundle_file@ @calc_bundle_file@ @remote_example_bundle_file@ @discovery_bundle_file@ @topology_manager_bundle_file@", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true, + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true, + "CELIX_FRAMEWORK_CACHE_DIR":".cacheServer", + "DISCOVERY_CFG_POLL_INTERVAL":1, + "DISCOVERY_CFG_POLL_TIMEOUT":5, + "RSA_PORT":50882, + "DISCOVERY_CFG_SERVER_PORT":50992, + "DISCOVERY_CFG_POLL_ENDPOINTS":"http://localhost:50991/org.apache.celix.discovery.configured" +} diff --git a/bundles/remote_services/topology_manager/tms_tst/CMakeLists.txt b/bundles/remote_services/topology_manager/tms_tst/CMakeLists.txt index dfb913135..332677cc1 100644 --- a/bundles/remote_services/topology_manager/tms_tst/CMakeLists.txt +++ b/bundles/remote_services/topology_manager/tms_tst/CMakeLists.txt @@ -54,19 +54,19 @@ add_celix_bundle_dependencies(test_tm_scoped Celix::rsa_dfi Celix::rsa_topology_ file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/config.properties" - CONTENT " -CELIX_AUTO_START_1=$<TARGET_PROPERTY:Celix::rsa_dfi,BUNDLE_FILE> $<TARGET_PROPERTY:calculator,BUNDLE_FILE> $<TARGET_PROPERTY:Celix::rsa_topology_manager,BUNDLE_FILE> $<TARGET_PROPERTY:topology_manager_disc_mock_bundle,BUNDLE_FILE> -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -") + CONTENT "{ + \"CELIX_AUTO_START_1\":\"$<TARGET_PROPERTY:Celix::rsa_dfi,BUNDLE_FILE> $<TARGET_PROPERTY:calculator,BUNDLE_FILE> $<TARGET_PROPERTY:Celix::rsa_topology_manager,BUNDLE_FILE> $<TARGET_PROPERTY:topology_manager_disc_mock_bundle,BUNDLE_FILE>\", + \"LOGHELPER_ENABLE_STDOUT_FALLBACK\":true, + \"CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE\":true +}") file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/config_import.properties" - CONTENT " -CELIX_AUTO_START_1=$<TARGET_PROPERTY:Celix::rsa_dfi,BUNDLE_FILE> $<TARGET_PROPERTY:calculator,BUNDLE_FILE> $<TARGET_PROPERTY:Celix::rsa_topology_manager,BUNDLE_FILE> $<TARGET_PROPERTY:topology_manager_test_bundle,BUNDLE_FILE> -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -") + CONTENT "{ + \"CELIX_AUTO_START_1\":\"$<TARGET_PROPERTY:Celix::rsa_dfi,BUNDLE_FILE> $<TARGET_PROPERTY:calculator,BUNDLE_FILE> $<TARGET_PROPERTY:Celix::rsa_topology_manager,BUNDLE_FILE> $<TARGET_PROPERTY:topology_manager_test_bundle,BUNDLE_FILE>\", + \"LOGHELPER_ENABLE_STDOUT_FALLBACK\":true, + \"CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE\":true +}") configure_file("scope.json" "scope.json") configure_file("scope2.json" "scope2.json") diff --git a/cmake/cmake_celix/BundlePackaging.cmake b/cmake/cmake_celix/BundlePackaging.cmake index 112d942f4..0bdf0f654 100644 --- a/cmake/cmake_celix/BundlePackaging.cmake +++ b/cmake/cmake_celix/BundlePackaging.cmake @@ -31,13 +31,13 @@ endif () find_program(JAR_COMMAND jar NO_CMAKE_FIND_ROOT_PATH) if (JAR_COMMAND AND NOT CELIX_USE_ZIP_INSTEAD_OF_JAR) - message(STATUS "Using jar to create bundles") + message(DEBUG "Using jar to create bundles") else () find_program(ZIP_COMMAND zip NO_CMAKE_FIND_ROOT_PATH) if (ZIP_COMMAND) - message(STATUS "Using zip to create bundles") + message(DEBUG "Using zip to create bundles") else () - message(FATAL_ERROR "A jar or zip command is needed to jar/zip bundles") + message(FATAL_ERROR "A jar or zip command is needed to created bundles") endif () endif () @@ -48,7 +48,7 @@ if (NOT TARGET celix-bundles) endif () ##### -macro(extract_version_parts VERSION MAJOR MINOR PATCH) +macro(_extract_version_parts VERSION MAJOR MINOR PATCH) set(MAJOR "0") set(MINOR "0") set(PATCH "0") @@ -67,20 +67,20 @@ macro(extract_version_parts VERSION MAJOR MINOR PATCH) endif () endmacro() -function(set_library_version TARGET VERSION) +function(celix_set_library_version TARGET VERSION) if (VERSION AND TARGET) - extract_version_parts("${VERSION}" MAJOR MINOR PATCH) + _extract_version_parts("${VERSION}" MAJOR MINOR PATCH) #NOTE setting aligning ABI version with major part of the interface version. #This is simpeler than using the <current>:<revision>:<age> approach of libtool set_property(TARGET ${TARGET} PROPERTY VERSION "${VERSION}") set_property(TARGET ${TARGET} PROPERTY SOVERSION ${MAJOR}) else () - message(WARNING "set_library_version: Cannot set version info TARGET and/or VERSION not provided") + message(WARNING "celix_set_library_version: Cannot set version info TARGET and/or VERSION not provided") endif () endfunction() -function(check_lib LIB) +function(_check_lib LIB) if (TARGET ${LIB}) #ok elseif (IS_ABSOLUTE ${LIB} AND EXISTS ${LIB}) @@ -90,7 +90,7 @@ function(check_lib LIB) endif () endfunction() -function(check_bundle BUNDLE) +function(_check_bundle BUNDLE) if (TARGET ${BUNDLE}) get_target_property(BUNDLE_FILE ${BUNDLE} "BUNDLE_FILE") if (NOT BUNDLE_FILE) @@ -191,7 +191,7 @@ function(add_celix_bundle) message(FATAL_ERROR "add_bundle function requires a value for SOURCES or ACTIVATOR not both") endif () if (BUNDLE_ACTIVATOR) - check_lib(${BUNDLE_ACTIVATOR}) + _check_lib(${BUNDLE_ACTIVATOR}) endif () if (NOT DEFINED BUNDLE_GROUP) set(BUNDLE_GROUP "") @@ -246,7 +246,7 @@ function(add_celix_bundle) if (BUNDLE_SOURCES) #create lib from sources add_library(${BUNDLE_TARGET_NAME} SHARED ${BUNDLE_SOURCES}) - set_library_version(${BUNDLE_TARGET_NAME} ${BUNDLE_VERSION}) + celix_set_library_version(${BUNDLE_TARGET_NAME} ${BUNDLE_VERSION}) set_target_properties(${BUNDLE_TARGET_NAME} PROPERTIES "BUNDLE_TARGET_IS_LIB" TRUE "BUNDLE_TARGET" "${BUNDLE_TARGET_NAME}_bundle" @@ -451,7 +451,7 @@ function(celix_bundle_libs) list(REMOVE_AT ARGN 0) #check if arg 0 is corrent - check_bundle(${BUNDLE}) + _check_bundle(${BUNDLE}) get_target_property(BUNDLE_DIR ${BUNDLE} "BUNDLE_CONTENT_DIR") get_target_property(BUNDLE_GEN_DIR ${BUNDLE} "BUNDLE_GEN_DIR") @@ -536,7 +536,7 @@ function(celix_bundle_import_libs) list(REMOVE_AT ARGN 0) #check if arg 0 is correct - check_bundle(${BUNDLE}) + _check_bundle(${BUNDLE}) get_target_property(LIBS ${BUNDLE} "BUNDLE_IMPORT_LIBS") diff --git a/cmake/cmake_celix/ContainerPackaging.cmake b/cmake/cmake_celix/ContainerPackaging.cmake index 382a2bd16..6523b3d44 100644 --- a/cmake/cmake_celix/ContainerPackaging.cmake +++ b/cmake/cmake_celix/ContainerPackaging.cmake @@ -18,7 +18,7 @@ set(CELIX_DEFAULT_CONTAINER_CXX_OPTION ON CACHE BOOL "Whether the default container options is CXX. If OFF this will be C") -##### setup bundles/container target +# Setup bundles/container target if (NOT TARGET celix-containers) add_custom_target(celix-containers ALL DEPENDS $<TARGET_PROPERTY:celix-containers,CONTAINER_DEPLOYMENTS> @@ -30,12 +30,8 @@ if (NOT TARGET celix-containers) list(APPEND CLEANFILES "${CMAKE_BINARY_DIR}/celix") set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES "${CLEANFILES}") endif () -##### -function(add_deploy) - message(DEPRECATION "deploy_bundles_dir is depecrated, use celix_container_bundles_dir instead.") - add_celix_container(${ARGN}) -endfunction() + #[[ Add a Celix container, consisting out of a selection of bundles and a Celix launcher. @@ -223,20 +219,24 @@ function(add_celix_container) CONTENT "#include <celix_launcher.h> #include <celix_err.h> +#define CELIX_MULTI_LINE_STRING(...) #__VA_ARGS__ + int main(int argc, char *argv[]) { - const char * config = \"\\ -CELIX_CONTAINER_NAME=$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_NAME>\\n\\ -CELIX_BUNDLES_PATH=bundles\\n\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>>:CELIX_AUTO_START_0=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>>:CELIX_AUTO_START_1=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>>:CELIX_AUTO_START_2=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>>:CELIX_AUTO_START_3=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>>:CELIX_AUTO_START_4=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>>:CELIX_AUTO_START_5=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>>:CELIX_AUTO_START_6=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>, >\\n>\\ -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>>:CELIX_AUTO_INSTALL=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>, >\\n>\\ -$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>,\\n\\ ->\"; + const char * config = CELIX_MULTI_LINE_STRING( +{ + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>>:\"CELIX_AUTO_START_0\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>>:\"CELIX_AUTO_START_1\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>>:\"CELIX_AUTO_START_2\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>>:\"CELIX_AUTO_START_3\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>>:\"CELIX_AUTO_START_4\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>>:\"CELIX_AUTO_START_5\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>>:\"CELIX_AUTO_START_6\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>>:\"CELIX_AUTO_INSTALL\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>, >\"$<COMMA>> + $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>,$<COMMA> + >$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>>:$<COMMA>> + \"CELIX_BUNDLES_PATH\":\"bundles\"$<COMMA> + \"CELIX_CONTAINER_NAME\":\"$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_NAME>\" +}); celix_properties_t *embeddedProps; celix_status_t status = celix_properties_loadFromString2(config, 0, &embeddedProps); @@ -277,18 +277,20 @@ $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>,\\n\ if (CONTAINER_USE_CONFIG) file(GENERATE OUTPUT "${STAGE1_PROPERTIES}" - CONTENT "CELIX_CONTAINER_NAME=$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_NAME> -CELIX_BUNDLES_PATH=bundles -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>>:CELIX_AUTO_START_0=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>>:CELIX_AUTO_START_1=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>>:CELIX_AUTO_START_2=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>>:CELIX_AUTO_START_3=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>>:CELIX_AUTO_START_4=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>>:CELIX_AUTO_START_5=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>>:CELIX_AUTO_START_6=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>, >> -$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>>:CELIX_AUTO_INSTALL=$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>, >> -$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>, ->" + CONTENT "{ + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>>:\"CELIX_AUTO_START_0\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_0>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>>:\"CELIX_AUTO_START_1\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_1>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>>:\"CELIX_AUTO_START_2\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_2>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>>:\"CELIX_AUTO_START_3\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_3>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>>:\"CELIX_AUTO_START_4\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_4>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>>:\"CELIX_AUTO_START_5\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_5>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>>:\"CELIX_AUTO_START_6\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_LEVEL_6>, >\"$<COMMA>> + $<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>>:\"CELIX_AUTO_INSTALL\":\"$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_BUNDLES_INSTALL>, >\"$<COMMA>> + $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>,$<COMMA> + >$<$<BOOL:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_EMBEDDED_PROPERTIES>>:$<COMMA>> + \"CELIX_BUNDLES_PATH\":\"bundles\"$<COMMA> + \"CELIX_CONTAINER_NAME\":\"$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_NAME>\" +}" ) file(GENERATE OUTPUT "${CONTAINER_PROPS}" @@ -297,9 +299,10 @@ $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>, else () file(GENERATE OUTPUT "${STAGE1_PROPERTIES}" - CONTENT "$<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>, -> -" + CONTENT "{ + $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>,$<COMMA> + > +}" ) #Condition is there so that config.properties file will only be generated if there are runtime properties file(GENERATE @@ -374,13 +377,6 @@ $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>, set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES "${CLEANFILES}") endfunction() - -#NOTE can be used for drivers/proxies/endpoints bundle dirs -function(deploy_bundles_dir) - message(DEPRECATION "deploy_bundles_dir is depecrated, use celix_container_bundles_dir instead.") - celix_container_bundles_dir(${ARGN}) -endfunction() - #[[ Copy the specified bundles to a specified dir in the container build dir. @@ -463,11 +459,6 @@ function(celix_container_bundles_dir) endforeach() endfunction() -function(deploy_bundles) - message(DEPRECATION "deploy_bundles is depecrated, use celix_container_bundles instead.") - celix_container_bundles(${ARGN}) -endfunction() - #[[ Add a selection of bundles to the Celix container. @@ -572,6 +563,7 @@ function(celix_container_bundles) endif () endforeach() + list(REMOVE_DUPLICATES BUNDLES) if (BUNDLES_INSTALL) set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_BUNDLES_INSTALL" "${BUNDLES}") else () #bundle level 0,1,2,3,4,5 or 6 @@ -609,8 +601,36 @@ function(_celix_container_check_duplicate_bundles) endforeach() endfunction() -function(deploy_properties) - celix_container_runtime_properties(${ARGN}) +#[[ +Internal function that converts a property string to a JSON field entry. +The result is stored in the OUTPUT_VAR_NAME variable. + +In the key the char `=` is not allowed and should be escaped as `\=` (in CMake this is `\\=`, because \ is already an +escape char in CMake). +In the value the char `=` is allowed. + +To handle \= string sequences the \= entries are replaced with a placeholder (__<CELIX_ESCAPED_EQUAL>__) and after the +split the placeholder is replaced with =. + +```CMake +_celix_convert_property_to_json("prop1=val1" OUTPUT_VAR_NAME) # OUTPUT_VAR_NAME will be set to "\"prop1\":\"val1\"" +_celix_convert_property_to_json("prop1=va=l1" OUTPUT_VAR_NAME) # OUTPUT_VAR_NAME will be set to "\"prop1\":\"va=l1\"" +_celix_convert_property_to_json("prop\\=1=val1" OUTPUT_VAR_NAME) # OUTPUT_VAR_NAME will be set to "\"prop=1\":\"val1\"" +``` +]] +function(_celix_convert_property_to_json INPUT_STR OUTPUT_VAR_NAME) + set(PLACEHOLDER "__<CELIX_ESCAPED_EQUAL>__") + string(REPLACE "\\=" "${PLACEHOLDER}" TEMP_INPUT_STR "${INPUT_STR}") + + string(REGEX MATCH "([^=]+)=(.*)" _ ${TEMP_INPUT_STR}) + set(KEY ${CMAKE_MATCH_1}) + set(VALUE ${CMAKE_MATCH_2}) + + #Replace replaced \= and \\ with = and \ + string(REPLACE "${PLACEHOLDER}" "=" KEY "${KEY}") + string(REPLACE "${PLACEHOLDER}" "=" VALUE "${VALUE}") + + set(${OUTPUT_VAR_NAME} "\"${KEY}\":\"${VALUE}\"" PARENT_SCOPE) endfunction() #[[ @@ -634,17 +654,13 @@ function(celix_container_runtime_properties) get_target_property(PROPS ${CONTAINER_TARGET} "CONTAINER_RUNTIME_PROPERTIES") foreach(PROP IN ITEMS ${ARGN}) + _celix_convert_property_to_json(${PROP} PROP) list(APPEND PROPS ${PROP}) endforeach() set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_RUNTIME_PROPERTIES" "${PROPS}") endfunction() -function(deploy_embedded_properties) - message(DEPRECATION "deploy_embedded_properties is depecrated, use celix_container_embedded_properties instead.") - celix_container_embedded_properties(${ARGN}) -endfunction() - #[[ Add the provided properties to the target Celix container config properties. These properties will be embedded into the generated Celix launcher. @@ -666,6 +682,7 @@ function(celix_container_embedded_properties) get_target_property(PROPS ${CONTAINER_TARGET} "CONTAINER_EMBEDDED_PROPERTIES") foreach(PROP IN ITEMS ${ARGN}) + _celix_convert_property_to_json(${PROP} PROP) list(APPEND PROPS ${PROP}) endforeach() diff --git a/examples/celix-examples/bundle_with_private_lib/CMakeLists.txt b/examples/celix-examples/bundle_with_private_lib/CMakeLists.txt index ab963418b..8c839f504 100644 --- a/examples/celix-examples/bundle_with_private_lib/CMakeLists.txt +++ b/examples/celix-examples/bundle_with_private_lib/CMakeLists.txt @@ -19,7 +19,7 @@ add_library(tlib SHARED tlib/src/test.c ) target_include_directories(tlib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tlib/include) -set_library_version(tlib "4.3.2") # sets target propery VERSION to 4.3.2 and SOVERSION to 4 +celix_set_library_version(tlib "4.3.2") # sets target propery VERSION to 4.3.2 and SOVERSION to 4 add_celix_bundle(hellotest VERSION "1.2" diff --git a/examples/celix-examples/hello_world_c/CMakeLists.txt b/examples/celix-examples/hello_world_c/CMakeLists.txt index de275ead0..1ae721f5d 100644 --- a/examples/celix-examples/hello_world_c/CMakeLists.txt +++ b/examples/celix-examples/hello_world_c/CMakeLists.txt @@ -21,9 +21,10 @@ add_celix_bundle(hello_world_c ) add_celix_container(hello_world_c_container + C GROUP c_examples BUNDLES Celix::shell Celix::shell_tui hello_world_c -) \ No newline at end of file +) diff --git a/libs/framework/gtest/config.properties.in b/libs/framework/gtest/config.properties.in index f5931a4a5..f594096d2 100644 --- a/libs/framework/gtest/config.properties.in +++ b/libs/framework/gtest/config.properties.in @@ -1,19 +1,4 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true \ No newline at end of file +{ + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true, + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true +} diff --git a/libs/framework/gtest/framework1.properties.in b/libs/framework/gtest/framework1.properties.in index 567d19732..1d72fbbd7 100644 --- a/libs/framework/gtest/framework1.properties.in +++ b/libs/framework/gtest/framework1.properties.in @@ -1,20 +1,5 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR=.cacheFramework1 -LOGHELPER_ENABLE_STDOUT_FALLBACK=true +{ + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true, + "CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR":".cacheFramework1", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true +} diff --git a/libs/framework/gtest/framework2.properties.in b/libs/framework/gtest/framework2.properties.in index 234b7a20e..d9ff4738e 100644 --- a/libs/framework/gtest/framework2.properties.in +++ b/libs/framework/gtest/framework2.properties.in @@ -1,20 +1,5 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true -CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR=.cacheFramework2 -LOGHELPER_ENABLE_STDOUT_FALLBACK=true +{ + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true, + "CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR":".cacheFramework2", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true +} diff --git a/libs/framework/gtest/install_and_start_bundles.properties.in b/libs/framework/gtest/install_and_start_bundles.properties.in index d51721efe..f7fdc6dca 100644 --- a/libs/framework/gtest/install_and_start_bundles.properties.in +++ b/libs/framework/gtest/install_and_start_bundles.properties.in @@ -1,29 +1,8 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true - -#3 bundles, where 2 are valid and 1 non existing -CELIX_AUTO_START_1=@SIMPLE_TEST_BUNDLE1@ @SIMPLE_TEST_BUNDLE2@ Invalid1.zip - -#3 bundles, 1 is valid, 1 non existing and 1 already started -CELIX_AUTO_START_3=@SIMPLE_TEST_BUNDLE2@ @SIMPLE_TEST_BUNDLE3@ Invalid2.zip - -#4 bundles, 2 valid, 1 non existing and 1 already started -CELIX_AUTO_INSTALL=@SIMPLE_TEST_BUNDLE3@ @SIMPLE_TEST_BUNDLE4@ @SIMPLE_TEST_BUNDLE5@ Invalid3.zip +{ + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true, + "CELIX_AUTO_START_1":"@SIMPLE_TEST_BUNDLE1@ @SIMPLE_TEST_BUNDLE2@ Invalid1.zip", + "CELIX_AUTO_START_3":"@SIMPLE_TEST_BUNDLE2@ @SIMPLE_TEST_BUNDLE3@ Invalid2.zip", + "CELIX_AUTO_INSTALL":"@SIMPLE_TEST_BUNDLE3@ @SIMPLE_TEST_BUNDLE4@ @SIMPLE_TEST_BUNDLE5@ Invalid3.zip" +} diff --git a/libs/framework/src/celix_launcher.c b/libs/framework/src/celix_launcher.c index e3a72e29c..2d2791292 100644 --- a/libs/framework/src/celix_launcher.c +++ b/libs/framework/src/celix_launcher.c @@ -24,6 +24,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/stat.h> #ifndef CELIX_NO_CURLINIT #include <curl/curl.h> @@ -45,6 +46,8 @@ static celix_properties_t* celixLauncher_createConfig(const char* configFile, ce static void celixLauncher_printUsage(char* progName); static void celixLauncher_printProperties(celix_properties_t* embeddedProps, const char* configFile); static int celixLauncher_createBundleCache(celix_properties_t* embeddedProperties, const char* configFile); +static celix_status_t celixLauncher_loadConfigProperties(const char* configFile, + celix_properties_t** outConfigProperties); #define DEFAULT_CONFIG_FILE "config.properties" @@ -92,10 +95,6 @@ int celixLauncher_launchWithArgv(int argc, } } - if (configFile == NULL) { - configFile = DEFAULT_CONFIG_FILE; - } - if (embeddedConfig == NULL) { embeddedConfig = celix_properties_create(); } @@ -187,7 +186,7 @@ static void celixLauncher_printUsage(char* progName) { } static void celixLauncher_printProperties(celix_properties_t* embeddedProps, const char* configFile) { - celix_properties_t* keys = celix_properties_create(); // only to store the keys + celix_autoptr(celix_properties_t) keys = celix_properties_create(); // only to store the keys printf("Embedded properties:\n"); if (embeddedProps == NULL || celix_properties_size(embeddedProps) == 0) { @@ -200,14 +199,9 @@ static void celixLauncher_printProperties(celix_properties_t* embeddedProps, con } printf("\n"); - celix_properties_t* runtimeProps = NULL; - if (configFile != NULL) { - celix_status_t status = celix_properties_load2(configFile, 0, &runtimeProps); - if (status != CELIX_SUCCESS) { - celix_err_printErrors(stderr, "Error loading config file.", NULL); - } - } - printf("Runtime properties (input %s):\n", configFile); + celix_autoptr(celix_properties_t) runtimeProps; + (void)celixLauncher_loadConfigProperties(configFile, &runtimeProps); + printf("Runtime properties (input %s):\n", configFile ? configFile : "none"); if (runtimeProps == NULL || celix_properties_size(runtimeProps) == 0) { printf("|- Empty!\n"); } else { @@ -233,15 +227,13 @@ static void celixLauncher_printProperties(celix_properties_t* embeddedProps, con } } printf("\n"); - - if (runtimeProps != NULL) { - celix_properties_destroy(runtimeProps); - } - celix_properties_destroy(keys); } static int celixLauncher_createBundleCache(celix_properties_t* embeddedProperties, const char* configFile) { celix_properties_t* config = celixLauncher_createConfig(configFile, embeddedProperties); + if (!config) { + return CELIX_LAUNCHER_ERROR_EXIT_CODE; + } celix_framework_t* fw = celix_frameworkFactory_createFramework(config); if (!fw) { fprintf(stderr, "Failed to create framework for bundle cache creation\n"); @@ -266,14 +258,37 @@ static celix_properties_t* celixLauncher_createConfig(const char* configFile, ce if (!embeddedProperties) { embeddedProperties = celix_properties_create(); } - - celix_autoptr(celix_properties_t) configProperties = NULL; - celix_status_t status = celix_properties_load2(configFile, 0, &configProperties); + celix_autoptr(celix_properties_t) configProperties; + celix_status_t status = celixLauncher_loadConfigProperties(configFile, &configProperties); if (status != CELIX_SUCCESS) { - fprintf(stderr, "Error loading config file %s\n", configFile); celix_properties_destroy(embeddedProperties); return NULL; } celixLauncher_combineProperties(embeddedProperties, configProperties); return embeddedProperties; } + +/** + * @brief Load the config properties from the given file. + * If configFile is NULL, config properties will only be loaded if DEFAULT_CONFIG_FILE exists. + */ +static celix_status_t celixLauncher_loadConfigProperties(const char* configFile, + celix_properties_t** outConfigProperties) { + celix_properties_t* configProperties = NULL; + bool loadConfig = configFile != NULL; + if (!loadConfig) { + struct stat buffer; + loadConfig = stat(DEFAULT_CONFIG_FILE, &buffer) == 0; + configFile = DEFAULT_CONFIG_FILE; + } + if (loadConfig) { + celix_status_t status = celix_properties_load2(configFile, 0, &configProperties); + if (status != CELIX_SUCCESS) { + celix_err_printErrors(stderr, "Error loading config file: ", NULL); + *outConfigProperties = NULL; + return status; + } + } + *outConfigProperties = configProperties; + return CELIX_SUCCESS; +} diff --git a/libs/utils/gtest/CMakeLists.txt b/libs/utils/gtest/CMakeLists.txt index 0d717e1fa..be04e0a75 100644 --- a/libs/utils/gtest/CMakeLists.txt +++ b/libs/utils/gtest/CMakeLists.txt @@ -56,8 +56,8 @@ if (CELIX_CXX17) endif () ####### generating zip file used for testing ########################################################################## -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/zip_content/top.properties" CONTENT "level=1\n") -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/zip_content/subdir/sub.properties" CONTENT "level=2\n") +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/zip_content/top.properties" CONTENT "{\"level\":1}") +file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/zip_content/subdir/sub.properties" CONTENT "{\"level\":2}") set(TEST_ZIP_FILE "${CMAKE_CURRENT_BINARY_DIR}/test.zip") if(ZIP_COMMAND) add_custom_command(OUTPUT ${TEST_ZIP_FILE} diff --git a/misc/experimental/bundles/config_admin/config_admin_tst/config.properties.in b/misc/experimental/bundles/config_admin/config_admin_tst/config.properties.in index d4db56716..0d3133d7e 100644 --- a/misc/experimental/bundles/config_admin/config_admin_tst/config.properties.in +++ b/misc/experimental/bundles/config_admin/config_admin_tst/config.properties.in @@ -1,20 +1,5 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR=@config_admin_bundle_file@ @example_test_bundle_file@ @example_test2_bundle_file@ -LOGHELPER_ENABLE_STDOUT_FALLBACK=true -CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE=true \ No newline at end of file +{ + "CELIX_FRAMEWORK_FRAMEWORK_CACHE_DIR":"@config_admin_bundle_file@ @example_test_bundle_file@ @example_test2_bundle_file@", + "LOGHELPER_ENABLE_STDOUT_FALLBACK":true, + "CELIX_FRAMEWORK_CLEAN_CACHE_DIR_ON_CREATE":true +} \ No newline at end of file