Apache Celix Features
- Dominant language
- C
- Stars
- 193
- Forks
- 99
- Avg merge
- 1m
- Merged PRs (30d)
- 1
Description
# Apache Celix Features
Add support for Apache Celix Features, inspired by Apache Karaf Features. This will allow users to select bundles and link the required libraries for the executable/container using a single entity.
# Background
[Apache Karaf has a concept of "feature"](https://karaf.apache.org/manual/latest/provisioning) to make it easier to add a selection of bundles.
> Apache Karaf provides a simple and flexible way to provision applications.
In Apache Karaf, the application provisioning is an Apache Karaf "feature".
A feature describes an application as:
> - a name
> - a version
> - a optional description (eventually with a long description)
> - a set of bundles
> - optionally a set configurations or configuration files
> - optionally a set of dependency features
# Proposed Solution
For Apache Celix, introducing a feature concept would be beneficial, especially for specifying additional linking requirements for the executable/container running the feature-based selected bundles. This is because some bundles depend on system-installed libraries rather than private bundle libraries.
Take the civetweb::civetweb library, for instance. Linking to this library is necessary if an executable/container uses the http_admin:
```cmake
#examples/celix-examples/http_example/CMakeLists.txt
...
target_link_libraries(http_example PRIVATE Celix::http_admin_api)
...
```
With the Apache Celix Features concept, this could be arranged by the feature if it supports library configuration. A feature could then be defined in CMake as:
```cmake
add_celix_feature(celix_http_admin
NAME "Apache Celix HTTP Admin"
DESCRIPTION "Adds the Apache Celix HTTP Admin bundle so that the HTTP whiteboard pattern can be used to pick up HTTP and/or websocket services."
VERSION "1.0.0"
BUNDLES_LEVEL_3 Celix::http_admin
EXE_LINKING Celix::http_admin_api
```
Usage might look like:
```cmake
add_celix_container(my_container
FEATURES celix_http_admin
)
# or
# celix_container_features(my_container celix_http_admin)
```
# Downsides
- The proposed solution relies on CMake, which further tightens the coupling between Apache Celix and CMake.
- The add_celix_feature calls should either be "installable" or provided in the CelixConfig.cmake (or a Use.cmake file) to ensure they are usable downstream.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.