This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/export_headers in repository https://gitbox.apache.org/repos/asf/celix.git
commit 35ecfceb4855be5c0e76bdae0fbad54cb520ab79 Author: Pepijn Noltes <pepijnnol...@gmail.com> AuthorDate: Sun Apr 16 10:34:17 2023 +0200 Add export header for etcdlib --- CMakeLists.txt | 3 +++ libs/dfi/include/dyn_interface.h | 24 +++++++++++------------ libs/dfi/include/json_rpc.h | 7 ++++--- libs/dfi/include/json_serializer.h | 9 +++++---- libs/etcdlib/CMakeLists.txt | 39 ++++++++++++++++++++++---------------- libs/etcdlib/api/etcd.h | 25 ++++++++++++------------ libs/etcdlib/api/etcdlib.h | 23 +++++++++++----------- libs/utils/CMakeLists.txt | 17 +++++++---------- 8 files changed, 79 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f75072df..dbc06c44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,6 +196,9 @@ include(CheckLinkerFlag) check_linker_flag(CXX LINKER:--wrap,celix_nonexistent_symbol LINKER_WRAP_SUPPORTED) cmake_pop_check_state() +#Add generate_export_header to cmake +include(GenerateExportHeader) + #Libraries and Launcher add_subdirectory(libs) diff --git a/libs/dfi/include/dyn_interface.h b/libs/dfi/include/dyn_interface.h index 2e080fa7..6927485a 100644 --- a/libs/dfi/include/dyn_interface.h +++ b/libs/dfi/include/dyn_interface.h @@ -24,8 +24,8 @@ #include "dyn_type.h" #include "dyn_function.h" #include "dfi_log_util.h" - #include "celix_version.h" +#include "celix_df_export.h" #ifdef __cplusplus extern "C" { @@ -57,20 +57,20 @@ struct method_entry { TAILQ_ENTRY(method_entry) entries; }; -int dynInterface_parse(FILE *descriptor, dyn_interface_type **out); -void dynInterface_destroy(dyn_interface_type *intf); +CELIX_DFI_EXPORT int dynInterface_parse(FILE *descriptor, dyn_interface_type **out); +CELIX_DFI_EXPORT void dynInterface_destroy(dyn_interface_type *intf); -int dynInterface_getName(dyn_interface_type *intf, char **name); -int dynInterface_getVersion(dyn_interface_type *intf, celix_version_t** version); -int dynInterface_getVersionString(dyn_interface_type *intf, char **version); -int dynInterface_getHeaderEntry(dyn_interface_type *intf, const char *name, char **value); -int dynInterface_getAnnotationEntry(dyn_interface_type *intf, const char *name, char **value); -int dynInterface_methods(dyn_interface_type *intf, struct methods_head **list); -int dynInterface_nrOfMethods(dyn_interface_type *intf); +CELIX_DFI_EXPORT int dynInterface_getName(dyn_interface_type *intf, char **name); +CELIX_DFI_EXPORT int dynInterface_getVersion(dyn_interface_type *intf, celix_version_t** version); +CELIX_DFI_EXPORT int dynInterface_getVersionString(dyn_interface_type *intf, char **version); +CELIX_DFI_EXPORT int dynInterface_getHeaderEntry(dyn_interface_type *intf, const char *name, char **value); +CELIX_DFI_EXPORT int dynInterface_getAnnotationEntry(dyn_interface_type *intf, const char *name, char **value); +CELIX_DFI_EXPORT int dynInterface_methods(dyn_interface_type *intf, struct methods_head **list); +CELIX_DFI_EXPORT int dynInterface_nrOfMethods(dyn_interface_type *intf); // Avpr parsing -dyn_interface_type * dynInterface_parseAvprWithStr(const char * avpr); -dyn_interface_type * dynInterface_parseAvpr(FILE * avprStream); +CELIX_DFI_DEPRECATED_EXPORT dyn_interface_type * dynInterface_parseAvprWithStr(const char * avpr); +CELIX_DFI_DEPRECATED_EXPORT dyn_interface_type * dynInterface_parseAvpr(FILE * avprStream); #ifdef __cplusplus } diff --git a/libs/dfi/include/json_rpc.h b/libs/dfi/include/json_rpc.h index 363d051e..68783fa8 100644 --- a/libs/dfi/include/json_rpc.h +++ b/libs/dfi/include/json_rpc.h @@ -25,6 +25,7 @@ #include "dyn_type.h" #include "dyn_function.h" #include "dyn_interface.h" +#include "celix_df_export.h" #ifdef __cplusplus extern "C" { @@ -33,11 +34,11 @@ extern "C" { //logging DFI_SETUP_LOG_HEADER(jsonRpc); -int jsonRpc_call(dyn_interface_type *intf, void *service, const char *request, char **out); +CELIX_DFI_EXPORT int jsonRpc_call(dyn_interface_type *intf, void *service, const char *request, char **out); -int jsonRpc_prepareInvokeRequest(dyn_function_type *func, const char *id, void *args[], char **out); -int jsonRpc_handleReply(dyn_function_type *func, const char *reply, void *args[], int *rsErrno); +CELIX_DFI_EXPORT int jsonRpc_prepareInvokeRequest(dyn_function_type *func, const char *id, void *args[], char **out); +CELIX_DFI_EXPORT int jsonRpc_handleReply(dyn_function_type *func, const char *reply, void *args[], int *rsErrno); #ifdef __cplusplus } diff --git a/libs/dfi/include/json_serializer.h b/libs/dfi/include/json_serializer.h index 7ff1d610..91311dcf 100644 --- a/libs/dfi/include/json_serializer.h +++ b/libs/dfi/include/json_serializer.h @@ -25,6 +25,7 @@ #include "dyn_type.h" #include "dyn_function.h" #include "dyn_interface.h" +#include "celix_df_export.h" #ifdef __cplusplus extern "C" { @@ -33,11 +34,11 @@ extern "C" { //logging DFI_SETUP_LOG_HEADER(jsonSerializer); -int jsonSerializer_deserialize(dyn_type *type, const char *input, size_t length, void **result); -int jsonSerializer_deserializeJson(dyn_type *type, json_t *input, void **result); +CELIX_DFI_EXPORT int jsonSerializer_deserialize(dyn_type *type, const char *input, size_t length, void **result); +CELIX_DFI_EXPORT int jsonSerializer_deserializeJson(dyn_type *type, json_t *input, void **result); -int jsonSerializer_serialize(dyn_type *type, const void* input, char **output); -int jsonSerializer_serializeJson(dyn_type *type, const void* input, json_t **out); +CELIX_DFI_EXPORT int jsonSerializer_serialize(dyn_type *type, const void* input, char **output); +CELIX_DFI_EXPORT int jsonSerializer_serializeJson(dyn_type *type, const void* input, json_t **out); #ifdef __cplusplus } diff --git a/libs/etcdlib/CMakeLists.txt b/libs/etcdlib/CMakeLists.txt index 885bb38a..760b8bad 100644 --- a/libs/etcdlib/CMakeLists.txt +++ b/libs/etcdlib/CMakeLists.txt @@ -54,32 +54,39 @@ endif () if (CELIX_ETCDLIB OR ETCDLIB_STANDALONE) find_package(jansson REQUIRED) - add_library(etcdlib SHARED - src/etcd.c - ) - target_include_directories(etcdlib PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api> - ) - target_include_directories(etcdlib PRIVATE src) - set_target_properties(etcdlib PROPERTIES SOVERSION 1) - set_target_properties(etcdlib PROPERTIES VERSION 1.0.0) + add_library(etcdlib SHARED src/etcd.c) + target_include_directories(etcdlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>) + target_include_directories(etcdlib PRIVATE src) + set_target_properties(etcdlib + PROPERTIES + VERSION 1.0.0 + SOVERSION 1 + C_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON + ) target_link_libraries(etcdlib PUBLIC CURL::libcurl jansson::jansson ${CELIX_OPTIONAL_EXTRA_LIBS}) - add_library(etcdlib_static STATIC - src/etcd.c - ) - target_include_directories(etcdlib_static PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api> - ) + generate_export_header(etcdlib + BASE_NAME "ETCDLIB" + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/etcdlib/etcdlib_export.h") + target_include_directories(etcdlib PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/etcdlib>) + + + add_library(etcdlib_static STATIC src/etcd.c) + target_include_directories(etcdlib_static PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/api>) target_include_directories(etcdlib_static PRIVATE src) - set_target_properties(etcdlib_static PROPERTIES "SOVERSION" 1) + set_target_properties(etcdlib_static + PROPERTIES + POSITION_INDEPENDENT_CODE 1 + OUTPUT_NAME "celix_etcdlib_static") target_link_libraries(etcdlib_static PUBLIC CURL::libcurl jansson::jansson ${CELIX_OPTIONAL_EXTRA_LIBS}) add_executable(etcdlib_test ${CMAKE_CURRENT_SOURCE_DIR}/test/etcdlib_test.c) target_link_libraries(etcdlib_test PRIVATE etcdlib_static CURL::libcurl jansson::jansson) install(DIRECTORY api/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/etcdlib COMPONENT ${ETCDLIB_CMP}) + install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/etcdlib/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/etcdlib COMPONENT ${ETCDLIB_CMP}) if (NOT COMMAND celix_subproject) install(TARGETS etcdlib etcdlib_static DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT ${ETCDLIB_CMP} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/etcdlib) diff --git a/libs/etcdlib/api/etcd.h b/libs/etcdlib/api/etcd.h index 4b6fe2fd..6555c6b4 100644 --- a/libs/etcdlib/api/etcd.h +++ b/libs/etcdlib/api/etcd.h @@ -26,8 +26,7 @@ extern "C" #endif #include "etcdlib.h" - -#define DEP_ATTRIBUTE __attribute__((deprecated("etcd_ call are placed by etcdlib_ calls, use etcdlib.h instead of etcd.h"))) +#include "etcdlib_export.h" /** * @desc Initialize the ETCD-LIB with the server/port where Etcd can be reached. @@ -36,7 +35,7 @@ extern "C" * @param int flags. bitwise flags to control etcdlib initialization. * @return 0 on success, non zero otherwise. */ -int etcd_init(const char* server, int port, int flags) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_init(const char* server, int port, int flags); /** * @desc Retrieve a single value from Etcd. @@ -45,7 +44,7 @@ int etcd_init(const char* server, int port, int flags) DEP_ATTRIBUTE; * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value. * @return 0 on success, non zero otherwise */ -int etcd_get(const char* key, char** value, int* modifiedIndex) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_get(const char* key, char** value, int* modifiedIndex); /** * @desc Retrieve the contents of a directory. For every found key/value pair the given callback function is called. @@ -55,7 +54,11 @@ int etcd_get(const char* key, char** value, int* modifiedIndex) DEP_ATTRIBUTE; * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value. * @return 0 on success, non zero otherwise */ -int etcd_get_directory(const char* directory, etcdlib_key_value_callback callback, void *arg, long long* modifiedIndex) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_get_directory( + const char* directory, + etcdlib_key_value_callback callback, + void *arg, + long long* modifiedIndex); /** * @desc Setting an Etcd-key/value @@ -65,7 +68,7 @@ int etcd_get_directory(const char* directory, etcdlib_key_value_callback callbac * @param bool prevExist. If true the value is only set when the key already exists, if false it is always set * @return 0 on success, non zero otherwise */ -int etcd_set(const char* key, const char* value, int ttl, bool prevExist) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_set(const char* key, const char* value, int ttl, bool prevExist); /** * @desc Refresh the ttl of an existing key. @@ -73,7 +76,7 @@ int etcd_set(const char* key, const char* value, int ttl, bool prevExist) DEP_AT * @param ttl the ttl value to use. * @return 0 on success, non zero otherwise. */ -int etcd_refresh(const char *key, int ttl) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_refresh(const char *key, int ttl); /** * @desc Setting an Etcd-key/value and checks if there is a different previous value @@ -83,14 +86,14 @@ int etcd_refresh(const char *key, int ttl) DEP_ATTRIBUTE; * @param bool always_write. If true the value is written, if false only when the given value is equal to the value in etcd. * @return 0 on success, non zero otherwise */ -int etcd_set_with_check(const char* key, const char* value, int ttl, bool always_write) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_set_with_check(const char* key, const char* value, int ttl, bool always_write); /** * @desc Deleting an Etcd-key * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided) * @return 0 on success, non zero otherwise */ -int etcd_del(const char* key) DEP_ATTRIBUTE; +ETCDLIB_DEPRECATED_EXPORT int etcd_del(const char* key); /** * @desc Watching an etcd directory for changes @@ -103,9 +106,7 @@ int etcd_del(const char* key) DEP_ATTRIBUTE; * @param long long* modifiedIndex. If not NULL, the index of the modification is written. * @return ETCDLIB_RC_OK (0) on success, non zero otherwise. Note that a timeout is signified by a ETCDLIB_RC_TIMEOUT return code. */ -int etcd_watch(const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex) DEP_ATTRIBUTE; - -#undef DEP_ATTRIBUTE +ETCDLIB_DEPRECATED_EXPORT int etcd_watch(const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex); #ifdef __cplusplus } diff --git a/libs/etcdlib/api/etcdlib.h b/libs/etcdlib/api/etcdlib.h index 809163e6..19b63133 100644 --- a/libs/etcdlib/api/etcdlib.h +++ b/libs/etcdlib/api/etcdlib.h @@ -26,6 +26,7 @@ extern "C" #endif #include <stdbool.h> +#include "etcdlib_export.h" /* * If set etcdlib will _not_ initialize curl @@ -57,23 +58,23 @@ typedef void (*etcdlib_key_value_callback) (const char *key, const char *value, * @param int flags. bitwise flags to control etcdlib initialization. * @return Pointer to the etcdlib_t struct needed by subsequent api calls */ -etcdlib_t* etcdlib_create(const char* server, int port, int flags); +ETCDLIB_EXPORT etcdlib_t* etcdlib_create(const char* server, int port, int flags); /** * @desc Destroys the ETCD-LIB. with the server/port where Etcd can be reached. * @param etcdlib_t* The ETCD-LIB instance. */ -void etcdlib_destroy(etcdlib_t *etcdlib); +ETCDLIB_EXPORT void etcdlib_destroy(etcdlib_t *etcdlib); /** * Returns the configured etcd host for etcdlib. */ -const char* etcdlib_host(etcdlib_t *etcdlib); +ETCDLIB_EXPORT const char* etcdlib_host(etcdlib_t *etcdlib); /** * Returns the configured etcd port for etcdlib. */ -int etcdlib_port(etcdlib_t *etcdlib); +ETCDLIB_EXPORT int etcdlib_port(etcdlib_t *etcdlib); /** * @desc Retrieve a single value from Etcd. @@ -83,7 +84,7 @@ int etcdlib_port(etcdlib_t *etcdlib); * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value. * @return 0 on success, non zero otherwise */ -int etcdlib_get(etcdlib_t *etcdlib, const char* key, char** value, int* modifiedIndex); +ETCDLIB_EXPORT int etcdlib_get(etcdlib_t *etcdlib, const char* key, char** value, int* modifiedIndex); /** * @desc Retrieve the contents of a directory. For every found key/value pair the given callback function is called. @@ -94,7 +95,7 @@ int etcdlib_get(etcdlib_t *etcdlib, const char* key, char** value, int* modified * @param int* modifiedIndex. If not NULL the Etcd-index of the last modified value. * @return 0 on success, non zero otherwise */ -int etcdlib_get_directory(etcdlib_t *etcdlib, const char* directory, etcdlib_key_value_callback callback, void *arg, long long* modifiedIndex); +ETCDLIB_EXPORT int etcdlib_get_directory(etcdlib_t *etcdlib, const char* directory, etcdlib_key_value_callback callback, void *arg, long long* modifiedIndex); /** * @desc Setting an Etcd-key/value @@ -105,7 +106,7 @@ int etcdlib_get_directory(etcdlib_t *etcdlib, const char* directory, etcdlib_key * @param bool prevExist. If true the value is only set when the key already exists, if false it is always set * @return 0 on success, non zero otherwise */ -int etcdlib_set(etcdlib_t *etcdlib, const char* key, const char* value, int ttl, bool prevExist); +ETCDLIB_EXPORT int etcdlib_set(etcdlib_t *etcdlib, const char* key, const char* value, int ttl, bool prevExist); /** * @desc Refresh the ttl of an existing key. @@ -114,7 +115,7 @@ int etcdlib_set(etcdlib_t *etcdlib, const char* key, const char* value, int ttl, * @param ttl the ttl value to use. * @return 0 on success, non zero otherwise. */ -int etcdlib_refresh(etcdlib_t *etcdlib, const char *key, int ttl); +ETCDLIB_EXPORT int etcdlib_refresh(etcdlib_t *etcdlib, const char *key, int ttl); /** * @desc Setting an Etcd-key/value and checks if there is a different previous value @@ -125,7 +126,7 @@ int etcdlib_refresh(etcdlib_t *etcdlib, const char *key, int ttl); * @param bool always_write. If true the value is written, if false only when the given value is equal to the value in etcd. * @return 0 on success, non zero otherwise */ -int etcdlib_set_with_check(etcdlib_t *etcdlib, const char* key, const char* value, int ttl, bool always_write); +ETCDLIB_EXPORT int etcdlib_set_with_check(etcdlib_t *etcdlib, const char* key, const char* value, int ttl, bool always_write); /** * @desc Deleting an Etcd-key @@ -133,7 +134,7 @@ int etcdlib_set_with_check(etcdlib_t *etcdlib, const char* key, const char* valu * @param const char* key. The Etcd-key (Note: a leading '/' should be avoided) * @return 0 on success, non zero otherwise */ -int etcdlib_del(etcdlib_t *etcdlib, const char* key); +ETCDLIB_EXPORT int etcdlib_del(etcdlib_t *etcdlib, const char* key); /** * @desc Watching an etcd directory for changes @@ -147,7 +148,7 @@ int etcdlib_del(etcdlib_t *etcdlib, const char* key); * @param long long* modifiedIndex. If not NULL, the index of the modification is written. * @return ETCDLIB_RC_OK (0) on success, non zero otherwise. Note that a timeout is signified by a ETCDLIB_RC_TIMEOUT return code. */ -int etcdlib_watch(etcdlib_t *etcdlib, const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex); +ETCDLIB_EXPORT int etcdlib_watch(etcdlib_t *etcdlib, const char* key, long long index, char** action, char** prevValue, char** value, char** rkey, long long* modifiedIndex); #ifdef __cplusplus } diff --git a/libs/utils/CMakeLists.txt b/libs/utils/CMakeLists.txt index d1381656..87ba290b 100644 --- a/libs/utils/CMakeLists.txt +++ b/libs/utils/CMakeLists.txt @@ -70,32 +70,29 @@ ELSEIF(ANDROID) target_link_libraries(utils_obj PRIVATE m) ENDIF() -include(GenerateExportHeader) generate_export_header(utils_obj BASE_NAME "CELIX_UTILS" - EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/gen_include/celix_utils_export.h") -target_include_directories(utils_obj PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/gen_include>) + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/celix/gen/includes/utils/celix_utils_export.h") +target_include_directories(utils_obj PUBLIC $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/celix/gen/includes/utils>) add_library(utils SHARED) target_link_libraries(utils PUBLIC utils_obj) set_target_properties(utils PROPERTIES - CXX_VISIBILITY_PRESET hidden C_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN true SOVERSION ${CELIX_MAJOR} - OUTPUT_NAME "celix_utils" -) + OUTPUT_NAME "celix_utils") # By omitting OBJECTS DESTINATION, object files will NOT be installed. install(TARGETS utils utils_obj EXPORT celix LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix_utils) + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/$<TARGET_PROPERTY:utils,OUTPUT_NAME>) install(DIRECTORY include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix_utils + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix_utils/ COMPONENT framework PATTERN memstream* EXCLUDE) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gen_include/celix_utils_export.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix_utils +install(DIRECTORY ${CMAKE_BINARY_DIR}/celix/gen/includes/utils/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/celix_utils/ COMPONENT framework) if (CELIX_INSTALL_DEPRECATED_API)