You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2023/12/30 19:02:44 UTC
(celix) branch feature/509-remove-embedded-bundles-support created (now acedb914)
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a change to branch feature/509-remove-embedded-bundles-support
in repository https://gitbox.apache.org/repos/asf/celix.git
at acedb914 Remove support for embedded bundles
This branch includes the following new commits:
new acedb914 Remove support for embedded bundles
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(celix) 01/01: Remove support for embedded bundles
Posted by pn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/509-remove-embedded-bundles-support
in repository https://gitbox.apache.org/repos/asf/celix.git
commit acedb9140bfee9888088b91c56f952e582f9067c
Author: Pepijn Noltes <pn...@apache.org>
AuthorDate: Sat Dec 30 20:02:22 2023 +0100
Remove support for embedded bundles
---
CHANGES.md | 1 +
cmake/cmake_celix/ContainerPackaging.cmake | 129 +------------------
cmake/cmake_celix/Generic.cmake | 143 ---------------------
cmake/cmake_celix/templates/embed_bundle_apple.s | 27 ----
cmake/cmake_celix/templates/embed_bundle_linux.s | 30 -----
documents/cmake_commands/README.md | 128 ------------------
examples/celix-examples/CMakeLists.txt | 1 -
examples/celix-examples/dm_example/CMakeLists.txt | 2 +-
.../celix-examples/dm_example_cxx/CMakeLists.txt | 2 +-
examples/celix-examples/embedding/CMakeLists.txt | 23 ----
examples/celix-examples/embedding/src/launcher.c | 23 ----
examples/celix-examples/embedding/src/main.c | 39 ------
examples/celix-examples/embedding/src/main.cc | 34 -----
libs/framework/gtest/CMakeLists.txt | 5 -
.../CelixFrameworkUtilsErrorInjectionTestSuite.cc | 29 -----
.../gtest/src/CelixFrameworkUtilsTestSuite.cc | 37 ------
libs/framework/gtest/src/CelixLauncherTestSuite.cc | 13 --
libs/framework/include/celix/FrameworkUtils.h | 43 -------
libs/framework/include/celix_framework_utils.h | 32 -----
libs/framework/src/celix_framework_utils.c | 123 ------------------
libs/framework/src/celix_launcher.c | 106 +++++++--------
21 files changed, 48 insertions(+), 922 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index 1b712a70..80491886 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -53,6 +53,7 @@ limitations under the License.
- C Properties are no longer a direct typedef of `hashmap`.
- celix_string/long_hashmap put functions now return a celix_status_t instead of bool (value replaced).
THe celix_status_t is used to indicate an ENOMEM error.
+- Embedded bundles are no longer supported.
## New Features
diff --git a/cmake/cmake_celix/ContainerPackaging.cmake b/cmake/cmake_celix/ContainerPackaging.cmake
index cb2eecd7..78e799eb 100644
--- a/cmake/cmake_celix/ContainerPackaging.cmake
+++ b/cmake/cmake_celix/ContainerPackaging.cmake
@@ -66,10 +66,6 @@ Optional Arguments:
- C: With this option the generated Celix launcher (if used) will be a C source. Only one of the C or CXX options can
be provided.
Default is CXX
-- FAT: With this option only embedded bundles are allowed to be added to the container. Ensuring a container executable
- this is not dependent on external bundle zip files.
- Note that this option does not change anything to the container, it just ensure that all added bundles are embedded
- bundles.
- USE_CONFIG: With this option the config properties are generated in a 'config.properties' instead of embedded in
the Celix launcher.
- GROUP: If configured the build location will be prefixed the GROUP. Default is empty.
@@ -79,14 +75,8 @@ Optional Arguments:
- BUNDLES: A list of bundles for the Celix container to install and start.
These bundle will be configured for run level 3. See 'celix_container_bundles' for more info.
- INSTALL_BUNDLES: A list of bundles for the Celix container to install (but not start).
-- EMBEDDED_BUNDLES: A list of bundles to embed in the Celix container (inject as binary in the executable) and
- to install and start for the Celix container.
- See `celix_target_embedded_bundle` for more info about embedded bundles.
-- INSTALL_EMBEDDED_BUNDLES: A list of bundles to embed in the Celix container (inject as binary in the executable) and
- to install (but not start) for the Celix container.
- See `celix_target_embedded_bundle` for more info about embedded bundles.
- PROPERTIES: A list of configuration properties, these can be used to configure the Celix framework and/or bundles.
- Normally this will be EMBEDED_PROPERTIES, but if the USE_CONFIG option is used this will be RUNTIME_PROPERTIES.
+ Normally this will be EMBEDDED_PROPERTIES, but if the USE_CONFIG option is used this will be RUNTIME_PROPERTIES.
See the framework library or bundles documentation about the available configuration options.
- EMBEDDED_PROPERTIES: A list of configuration properties which will be used in the generated Celix launcher.
- RUNTIME_PROPERTIES: A list of configuration properties which will be used in the generated config.properties file.
@@ -97,15 +87,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -119,15 +106,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -141,15 +125,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -169,20 +150,6 @@ add_celix_container(simple_container
CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=debug
)
```
-
-```CMake
-#Creates a "fat" Celix container in ${CMAKE_BINARY_DIR}/deploy/simple_fat_container which starts 3 bundles embedded
-#in the container executable.
-add_celix_container(simple_fat_container
- FAT
- EMBEDDED_BUNDLES
- Celix::shell
- Celix::shell_tui
- Celix::log_admin
- PROPERTIES
- CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=debug
-)
-```
]]
function(add_celix_container)
list(GET ARGN 0 CONTAINER_TARGET)
@@ -190,7 +157,7 @@ function(add_celix_container)
set(OPTIONS COPY NO_COPY C CXX FAT USE_CONFIG)
set(ONE_VAL_ARGS GROUP NAME LAUNCHER LAUNCHER_SRC DIR)
- set(MULTI_VAL_ARGS BUNDLES INSTALL_BUNDLES EMBEDDED_BUNDLES INSTALL_EMBEDDED_BUNDLES PROPERTIES EMBEDDED_PROPERTIES RUNTIME_PROPERTIES)
+ set(MULTI_VAL_ARGS BUNDLES INSTALL_BUNDLES PROPERTIES EMBEDDED_PROPERTIES RUNTIME_PROPERTIES)
cmake_parse_arguments(CONTAINER "${OPTIONS}" "${ONE_VAL_ARGS}" "${MULTI_VAL_ARGS}" ${ARGN})
##### Check arguments #####
@@ -370,7 +337,6 @@ $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>,
set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_BUNDLES_LEVEL_6" "") #bundles to deploy for the container for startup level 6
set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_BUNDLES_INSTALL" "") #bundles to install for the container
set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_COPY_BUNDLES" ${CONTAINER_COPY}) #copy bundles in bundle dir or link using abs paths. NOTE this cannot be changed after a add_deploy command
- set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_IS_FAT" ${CONTAINER_FAT}) #Whether this is a fat container, so a container with only embedded bundles.
#deploy specific
set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_NAME" "${CONTAINER_NAME}")
@@ -382,9 +348,7 @@ $<JOIN:$<TARGET_PROPERTY:${CONTAINER_TARGET},CONTAINER_RUNTIME_PROPERTIES>,
#####
celix_container_bundles(${CONTAINER_TARGET} LEVEL 3 ${CONTAINER_BUNDLES})
- celix_container_embedded_bundles(${CONTAINER_TARGET} LEVEL 3 ${CONTAINER_EMBEDDED_BUNDLES})
celix_container_bundles(${CONTAINER_TARGET} INSTALL ${CONTAINER_INSTALL_BUNDLES})
- celix_container_embedded_bundles(${CONTAINER_TARGET} INSTALL ${CONTAINER_INSTALL_EMBEDDED_BUNDLES})
if (CONTAINER_USE_CONFIG)
celix_container_runtime_properties(${CONTAINER_TARGET} ${CONTAINER_PROPERTIES})
else ()
@@ -560,7 +524,6 @@ function(celix_container_bundles)
get_target_property(BUNDLES ${CONTAINER_TARGET} "CONTAINER_BUNDLES_LEVEL_${BUNDLES_LEVEL}")
endif ()
get_target_property(COPY ${CONTAINER_TARGET} "CONTAINER_COPY_BUNDLES")
- get_target_property(IS_FAT ${CONTAINER_TARGET} "CONTAINER_IS_FAT")
if (BUNDLES_COPY)
set(COPY TRUE)
@@ -569,10 +532,6 @@ function(celix_container_bundles)
endif ()
foreach(BUNDLE IN ITEMS ${BUNDLES_LIST})
- if (IS_FAT)
- message(FATAL_ERROR "Cannot add bundle ${BUNDLE} to Celix container ${CONTAINER_TARGET}. ${CONTAINER_TARGET} is configured as a fat container, so only embedded bundles are allowed. Use EMBEDDED_BUNDLES instead of BUNDLES in the add_celix_container CMake command.")
- endif ()
-
if (TARGET ${BUNDLE})
get_target_property(TARGET_TYPE ${BUNDLE} TYPE)
if (TARGET_TYPE STREQUAL "INTERFACE_LIBRARY")
@@ -643,90 +602,6 @@ function(_celix_container_check_duplicate_bundles)
endforeach()
endfunction()
-#[[
-Embed a selection of bundles to the Celix container.
-
-```CMake
-celix_container_embedded_bundles(<celix_container_target_name>
- [LEVEL (0..6)]
- [INSTALL]
- bundle1
- bundle2
- ...
-)
-```
-
-Example:
-```CMake
-celix_container_embedded_bundles(my_container Celix::shell Celix::shell_tui)
-```
-
-The selection of bundles are embedded in the container executable using the
-`celix_target_embedded_bundle` Celix CMake command and are added to the configuration properties so that they are
-installed and started when the Celix container is executed.
-
-See `celix_target_embedded_bundle` for how bundle is embedded in a executable.
-
-The Celix framework supports 7 (0 - 6) run levels. Run levels can be used to control the start and stop order of bundles.
-Bundles in run level 0 are started first and bundles in run level 6 are started last.
-When stopping bundles in run level 6 are stopped first and bundles in run level 0 are stopped last.
-Within a run level the order of configured decides the start order; bundles added earlier are started first.
-
-Optional Arguments:
-- LEVEL: The run level for the added bundles. Default is 3.
-- INSTALL: If this option is present, the bundles will only be installed instead of the default install and start.
- The bundles will be installed after all bundle in LEVEL 0..6 are installed and started.
-]]
-function(celix_container_embedded_bundles)
- #0 is container TARGET
- list(GET ARGN 0 CONTAINER_TARGET)
- list(REMOVE_AT ARGN 0)
-
- set(OPTIONS INSTALL)
- set(ONE_VAL_ARGS LEVEL)
- set(MULTI_VAL_ARGS )
- cmake_parse_arguments(BUNDLES "${OPTIONS}" "${ONE_VAL_ARGS}" "${MULTI_VAL_ARGS}" ${ARGN})
- set(BUNDLES_LIST ${BUNDLES_UNPARSED_ARGUMENTS})
-
- if (NOT DEFINED BUNDLES_LEVEL)
- set(BUNDLES_LEVEL 3)
- endif ()
-
- if (BUNDLES_INSTALL)
- get_target_property(BUNDLES ${CONTAINER_TARGET} "CONTAINER_BUNDLES_INSTALL")
- else () #bundle level 0,1,2,3,4,5 or 6
- get_target_property(BUNDLES ${CONTAINER_TARGET} "CONTAINER_BUNDLES_LEVEL_${BUNDLES_LEVEL}")
- endif ()
-
- foreach(BUNDLE IN ITEMS ${BUNDLES_LIST})
- if (TARGET ${BUNDLE})
- celix_get_bundle_symbolic_name(${BUNDLE} NAME)
- add_celix_bundle_dependencies(${CONTAINER_TARGET} ${BUNDLE})
- elseif (IS_ABSOLUTE ${BUNDLE} AND EXISTS ${BUNDLE})
- get_filename_component(RAW_NAME ${BUNDLE} NAME_WE)
- string(MAKE_C_IDENTIFIER ${RAW_NAME} NAME)
- else()
- message(FATAL_ERROR "Cannot add bundle `${BUNDLE}` to container target ${CONTAINER_TARGET}. Argument is not a path or cmake target")
- endif ()
- celix_target_embedded_bundle(${CONTAINER_TARGET} BUNDLE ${BUNDLE} NAME ${NAME})
- set(BUNDLE_TO_ADD "embedded://${NAME}")
-
- list(FIND BUNDLES ${BUNDLE_TO_ADD} INDEX)
- if (INDEX EQUAL -1) #Note this ignores the same bundle for the same level
- _celix_container_check_duplicate_bundles(${CONTAINER_TARGET} ${BUNDLE_TO_ADD} ${BUNDLES_LEVEL})
- list(APPEND BUNDLES ${BUNDLE_TO_ADD})
- endif ()
- endforeach()
-
-
-
- if (BUNDLES_INSTALL)
- set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_BUNDLES_INSTALL" "${BUNDLES}")
- else () #bundle level 0,1,2,3,4,5 or 6
- set_target_properties(${CONTAINER_TARGET} PROPERTIES "CONTAINER_BUNDLES_LEVEL_${BUNDLES_LEVEL}" "${BUNDLES}")
- endif ()
-endfunction()
-
function(deploy_properties)
celix_container_runtime_properties(${ARGN})
endfunction()
diff --git a/cmake/cmake_celix/Generic.cmake b/cmake/cmake_celix/Generic.cmake
index 1ffb80ea..f2a8782d 100644
--- a/cmake/cmake_celix/Generic.cmake
+++ b/cmake/cmake_celix/Generic.cmake
@@ -48,149 +48,6 @@ function(install_celix_targets)
install_celix_bundle_targets(${ARGN})
endfunction ()
-#[[
-Embeds a Celix bundle into a CMake target.
-
-```CMake
-celix_target_embedded_bundle(<cmake_target>
- BUNDLE <bundle>
- [NAME <name>]
-)
-```
-
-Example:
-```CMake
-celix_target_embedded_bundle(my_executable
- BUNDLE Celix::shell
- NAME celix_shell
-)
-# result in the symbols:
-# - celix_embedded_bundle_celix_shell_start
-# - celix_embedded_bundle_celix_shell_end
-# - celix_embedded_bundles = "embedded://celix_shell"
-# to be added to `my_executable`
-```
-
-The Celix bundle will be embedded into the CMake target between the symbols: `celix_embedded_bundle_${NAME}_start` and
-`celix_embedded_bundle_${NAME}_end`.
-
-Also a `const char * const` symbol with the name `celix_embedded_bundles` will be added or updated containing a `,`
-seperated list of embedded Celix bundle urls. The url will be: `embedded://${NAME}`.
-
-For Linux the linking flag `--export-dynamic` is added to ensure that the previous mentioned symbols can be retrieved
-using `dlsym`.
-
-Mandatory Arguments:
-- BUNDLE: The bundle target or bundle file (absolute path) to embed in the CMake target.
-
-Optional Arguments:
-- NAME: The name to use when embedding the Celix bundle. This name is used in the _start and _end symbol, but also
- for the embedded bundle url.
- For a bundle CMake target the default is the bundle symbolic name and for a bundle file the default is the
- bundle filename without extension. The NAME must be a valid C identifier.
-
-Bundles embedded in an executable can be installed/started using the bundle url: "embedded://${NAME}" in
-combination with `celix_bundleContext_installBundle` (C) or `celix::BundleContext::installBundle` (C++).
-All embedded bundle can be installed using the framework utils function
-`celix_framework_utils_installEmbeddedBundles` (C) or `celix::installEmbeddedBundles` (C++).
-]]
-function(celix_target_embedded_bundle)
- get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
- if (NOT "ASM" IN_LIST LANGUAGES)
- message(FATAL_ERROR "celix_target_embedded_bundle is only supported it the language ASM is enabled."
- " Please add ASM as cmake project language.")
- endif ()
-
- list(GET ARGN 0 TARGET_NAME)
- list(REMOVE_AT ARGN 0)
-
- set(OPTIONS)
- set(ONE_VAL_ARGS BUNDLE NAME)
- set(MULTI_VAL_ARGS)
- cmake_parse_arguments(EMBED_BUNDLE "${OPTIONS}" "${ONE_VAL_ARGS}" "${MULTI_VAL_ARGS}" ${ARGN})
-
- if (NOT EMBED_BUNDLE_BUNDLE)
- message(FATAL_ERROR "Missing required BUNDLE argument")
- endif ()
-
- if (TARGET ${EMBED_BUNDLE_BUNDLE})
- celix_get_bundle_symbolic_name(${EMBED_BUNDLE_BUNDLE} DEFAULT_NAME)
- celix_get_bundle_file(${EMBED_BUNDLE_BUNDLE} EMBED_BUNDLE_FILE)
- add_celix_bundle_dependencies(${TARGET_NAME} ${EMBED_BUNDLE_BUNDLE})
- elseif (IS_ABSOLUTE ${EMBED_BUNDLE_BUNDLE} AND EXISTS ${EMBED_BUNDLE_BUNDLE})
- get_filename_component(RAW_NAME ${EMBED_BUNDLE_BUNDLE} NAME_WE)
- string(MAKE_C_IDENTIFIER ${RAW_NAME} DEFAULT_NAME)
- set(EMBED_BUNDLE_FILE ${EMBED_BUNDLE_BUNDLE})
- else ()
- message(FATAL_ERROR "Cannot embed bundle `${EMBED_BUNDLE_BUNDLE}` to target ${TARGET_NAME}. Argument is not a path or cmake target")
- endif ()
-
- if (NOT EMBED_BUNDLE_NAME)
- set(EMBED_BUNDLE_NAME ${DEFAULT_NAME})
- endif()
-
- string(MAKE_C_IDENTIFIER ${EMBED_BUNDLE_NAME} EMBED_BUNDLE_NAME_CHECK)
- if (NOT EMBED_BUNDLE_NAME STREQUAL EMBED_BUNDLE_NAME_CHECK)
- message(FATAL_ERROR "Cannot embed bundle ${EMBED_BUNDLE_BUNDLE}, because the bundle symbolic name (${EMBED_BUNDLE_NAME}) is not a valid c identifier. Please specify an valid c identifier as embedded bundle name instead.")
- endif ()
-
- if (APPLE)
- set(ASSEMBLY_FILE_IN ${CELIX_CMAKE_DIRECTORY}/templates/embed_bundle_apple.s)
- else ()
- set(ASSEMBLY_FILE_IN ${CELIX_CMAKE_DIRECTORY}/templates/embed_bundle_linux.s)
- endif ()
- set(ASSEMBLY_FILE "${CMAKE_BINARY_DIR}/celix/gen/target/${TARGET_NAME}/embed_bundle_${EMBED_BUNDLE_NAME}.s")
- configure_file(${ASSEMBLY_FILE_IN} ${ASSEMBLY_FILE} @ONLY)
- target_sources(${TARGET_NAME} PRIVATE ${ASSEMBLY_FILE})
-
- get_target_property(CELIX_EMBEDDED_BUNDLES ${TARGET_NAME} "CELIX_EMBEDDED_BUNDLES")
- if (NOT CELIX_EMBEDDED_BUNDLES)
- set(CELIX_EMBEDDED_BUNDLES "embedded://${EMBED_BUNDLE_NAME}")
-
- #If executable also add symbol with a ; seperated list of embedded bundles urls
- get_target_property(TYPE ${TARGET_NAME} TYPE)
- if (TYPE STREQUAL "EXECUTABLE")
- set(C_FILE "${CMAKE_BINARY_DIR}/celix/gen/target/${TARGET_NAME}/celix_embedded_bundles.c")
- file(GENERATE OUTPUT ${C_FILE}.stage1 CONTENT "const char * const celix_embedded_bundles = \"$<JOIN:$<TARGET_PROPERTY:${TARGET_NAME},CELIX_EMBEDDED_BUNDLES>,$<COMMA>>\";")
- file(GENERATE OUTPUT ${C_FILE} INPUT ${C_FILE}.stage1)
- target_sources(${TARGET_NAME} PRIVATE ${C_FILE})
- endif ()
-
- if (NOT APPLE)
- #For linux ensure the --export-dynamic linking flag is added to that symbols in the main program can be found with dlsym.
- target_link_libraries(${TARGET_NAME} PRIVATE -Wl,--export-dynamic)
- endif ()
- else()
- list(APPEND CELIX_EMBEDDED_BUNDLES "embedded://${EMBED_BUNDLE_NAME}")
- endif()
- list(REMOVE_DUPLICATES CELIX_EMBEDDED_BUNDLES)
- set_target_properties(${TARGET_NAME} PROPERTIES "CELIX_EMBEDDED_BUNDLES" "${CELIX_EMBEDDED_BUNDLES}")
-endfunction()
-
-#[[
-Embed multiple Celix bundles into a CMake target.
-
-```CMake
-celix_target_embedded_bundles(<cmake_target> [<bundle1> <bundle2> ...])
-```
-
-Example:
-```CMake
-celix_target_embedded_bundles(my_executable Celix::shell Celix::shell_tui)
-```
-
-The bundles will be embedded using their symbolic name if the bundle is a CMake target or their filename (without
-extension) if the bundle is a file (absolute path).
-]]
-function(celix_target_embedded_bundles)
- list(GET ARGN 0 TARGET_NAME)
- list(REMOVE_AT ARGN 0)
-
- foreach (BUNDLE IN LISTS ARGN)
- celix_target_embedded_bundle(${TARGET_NAME} BUNDLE ${BUNDLE})
- endforeach ()
-endfunction()
-
#[[
Add a compile-definition with a set of comma seperated bundles paths to a target and also adds the bundles as
dependency to the target.
diff --git a/cmake/cmake_celix/templates/embed_bundle_apple.s b/cmake/cmake_celix/templates/embed_bundle_apple.s
deleted file mode 100644
index 613cf97b..00000000
--- a/cmake/cmake_celix/templates/embed_bundle_apple.s
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-
-.global _celix_embedded_bundle_@EMBED_BUNDLE_NAME@_start
-.global _celix_embedded_bundle_@EMBED_BUNDLE_NAME@_end
-.balign 64
-_celix_embedded_bundle_@EMBED_BUNDLE_NAME@_start:
-.incbin "@EMBED_BUNDLE_FILE@"
-.balign 64
-_celix_embedded_bundle_@EMBED_BUNDLE_NAME@_end:
-.byte 0
diff --git a/cmake/cmake_celix/templates/embed_bundle_linux.s b/cmake/cmake_celix/templates/embed_bundle_linux.s
deleted file mode 100644
index 2750a6e2..00000000
--- a/cmake/cmake_celix/templates/embed_bundle_linux.s
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-.section .rodata
-.global celix_embedded_bundle_@EMBED_BUNDLE_NAME@_start
-.global celix_embedded_bundle_@EMBED_BUNDLE_NAME@_end
-.section .rodata
-.balign 64
-celix_embedded_bundle_@EMBED_BUNDLE_NAME@_start:
-.incbin "@EMBED_BUNDLE_FILE@"
-.balign 64
-celix_embedded_bundle_@EMBED_BUNDLE_NAME@_end:
-.byte 0
-.section .note.GNU-stack,"",%progbits
diff --git a/documents/cmake_commands/README.md b/documents/cmake_commands/README.md
index 140bc1a4..4cc99d66 100644
--- a/documents/cmake_commands/README.md
+++ b/documents/cmake_commands/README.md
@@ -361,10 +361,6 @@ Optional Arguments:
- C: With this option the generated Celix launcher (if used) will be a C source. Only one of the C or CXX options can
be provided.
Default is CXX
-- FAT: With this option only embedded bundles are allowed to be added to the container. Ensuring a container executable
- this is not dependent on external bundle zip files.
- Note that this option does not change anything to the container, it just ensure that all added bundles are embedded
- bundles.
- USE_CONFIG: With this option the config properties are generated in a 'config.properties' instead of embedded in
the Celix launcher.
- GROUP: If configured the build location will be prefixed the GROUP. Default is empty.
@@ -374,12 +370,6 @@ Optional Arguments:
- BUNDLES: A list of bundles for the Celix container to install and start.
These bundle will be configured for run level 3. See 'celix_container_bundles' for more info.
- INSTALL_BUNDLES: A list of bundles for the Celix container to install (but not start).
-- EMBEDDED_BUNDLES: A list of bundles to embed in the Celix container (inject as binary in the executable) and
- to install and start for the Celix container.
- See `celix_target_embedded_bundle` for more info about embedded bundles.
-- INSTALL_EMBEDDED_BUNDLES: A list of bundles to embed in the Celix container (inject as binary in the executable) and
- to install (but not start) for the Celix container.
- See `celix_target_embedded_bundle` for more info about embedded bundles.
- PROPERTIES: A list of configuration properties, these can be used to configure the Celix framework and/or bundles.
Normally this will be EMBEDED_PROPERTIES, but if the USE_CONFIG option is used this will be RUNTIME_PROPERTIES.
See the framework library or bundles documentation about the available configuration options.
@@ -392,15 +382,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -414,15 +401,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -436,15 +420,12 @@ add_celix_container(<celix_container_name>
[NO_COPY]
[CXX]
[C]
- [FAT]
[USE_CONFIG]
[GROUP group_name]
[NAME celix_container_name]
[DIR dir]
[BUNDLES <bundle1> <bundle2> ...]
[INSTALL_BUNDLES <bundle1> <bundle2> ...]
- [EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
- [INSTALL_EMBEDDED_BUNDLES <bundle1> <bundle2> ...]
[PROPERTIES "prop1=val1" "prop2=val2" ...]
[EMBEDDED_PROPERTIES "prop1=val1" "prop2=val2" ...]
[RUNTIME_PROPERTIES "prop1=val1" "prop2=val2" ...]
@@ -465,20 +446,6 @@ add_celix_container(simple_container
)
```
-```CMake
-#Creates a "fat" Celix container in ${CMAKE_BINARY_DIR}/deploy/simple_fat_container which starts 3 bundles embedded
-#in the container executable.
-add_celix_container(simple_fat_container
- FAT
- EMBEDDED_BUNDLES
- Celix::shell
- Celix::shell_tui
- Celix::log_admin
- PROPERTIES
- CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=debug
- )
-```
-
## celix_container_bundles
Add a selection of bundles to the Celix container.
@@ -516,40 +483,6 @@ Optional Arguments:
- NO_COPY: If this option is present, the install/start bundles will be configured using a absolute path to the
bundle. This option overrides optional COPY option used in the add_celix_container call.
-## celix_container_embedded_bundles
-Embed a selection of bundles to the Celix container.
-
-```CMake
-celix_container_embedded_bundles(<celix_container_target_name>
- [LEVEL (0..6)]
- [INSTALL]
- bundle1
- bundle2
- ...
-)
-```
-
-Example:
-```CMake
-celix_container_embedded_bundles(my_container Celix::shell Celix::shell_tui)
-```
-
-The selection of bundles are embedded in the container executable using the
-`celix_target_embedded_bundle` Celix CMake command and are added to the configuration properties so that they are
-installed and started when the Celix container is executed.
-
-See `celix_target_embedded_bundle` for how bundle is embedded in a executable.
-
-The Celix framework supports 7 (0 - 6) run levels. Run levels can be used to control the start and stop order of bundles.
-Bundles in run level 0 are started first and bundles in run level 6 are started last.
-When stopping bundles in run level 6 are stopped first and bundles in run level 0 are stopped last.
-Within a run level the order of configured decides the start order; bundles added earlier are started first.
-
-Optional Arguments:
-- LEVEL: The run level for the added bundles. Default is 3.
-- INSTALL: If this option is present, the bundles will only be installed instead of the default install and start.
- The bundles will be installed after all bundle in LEVEL 0..6 are installed and started.
-
## celix_container_properties
Add the provided properties to the target Celix container config properties.
If the USE_CONFIG option is used these configuration properties will be added to the 'config.properties' file else they
@@ -607,67 +540,6 @@ add_celix_bundle_dependencies(<cmake_target>
add_celix_bundle_dependencies(my_exec my_bundle1 my_bundle2)
```
-## celix_target_embedded_bundle
-Embeds a Celix bundle into a CMake target.
-
-```CMake
-celix_target_embedded_bundle(<cmake_target>
- BUNDLE <bundle>
- [NAME <name>]
- )
-```
-
-Example:
-```CMake
-celix_target_embedded_bundle(my_executable
- BUNDLE Celix::shell
- NAME celix_shell
- )
-# result in the symbols:
-# - celix_embedded_bundle_celix_shell_start
-# - celix_embedded_bundle_celix_shell_end
-# - celix_embedded_bundles = "embedded://celix_shell"
-# to be added to `my_executable`
-```
-
-The Celix bundle will be embedded into the CMake target between the symbols: `celix_embedded_bundle_${NAME}_start` and
-`celix_embedded_bundle_${NAME}_end`.
-
-Also a `const char * const` symbol with the name `celix_embedded_bundles` will be added or updated containing a `,`
-seperated list of embedded Celix bundle urls. The url will be: `embedded://${NAME}`.
-
-For Linux the linking flag `--export-dynamic` is added to ensure that the previous mentioned symbols can be retrieved
-using `dlsym`.
-
-Mandatory Arguments:
-- BUNDLE: The bundle target or bundle file (absolute path) to embed in the CMake target.
-
-Optional Arguments:
-- NAME: The name to use when embedding the Celix bundle. This name is used in the _start and _end symbol, but also
- for the embedded bundle url.
- For a bundle CMake target the default is the bundle symbolic name and for a bundle file the default is the
- bundle filename without extension. The NAME must be a valid C identifier.
-
-Bundles embedded in an executable can be installed/started using the bundle url: "embedded://${NAME}" in
-combination with `celix_bundleContext_installBundle` (C) or `celix::BundleContext::installBundle` (C++).
-All embedded bundle can be installed using the framework utils function
-`celix_framework_utils_installEmbeddedBundles` (C) or `celix::installEmbeddedBundles` (C++).
-
-## celix_target_embedded_bundles
-Embed multiple Celix bundles into a CMake target.
-
-```CMake
-celix_target_embedded_bundles(<cmake_target> [<bundle1> <bundle2> ...])
-```
-
-Example:
-```CMake
-celix_target_embedded_bundles(my_executable Celix::shell Celix::shell_tui)
-```
-
-The bundles will be embedded using their symbolic name if the bundle is a CMake target or their filename (without
-extension) if the bundle is a file (absolute path).
-
## celix_target_bundle_set_definition
Add a compile-definition with a set of comma seperated bundles paths to a target and also adds the bundles as
dependency to the target.
diff --git a/examples/celix-examples/CMakeLists.txt b/examples/celix-examples/CMakeLists.txt
index 29e4b49d..034064fa 100644
--- a/examples/celix-examples/CMakeLists.txt
+++ b/examples/celix-examples/CMakeLists.txt
@@ -41,7 +41,6 @@ if (EXAMPLES)
endif ()
add_subdirectory(http_example)
- add_subdirectory(embedding)
add_subdirectory(track_tracker_example)
add_subdirectory(log_service_example)
add_subdirectory(bundle_with_private_lib)
diff --git a/examples/celix-examples/dm_example/CMakeLists.txt b/examples/celix-examples/dm_example/CMakeLists.txt
index 27334c11..44f19afa 100644
--- a/examples/celix-examples/dm_example/CMakeLists.txt
+++ b/examples/celix-examples/dm_example/CMakeLists.txt
@@ -38,4 +38,4 @@ add_celix_container(dm_example
PROP2=val2
PROP3=val3
)
-celix_target_embedded_bundles(dm_example Celix::shell)
+
diff --git a/examples/celix-examples/dm_example_cxx/CMakeLists.txt b/examples/celix-examples/dm_example_cxx/CMakeLists.txt
index a2bf029f..0e6a21d8 100644
--- a/examples/celix-examples/dm_example_cxx/CMakeLists.txt
+++ b/examples/celix-examples/dm_example_cxx/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(phase3_locking)
add_celix_container(dm_example_cxx
FAT
GROUP cxx_examples
- EMBEDDED_BUNDLES
+ BUNDLES
Celix::ShellCxx
Celix::shell_tui
diff --git a/examples/celix-examples/embedding/CMakeLists.txt b/examples/celix-examples/embedding/CMakeLists.txt
deleted file mode 100644
index 641600d3..00000000
--- a/examples/celix-examples/embedding/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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.
-
-add_executable(create_framework_in_c src/main.c)
-target_link_libraries(create_framework_in_c PRIVATE Celix::framework)
-
-add_executable(embedding src/main.c)
-target_link_libraries(embedding PRIVATE Celix::framework )
-celix_target_embedded_bundles(embedding Celix::shell Celix::shell_tui)
\ No newline at end of file
diff --git a/examples/celix-examples/embedding/src/launcher.c b/examples/celix-examples/embedding/src/launcher.c
deleted file mode 100644
index 4e065c6d..00000000
--- a/examples/celix-examples/embedding/src/launcher.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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.
- */
-
-#include <celix_launcher.h>
-int main(int argc, char** argv) {
- return celixLauncher_launchAndWaitForShutdown(argc, argv, NULL);
-}
diff --git a/examples/celix-examples/embedding/src/main.c b/examples/celix-examples/embedding/src/main.c
deleted file mode 100644
index 8997045a..00000000
--- a/examples/celix-examples/embedding/src/main.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.
- */
-
-#include <celix_framework_factory.h>
-#include <celix_bundle_context.h>
-
-int main() {
- //create framework properties
- celix_properties_t* properties = celix_properties_create();
- celix_properties_set(properties, "CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL", "debug");
- celix_properties_set(properties, "CELIX_BUNDLES_PATH", "bundles;/opt/alternative/bundles");
-
- //create framework
- celix_framework_t* fw = celix_frameworkFactory_createFramework(properties);
-
- //get framework bundle context and log hello
- celix_bundle_context_t* fwContext = celix_framework_getFrameworkContext(fw);
- celix_bundleContext_log(fwContext, CELIX_LOG_LEVEL_INFO, "Hello from framework bundle context");
- celix_bundleContext_installBundle(fwContext, "FooBundle.zip", true);
-
- //destroy framework
- celix_frameworkFactory_destroyFramework(fw);
-}
diff --git a/examples/celix-examples/embedding/src/main.cc b/examples/celix-examples/embedding/src/main.cc
deleted file mode 100644
index f01864ab..00000000
--- a/examples/celix-examples/embedding/src/main.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- */
-
-#include <celix/FrameworkFactory.h>
-int main() {
- //create framework properties
- celix::Properties properties{};
- properties.set("CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL", "debug");
- properties.set("CELIX_BUNDLES_PATH", "bundles;/opt/alternative/bundles");
-
- //create framework
- std::shared_ptr<celix::Framework> fw = celix::createFramework(properties);
-
- //get framework bundle context and log hello
- std::shared_ptr<celix::BundleContext> ctx = fw->getFrameworkBundleContext();
- ctx->installBundle("FooBundle.zip");
- ctx->logInfo("Hello from framework bundle context");
-}
diff --git a/libs/framework/gtest/CMakeLists.txt b/libs/framework/gtest/CMakeLists.txt
index 88debbbd..9eca0896 100644
--- a/libs/framework/gtest/CMakeLists.txt
+++ b/libs/framework/gtest/CMakeLists.txt
@@ -67,10 +67,6 @@ add_executable(test_framework ${CELIX_FRAMEWORK_TEST_SOURCES})
target_link_libraries(test_framework PRIVATE framework_cut GTest::gtest GTest::gtest_main)
celix_deprecated_framework_headers(test_framework)
-
-#embed bundle in the test_framework executable
-celix_target_embedded_bundles(test_framework simple_test_bundle1 simple_test_bundle2)
-
#Create bundle set definitions
celix_target_bundle_set_definition(test_framework NAME BUNDLE_EMPTY_TEST_SET)
celix_target_bundle_set_definition(test_framework NAME BUNDLE_TEST_SET
@@ -150,7 +146,6 @@ if (EI_TESTS)
SIMPLE_CXX_BUNDLE_LOC="${SIMPLE_CXX_BUNDLE_LOC}"
)
add_celix_bundle_dependencies(test_framework_with_ei simple_test_bundle1 simple_cxx_bundle)
- celix_target_embedded_bundles(test_framework_with_ei simple_test_bundle1)
celix_deprecated_utils_headers(test_framework_with_ei)
target_link_libraries(test_framework_with_ei PRIVATE
framework_cut
diff --git a/libs/framework/gtest/src/CelixFrameworkUtilsErrorInjectionTestSuite.cc b/libs/framework/gtest/src/CelixFrameworkUtilsErrorInjectionTestSuite.cc
index d485c06f..23c82d18 100644
--- a/libs/framework/gtest/src/CelixFrameworkUtilsErrorInjectionTestSuite.cc
+++ b/libs/framework/gtest/src/CelixFrameworkUtilsErrorInjectionTestSuite.cc
@@ -57,22 +57,6 @@ public:
std::shared_ptr<celix::Framework> framework{};
};
-TEST_F(CelixFrameworkUtilsErrorInjectionTestSuite, testExtractEmbeddedBundle) {
- const char* testExtractDir = "extractEmbeddedBundleTestDir";
- celix_utils_deleteDirectory(testExtractDir, nullptr);
-
- celix_ei_expect_celix_utils_extractZipData(CELIX_EI_UNKNOWN_CALLER, 0, CELIX_BUNDLE_EXCEPTION);
- auto status = celix_framework_utils_extractBundle(framework->getCFramework(), "embedded://simple_test_bundle1", testExtractDir);
- EXPECT_EQ(status, CELIX_BUNDLE_EXCEPTION);
- celix_utils_deleteDirectory(testExtractDir, nullptr);
-
- celix_ei_expect_dlopen(CELIX_EI_UNKNOWN_CALLER, 0, nullptr, 2);
- celix_ei_expect_dlerror(CELIX_EI_UNKNOWN_CALLER, 0, (char *)"Inject dl error");
- status = celix_framework_utils_extractBundle(framework->getCFramework(), "embedded://simple_test_bundle1", testExtractDir);
- EXPECT_EQ(status, CELIX_FRAMEWORK_EXCEPTION);
- celix_utils_deleteDirectory(testExtractDir, nullptr);
-}
-
TEST_F(CelixFrameworkUtilsErrorInjectionTestSuite, testExtractFileBundle) {
const char* testExtractDir = "extractFileBundleTestDir";
celix_utils_deleteDirectory(testExtractDir, nullptr);
@@ -126,17 +110,4 @@ TEST_F(CelixFrameworkUtilsErrorInjectionTestSuite, testIsBundleUrlValid) {
celix_ei_expect_celix_utils_strdup(CELIX_EI_UNKNOWN_CALLER, 0, nullptr);
auto valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "non-existing.zip", false);
EXPECT_FALSE(valid);
-
- celix_ei_expect_dlopen(CELIX_EI_UNKNOWN_CALLER, 0, nullptr);
- celix_ei_expect_dlerror(CELIX_EI_UNKNOWN_CALLER, 0, (char *)"Inject dl error");
- valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "embedded://simple_test_bundle1", false);
- EXPECT_FALSE(valid);
-
- celix_ei_expect_asprintf(CELIX_EI_UNKNOWN_CALLER, 0, -1);
- valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "embedded://simple_test_bundle1", false);
- EXPECT_FALSE(valid);
-
- celix_ei_expect_asprintf(CELIX_EI_UNKNOWN_CALLER, 0, -1, 2);
- valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "embedded://simple_test_bundle1", false);
- EXPECT_FALSE(valid);
}
diff --git a/libs/framework/gtest/src/CelixFrameworkUtilsTestSuite.cc b/libs/framework/gtest/src/CelixFrameworkUtilsTestSuite.cc
index 2dbecd80..1aeea673 100644
--- a/libs/framework/gtest/src/CelixFrameworkUtilsTestSuite.cc
+++ b/libs/framework/gtest/src/CelixFrameworkUtilsTestSuite.cc
@@ -62,18 +62,12 @@ TEST_F(CelixFrameworkUtilsTestSuite, IsBundleUrlValidTest) {
valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "file://non-existing.zip", false);
EXPECT_FALSE(valid);
- valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "embedded://non_existing", false);
- EXPECT_FALSE(valid);
-
valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), SIMPLE_TEST_BUNDLE1_LOCATION, false);
EXPECT_TRUE(valid);
auto url = std::string{"file://"} + SIMPLE_TEST_BUNDLE1_LOCATION;
valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), url.c_str(), false);
EXPECT_TRUE(valid);
-
- valid = celix_framework_utils_isBundleUrlValid(framework->getCFramework(), "embedded://simple_test_bundle1", false);
- EXPECT_TRUE(valid);
}
TEST_F(CelixFrameworkUtilsTestSuite, ExtractBundlePathTest) {
@@ -138,43 +132,12 @@ TEST_F(CelixFrameworkUtilsTestSuite, ExtractUncompressedBundleTest) {
unlink(testLinkDir);
}
-TEST_F(CelixFrameworkUtilsTestSuite, ExtractEmbeddedBundleTest) {
- const char* testExtractDir = "extractEmbeddedBundleTestDir";
- celix_utils_deleteDirectory(testExtractDir, nullptr);
-
- //invalid bundle symbol -> no extraction
- auto status = celix_framework_utils_extractBundle(framework->getCFramework(), "embedded://nonexisting", testExtractDir);
- EXPECT_NE(status, CELIX_SUCCESS);
-
- //valid bundle path -> extraction
- status = celix_framework_utils_extractBundle(framework->getCFramework(), "embedded://simple_test_bundle1", testExtractDir);
- EXPECT_EQ(status, CELIX_SUCCESS);
- checkBundleCacheDir(testExtractDir);
- celix_utils_deleteDirectory(testExtractDir, nullptr);
-}
-
TEST_F(CelixFrameworkUtilsTestSuite, CheckBundleAgeTest) {
struct timespec now = {0, 0};
EXPECT_TRUE(celix_framework_utils_isBundleUrlNewerThan(framework->getCFramework(), SIMPLE_TEST_BUNDLE1_LOCATION, &now));
EXPECT_TRUE(celix_framework_utils_isBundleUrlNewerThan(framework->getCFramework(), SIMPLE_TEST_BUNDLE1_LOCATION, nullptr));
}
-TEST_F(CelixFrameworkUtilsTestSuite, testListEmbeddedBundles) {
- auto list = celix::listEmbeddedBundles();
- ASSERT_EQ(2, list.size());
- EXPECT_EQ("embedded://simple_test_bundle1", list[0]);
- EXPECT_EQ("embedded://simple_test_bundle2", list[1]);
-}
-
-TEST_F(CelixFrameworkUtilsTestSuite, InstallEmbeddedBundlesTest) {
- auto ids = framework->getFrameworkBundleContext()->listBundleIds();
- EXPECT_EQ(0, ids.size());
-
- celix::installEmbeddedBundles(*framework, true);
- ids = framework->getFrameworkBundleContext()->listBundleIds();
- EXPECT_EQ(2, ids.size());
-}
-
TEST_F(CelixFrameworkUtilsTestSuite, InstallBundleSetTest) {
auto ids = framework->getFrameworkBundleContext()->listBundleIds();
EXPECT_EQ(0, ids.size());
diff --git a/libs/framework/gtest/src/CelixLauncherTestSuite.cc b/libs/framework/gtest/src/CelixLauncherTestSuite.cc
index f7b22388..b3a79890 100644
--- a/libs/framework/gtest/src/CelixLauncherTestSuite.cc
+++ b/libs/framework/gtest/src/CelixLauncherTestSuite.cc
@@ -63,19 +63,6 @@ TEST_F(CelixLauncherTestSuite, PrintHelpTest) {
free(arg2);
}
-TEST_F(CelixLauncherTestSuite, PrintEmbeddedBundlesTest) {
- //When I run the celixLauncher with "--embedded_bundles" argument
- char* arg1 = celix_utils_strdup("programName");
- char* arg2 = celix_utils_strdup("--embedded_bundles");
- char* argv[] = {arg1, arg2};
- int rc = celixLauncher_launchAndWaitForShutdown(2, argv, nullptr);
-
- //Then it will print the embedded bundles and exit with 0
- EXPECT_EQ(rc, 0);
- free(arg1);
- free(arg2);
-}
-
TEST_F(CelixLauncherTestSuite, ExtractBundlesTest) {
//launch framework with bundle configured to start
//Given a properties set with 2 bundles configured for start
diff --git a/libs/framework/include/celix/FrameworkUtils.h b/libs/framework/include/celix/FrameworkUtils.h
index d90c4b09..f0ea77e3 100644
--- a/libs/framework/include/celix/FrameworkUtils.h
+++ b/libs/framework/include/celix/FrameworkUtils.h
@@ -26,49 +26,6 @@
namespace celix {
- /**
- * @brief List the embedded bundles in the executable.
- *
- * This function will check if there are embedded bundles in the executable / program by trying to lookup
- * the symbol `celix_embedded_bundles`.
- *
- * If present the `celix_embedded_bundles` should be a point to a const char* containing a `,` seperated list of
- * embedded bundle urls. For example:
- * \code
- * const char * const celix_embedded_bundles = "embedded://bundle1,embedded://bundle2";
- * \endcode
- *
- * @return A vector of embedded bundle urls.
- */
- inline std::vector<std::string> listEmbeddedBundles() {
- std::vector<std::string> list{};
- auto* cList = celix_framework_utils_listEmbeddedBundles();
- list.reserve(celix_arrayList_size(cList));
- for (int i = 0; i< celix_arrayList_size(cList); ++i) {
- auto* cStr = static_cast<char*>(celix_arrayList_get(cList, i));
- std::unique_ptr<char, void(*)(void*)> strGuard{cStr, free}; //ensure RAII if emplace_back throws
- list.emplace_back(cStr);
- }
- celix_arrayList_destroy(cList);
- return list;
- }
-
- /**
- * @brief Install the embedded bundles in the executable.
- *
- * Bundles will be installed in the order they appear in the return of
- * `celix_framework_utils_listEmbeddedBundles`.
- *
- * If autStart is true, all embedded bundles will be installed first and then started in the same order.
- *
- * @param fw The Celix framework used to install the bundles.
- * @param autoStart Whether to also start the installed bundles.
- * @return The number of installed bundles.
- */
- inline std::size_t installEmbeddedBundles(celix::Framework& framework, bool autoStart = true) {
- return celix_framework_utils_installEmbeddedBundles(framework.getCFramework(), autoStart);
- }
-
/**
* @brief Install bundles to the provided framework using the provided bundle set.
*
diff --git a/libs/framework/include/celix_framework_utils.h b/libs/framework/include/celix_framework_utils.h
index fede40c5..01760591 100644
--- a/libs/framework/include/celix_framework_utils.h
+++ b/libs/framework/include/celix_framework_utils.h
@@ -28,38 +28,6 @@
extern "C" {
#endif
-/**
- * @brief List the embedded bundles in the executable.
- *
- * This function will check if there are embedded bundles in the executable / program by trying to lookup
- * the symbol `celix_embedded_bundles`.
- *
- * If present the `celix_embedded_bundles` should be a point to a const char* containing a `,` seperated list of
- * embedded bundle urls. For example:
- * \code
- * const char * const celix_embedded_bundles = "embedded://bundle1,embedded://bundle2";
- * \endcode
- *
- * @return A list of embedded bundle urls (char*). Caller is owner of the array list and the char* in the list.
- * This function will always return w new array list. If no embedded bundles are found the size of the array
- * list will be 0.
- */
-CELIX_FRAMEWORK_EXPORT celix_array_list_t* celix_framework_utils_listEmbeddedBundles();
-
-/**
- * @brief Install the embedded bundles in the executable.
- *
- * Bundles will be installed in the order they appear in the return of
- * `celix_framework_utils_listEmbeddedBundles`.
- *
- * If autStart is true, all embedded bundles will be installed first and then started in the same order.
- *
- * @param fw The Celix framework used to install the bundles.
- * @param autoStart Whether to also start the installed bundles.
- * @return The number of installed bundles.
- */
-CELIX_FRAMEWORK_EXPORT size_t celix_framework_utils_installEmbeddedBundles(celix_framework_t* fw, bool autoStart);
-
/**
* @brief Install bundles to the provided framework using the provided bundle set.
*
diff --git a/libs/framework/src/celix_framework_utils.c b/libs/framework/src/celix_framework_utils.c
index a8489bb0..c4961406 100644
--- a/libs/framework/src/celix_framework_utils.c
+++ b/libs/framework/src/celix_framework_utils.c
@@ -38,11 +38,6 @@
#include "framework_private.h"
#define FILE_URL_SCHEME "file://"
-#define EMBEDDED_URL_SCHEME "embedded://"
-static const char * const EMBEDDED_BUNDLES_SYMBOL = "celix_embedded_bundles";
-static const char * const EMBEDDED_BUNDLE_PREFIX = "celix_embedded_bundle_";
-static const char * const EMBEDDED_BUNDLE_START_POSTFIX = "_start";
-static const char * const EMBEDDED_BUNDLE_END_POSTFIX = "_end";
#define FW_LOG(level, ...) do { \
if (fw) { \
@@ -99,59 +94,6 @@ error_out:
return result;
}
-static celix_status_t celix_framework_utils_locateEmbeddedBundle(celix_framework_t *fw, const char* bundleURL, void **start, void **end, bool silent) {
- const char *errStr = NULL;
- celix_status_t status = CELIX_SUCCESS;
- char* startSymbol = NULL;
- char* endSymbol = NULL;
- void* prog = NULL;
- size_t offset = sizeof(EMBEDDED_URL_SCHEME)-1; //offset to remove the EMBEDDED_URL_SCHEME part.
- if(asprintf(&startSymbol, "%s%s%s", EMBEDDED_BUNDLE_PREFIX, bundleURL+offset, EMBEDDED_BUNDLE_START_POSTFIX) == -1) {
- status = CELIX_ERROR_MAKE(CELIX_FACILITY_CERRNO,errno);
- errStr = strerror(errno);
- goto start_asprintf_error;
- }
- if(asprintf(&endSymbol, "%s%s%s", EMBEDDED_BUNDLE_PREFIX, bundleURL+offset, EMBEDDED_BUNDLE_END_POSTFIX) == -1) {
- status = CELIX_ERROR_MAKE(CELIX_FACILITY_CERRNO,errno);
- errStr = strerror(errno);
- goto end_asprintf_error;
- }
-
- prog = dlopen(NULL, RTLD_NOW);
- if (prog == NULL) {
- status = CELIX_FRAMEWORK_EXCEPTION;
- errStr = dlerror();
- goto dlopen_error;
- }
- void *_start = dlsym(prog, startSymbol);
- void *_end = dlsym(prog, endSymbol);
-
- if (_start == NULL || _end == NULL) {
- status = CELIX_ILLEGAL_ARGUMENT;
- errStr = dlerror();
- goto missing_symbol;
- }
- if (start != NULL) {
- *start = _start;
- }
- if (end != NULL) {
- *end = _end;
- }
-missing_symbol:
-dlopen_error:
- free(endSymbol);
-end_asprintf_error:
- free(startSymbol);
-start_asprintf_error:
- if (!silent) {
- framework_logIfError(fw->logger, status, errStr, "Failed to locate embedded bundle symbols for bundle '%s'.", bundleURL);
- }
- if (prog) {
- dlclose(prog); // dlclose() will invalidate previous `errStr = dlerror()`
- }
- return status;
-}
-
static bool celix_framework_utils_isBundlePathNewerThan(celix_framework_t *fw, const char* bundlePath, const struct timespec* time) {
struct timespec bundleModTime;
char pathBuffer[CELIX_DEFAULT_STRING_CREATE_BUFFER_SIZE];
@@ -174,11 +116,8 @@ bool celix_framework_utils_isBundleUrlNewerThan(celix_framework_t* fw, const cha
char* trimmedUrl = celix_utils_trim(bundleURL);
bool newer;
size_t fileSchemeLen = sizeof(FILE_URL_SCHEME)-1;
- size_t embeddedSchemeLen = sizeof(EMBEDDED_URL_SCHEME)-1;
if (strncasecmp(FILE_URL_SCHEME, trimmedUrl, fileSchemeLen) == 0) {
newer = celix_framework_utils_isBundlePathNewerThan(fw, trimmedUrl + fileSchemeLen, time); //skip the file:// part
- } else if (strncasecmp(EMBEDDED_URL_SCHEME, trimmedUrl, embeddedSchemeLen) == 0) {
- newer = true; //for now embedded zip always considered newer
} else {
newer = celix_framework_utils_isBundlePathNewerThan(fw, trimmedUrl, time);
}
@@ -219,21 +158,6 @@ static celix_status_t celix_framework_utils_extractBundlePath(celix_framework_t
return status;
}
-static celix_status_t celix_framework_utils_extractBundleEmbedded(celix_framework_t *fw, const char* embeddedBundle, const char* extractPath) {
- FW_LOG(CELIX_LOG_LEVEL_TRACE, "Extracting embedded bundle `%s` to dir `%s`", embeddedBundle, extractPath);
- void *start = NULL;
- void *end = NULL;
- const char* err = NULL;
-
- celix_status_t status = celix_framework_utils_locateEmbeddedBundle(fw, embeddedBundle, &start, &end, true);
- status = CELIX_DO_IF(status, celix_utils_extractZipData(start, end-start, extractPath, &err));
- if (status == CELIX_SUCCESS) {
- FW_LOG(CELIX_LOG_LEVEL_TRACE, "Embedded bundle zip `%s` extracted to `%s`", embeddedBundle, extractPath);
- }
- framework_logIfError(fw->logger, status, err, "Could not extract embedded bundle zip `%s` to `%s`", embeddedBundle, extractPath);
- return status;
-}
-
celix_status_t celix_framework_utils_extractBundle(celix_framework_t *fw, const char *bundleURL, const char* extractPath) {
if (!celix_framework_utils_isBundleUrlValid(fw, bundleURL, false)) {
return CELIX_ILLEGAL_ARGUMENT;
@@ -242,11 +166,8 @@ celix_status_t celix_framework_utils_extractBundle(celix_framework_t *fw, const
celix_status_t status;
size_t fileSchemeLen = sizeof(FILE_URL_SCHEME)-1;
- size_t embeddedSchemeLen = sizeof(EMBEDDED_URL_SCHEME)-1;
if (strncasecmp(FILE_URL_SCHEME, trimmedUrl, fileSchemeLen) == 0) {
status = celix_framework_utils_extractBundlePath(fw, trimmedUrl + fileSchemeLen, extractPath);
- } else if (strncasecmp(EMBEDDED_URL_SCHEME, trimmedUrl, embeddedSchemeLen) == 0) {
- status = celix_framework_utils_extractBundleEmbedded(fw, trimmedUrl, extractPath);
} else {
status = celix_framework_utils_extractBundlePath(fw, trimmedUrl, extractPath);
}
@@ -267,13 +188,10 @@ bool celix_framework_utils_isBundleUrlValid(celix_framework_t *fw, const char *b
bool valid;
char buffer[CELIX_DEFAULT_STRING_CREATE_BUFFER_SIZE];
size_t fileSchemeLen = sizeof(FILE_URL_SCHEME)-1;
- size_t embeddedSchemeLen = sizeof(EMBEDDED_URL_SCHEME)-1;
if (strncasecmp(FILE_URL_SCHEME, trimmedUrl, fileSchemeLen) == 0) {
char* loc = celix_framework_utils_resolveFileBundleUrl(buffer, sizeof(buffer), fw, trimmedUrl + fileSchemeLen, silent);
valid = loc != NULL;
celix_utils_freeStringIfNotEqual(buffer, loc);
- } else if (strncasecmp(EMBEDDED_URL_SCHEME, trimmedUrl, embeddedSchemeLen) == 0) {
- valid = (celix_framework_utils_locateEmbeddedBundle(fw, trimmedUrl, NULL, NULL, silent) == CELIX_SUCCESS);
} else if (strcasestr(trimmedUrl, "://")) {
valid = false;
if (!silent) {
@@ -289,47 +207,6 @@ bool celix_framework_utils_isBundleUrlValid(celix_framework_t *fw, const char *b
return valid;
}
-celix_array_list_t* celix_framework_utils_listEmbeddedBundles() {
- celix_array_list_t* list = celix_arrayList_create();
- void* prog = dlopen(NULL, RTLD_NOW);
- const char** embeddedBundles = dlsym(prog, EMBEDDED_BUNDLES_SYMBOL);
- if (embeddedBundles != NULL) {
- char delims[] = ",";
- char *savePtr = NULL;
- char *bundles = celix_utils_strdup(*embeddedBundles);
- for (char *url = strtok_r(bundles, delims, &savePtr); url != NULL; url = strtok_r(NULL, delims, &savePtr)) {
- celix_arrayList_add(list, celix_utils_strdup(url));
- }
- free(bundles);
- }
- dlclose(prog);
- return list;
-}
-
-size_t celix_framework_utils_installEmbeddedBundles(celix_framework_t* fw, bool autoStart) {
- size_t nrOfBundlesInstalled = 0;
- celix_array_list_t* list = celix_framework_utils_listEmbeddedBundles();
- celix_array_list_t* bundleIds = celix_arrayList_create();
- for (int i = 0; i < celix_arrayList_size(list); ++i) {
- char* url = celix_arrayList_get(list, i);
- long bndId = celix_framework_installBundle(fw, url, false);
- if (bndId > 0) {
- nrOfBundlesInstalled += 1;
- celix_arrayList_addLong(bundleIds, bndId);
- }
- free(url);
- }
- celix_arrayList_destroy(list);
-
- for (int i = 0; i < celix_arrayList_size(bundleIds) && autoStart; ++i) {
- long bndId = celix_arrayList_getLong(bundleIds, i);
- celix_framework_startBundle(fw, bndId);
- }
- celix_arrayList_destroy(bundleIds);
-
- return nrOfBundlesInstalled;
-}
-
size_t celix_framework_utils_installBundleSet(celix_framework_t* fw, const char* bundleSet, bool autoStart) {
size_t installed = 0;
celix_array_list_t* bundleIds = celix_arrayList_create();
diff --git a/libs/framework/src/celix_launcher.c b/libs/framework/src/celix_launcher.c
index 532e2c20..8cf32a6f 100644
--- a/libs/framework/src/celix_launcher.c
+++ b/libs/framework/src/celix_launcher.c
@@ -43,7 +43,6 @@ 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 void celixLauncher_printEmbeddedBundles();
static int celixLauncher_createBundleCache(celix_properties_t* embeddedProperties, const char* configFile);
#define DEFAULT_CONFIG_FILE "config.properties"
@@ -65,75 +64,70 @@ int celixLauncher_launchAndWaitForShutdown(int argc, char *argv[], celix_propert
return rc;
}
-int celixLauncher_launchWithArgv(int argc, char *argv[], celix_properties_t* embeddedConfig, celix_framework_t** frameworkOut) {
- celix_framework_t* framework = NULL;
+int celixLauncher_launchWithArgv(int argc,
+ char* argv[],
+ celix_properties_t* embeddedConfig,
+ celix_framework_t** frameworkOut) {
+ celix_framework_t* framework = NULL;
- // Perform some minimal command-line option parsing...
- char *opt = NULL;
- char* configFile = NULL;
- bool showProps = false;
- bool showEmbeddedBundles = false;
+ // Perform some minimal command-line option parsing...
+ char* opt = NULL;
+ char* configFile = NULL;
+ bool showProps = false;
bool createCache = false;
- for (int i = 1; i < argc; ++i) {
- opt = argv[i];
- // Check whether the user wants some help...
- if (strncmp("-?", opt, sizeof("-?")) == 0 || strncmp("-h", opt, sizeof("-h")) == 0 || strncmp("--help", opt, sizeof("--help")) == 0) {
+ for (int i = 1; i < argc; ++i) {
+ opt = argv[i];
+ // Check whether the user wants some help...
+ if (strncmp("-?", opt, sizeof("-?")) == 0 || strncmp("-h", opt, sizeof("-h")) == 0 ||
+ strncmp("--help", opt, sizeof("--help")) == 0) {
celixLauncher_printUsage(argv[0]);
celix_properties_destroy(embeddedConfig);
return CELIX_LAUNCHER_OK_EXIT_CODE;
} else if (strncmp("-p", opt, sizeof("-p")) == 0 || strncmp("--props", opt, sizeof("--props")) == 0) {
showProps = true;
- } else if (strncmp("-c", opt, sizeof("-c")) == 0 || strncmp("--create-bundle-cache", opt, sizeof("--create-bundle-cache")) == 0) {
+ } else if (strncmp("-c", opt, sizeof("-c")) == 0 ||
+ strncmp("--create-bundle-cache", opt, sizeof("--create-bundle-cache")) == 0) {
createCache = true;
- } else if (strncmp("--embedded_bundles", opt, sizeof("--embedded_bundles")) == 0) {
- showEmbeddedBundles = true;
- } else {
+ } else {
configFile = opt;
- }
- }
+ }
+ }
- if (configFile == NULL) {
+ if (configFile == NULL) {
configFile = DEFAULT_CONFIG_FILE;
- }
+ }
- if (embeddedConfig == NULL) {
+ if (embeddedConfig == NULL) {
embeddedConfig = celix_properties_create();
- }
+ }
- if (showProps) {
+ if (showProps) {
celixLauncher_printProperties(embeddedConfig, configFile);
- celix_properties_destroy(embeddedConfig);
- return CELIX_LAUNCHER_OK_EXIT_CODE;
- }
+ celix_properties_destroy(embeddedConfig);
+ return CELIX_LAUNCHER_OK_EXIT_CODE;
+ }
if (createCache) {
return celixLauncher_createBundleCache(embeddedConfig, configFile);
}
- if (showEmbeddedBundles) {
- celixLauncher_printEmbeddedBundles();
- celix_properties_destroy(embeddedConfig);
- return CELIX_LAUNCHER_OK_EXIT_CODE;
+ struct sigaction sigact;
+ memset(&sigact, 0, sizeof(sigact));
+ sigact.sa_handler = celixLauncher_shutdownFramework;
+ sigaction(SIGINT, &sigact, NULL);
+ sigaction(SIGTERM, &sigact, NULL);
+
+ memset(&sigact, 0, sizeof(sigact));
+ sigact.sa_handler = celixLauncher_ignore;
+ sigaction(SIGUSR1, &sigact, NULL);
+ sigaction(SIGUSR2, &sigact, NULL);
+
+ int rc = celixLauncher_launchWithConfigAndProps(configFile, &framework, embeddedConfig);
+ if (rc == CELIX_LAUNCHER_OK_EXIT_CODE) {
+ g_fw = framework;
+ *frameworkOut = framework;
}
-
- struct sigaction sigact;
- memset(&sigact, 0, sizeof(sigact));
- sigact.sa_handler = celixLauncher_shutdownFramework;
- sigaction(SIGINT, &sigact, NULL);
- sigaction(SIGTERM, &sigact, NULL);
-
- memset(&sigact, 0, sizeof(sigact));
- sigact.sa_handler = celixLauncher_ignore;
- sigaction(SIGUSR1, &sigact, NULL);
- sigaction(SIGUSR2, &sigact, NULL);
-
-
- int rc = celixLauncher_launchWithConfigAndProps(configFile, &framework, embeddedConfig);
- if (rc == CELIX_LAUNCHER_OK_EXIT_CODE) {
- g_fw = framework;
- *frameworkOut = framework;
- }
- return rc;
+ return rc;
}
static void celixLauncher_shutdownFramework(int signal) {
@@ -243,20 +237,6 @@ static void celixLauncher_printProperties(celix_properties_t *embeddedProps, con
celix_properties_destroy(keys);
}
-static void celixLauncher_printEmbeddedBundles() {
- celix_array_list_t* embeddedBundles = celix_framework_utils_listEmbeddedBundles();
- printf("Embedded bundles:\n");
- for (int i = 0; i < celix_arrayList_size(embeddedBundles); ++i) {
- char* bundle = celix_arrayList_get(embeddedBundles, i);
- printf("|- %02i: %s\n", (i+1), bundle);
- free(bundle);
- }
- if (celix_arrayList_size(embeddedBundles) == 0) {
- printf("|- no embedded bundles\n");
- }
- celix_arrayList_destroy(embeddedBundles);
-}
-
static int celixLauncher_createBundleCache(celix_properties_t* embeddedProperties, const char* configFile) {
celix_framework_t* fw = NULL;
celix_properties_t* config = celixLauncher_createConfig(configFile, embeddedProperties);