pnoltes opened a new issue, #623:
URL: https://github.com/apache/celix/issues/623

   # 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.
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@celix.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to