CELIX-377: Fixes RPATH issues
Project: http://git-wip-us.apache.org/repos/asf/celix/repo Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/6425b408 Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/6425b408 Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/6425b408 Branch: refs/heads/release/celix-2.0.0 Commit: 6425b408c0062afa0a688369ad4f704c5ce9e29e Parents: 1b25a0a Author: Pepijn Noltes <pepijnnol...@gmail.com> Authored: Fri Oct 7 14:56:02 2016 +0200 Committer: Pepijn Noltes <pepijnnol...@gmail.com> Committed: Fri Oct 7 14:56:02 2016 +0200 ---------------------------------------------------------------------- CMakeLists.txt | 4 +--- cmake/cmake_celix/Packaging.cmake | 1 + dfi/CMakeLists.txt | 2 +- dfi/private/src/dyn_message.c | 13 ++++++++----- dfi/private/src/dyn_type.c | 5 ++--- .../client/private/src/echo_client_activator.c | 2 +- examples/hello_world_test/private/src/activator.c | 2 +- examples/mongoose/private/src/activator.c | 2 +- .../client/private/src/client.c | 2 +- .../greeting/private/src/activator.c | 2 +- framework/CMakeLists.txt | 2 +- launcher/CMakeLists.txt | 12 ++++++------ utils/CMakeLists.txt | 2 +- 13 files changed, 26 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index d1c5886..421a042 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,12 +19,10 @@ cmake_minimum_required (VERSION 3.2) project (Celix C CXX) cmake_policy(SET CMP0012 NEW) +include(GNUInstallDirs) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") -set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -set(CMAKE_INSTALL_NAME_DIR "@rpath") - SET(CMAKE_BUILD_TYPE "Debug") # see https://public.kitware.com/Bug/view.php?id=15696 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/cmake/cmake_celix/Packaging.cmake ---------------------------------------------------------------------- diff --git a/cmake/cmake_celix/Packaging.cmake b/cmake/cmake_celix/Packaging.cmake index 7ff5091..eeb0a39 100644 --- a/cmake/cmake_celix/Packaging.cmake +++ b/cmake/cmake_celix/Packaging.cmake @@ -251,6 +251,7 @@ SET(CPACK_INCLUDE_TOPLEVEL_DIRECTORY \"0\") if(BUNDLE_SOURCES) bundle_private_libs(${BUNDLE_TARGET_NAME} ${BUNDLE_TARGET_NAME}) set_target_properties(${BUNDLE_TARGET_NAME} PROPERTIES "BUNDLE_ACTIVATOR" "$<TARGET_SONAME_FILE_NAME:${BUNDLE_TARGET_NAME}>") + set_target_properties(${BUNDLE_TARGET_NAME} PROPERTIES "BUILD_WITH_INSTALL_RPATH" true) if(APPLE) set_target_properties(${BUNDLE_TARGET_NAME} PROPERTIES INSTALL_RPATH "@loader_path") http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/dfi/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/dfi/CMakeLists.txt b/dfi/CMakeLists.txt index 78ee2e5..6fe7071 100644 --- a/dfi/CMakeLists.txt +++ b/dfi/CMakeLists.txt @@ -56,7 +56,7 @@ add_library(celix_dfi SHARED set_target_properties(celix_dfi PROPERTIES "SOVERSION" 1) target_link_libraries(celix_dfi celix_utils ${FFI_LIBRARIES} ${JANSSON_LIBRARY}) -install(TARGETS celix_dfi DESTINATION lib COMPONENT framework) +install(TARGETS celix_dfi DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework) FILE(GLOB files "public/include/*.h" ${MEMSTREAM_INCLUDES}) INSTALL(FILES ${files} DESTINATION include/celix/dfi COMPONENT framework) http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/dfi/private/src/dyn_message.c ---------------------------------------------------------------------- diff --git a/dfi/private/src/dyn_message.c b/dfi/private/src/dyn_message.c index 3e2ca99..652be83 100644 --- a/dfi/private/src/dyn_message.c +++ b/dfi/private/src/dyn_message.c @@ -93,6 +93,7 @@ int dynMessage_parse(FILE *descriptor, dyn_message_type **out) { if (status == OK) { *out = msg; } else if (msg != NULL) { + LOG_ERROR("Error parsing msg\n"); dynMessage_destroy(msg); } return status; @@ -222,7 +223,7 @@ static int dynMessage_parseTypes(dyn_message_type *msg, FILE *stream) { while (peek != ':' && peek != EOF) { ungetc(peek, stream); - char *name; + char *name = NULL; status = dynCommon_parseName(stream, &name); if (status == OK) { @@ -231,10 +232,7 @@ static int dynMessage_parseTypes(dyn_message_type *msg, FILE *stream) { dyn_type *type = NULL; if (status == OK) { - dynType_parse(stream, name, &msg->types, &type); - } - if (name != NULL) { - free(name); + status = dynType_parse(stream, name, &msg->types, &type); } if (status == OK) { @@ -245,6 +243,7 @@ static int dynMessage_parseTypes(dyn_message_type *msg, FILE *stream) { if (status == OK) { entry = calloc(1, sizeof(*entry)); if (entry != NULL) { + LOG_DEBUG("Adding type '%s' with pointer %p to types", name, type); entry->type = type; TAILQ_INSERT_TAIL(&msg->types, entry, entries); } else { @@ -253,6 +252,10 @@ static int dynMessage_parseTypes(dyn_message_type *msg, FILE *stream) { } } + if (name != NULL) { + free(name); + } + if (status != OK) { if (type != NULL) { dynType_destroy(type); http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/dfi/private/src/dyn_type.c ---------------------------------------------------------------------- diff --git a/dfi/private/src/dyn_type.c b/dfi/private/src/dyn_type.c index 2b83f25..9beea1d 100644 --- a/dfi/private/src/dyn_type.c +++ b/dfi/private/src/dyn_type.c @@ -427,15 +427,14 @@ static int dynType_parseRefByValue(FILE *stream, dyn_type *type) { LOG_ERROR("Error cannot find type '%s'", name); } free(name); - } - if (status == OK) { int c = fgetc(stream); if (c != ';') { status = PARSE_ERROR; LOG_ERROR("Error expected ';' got '%c'", c); } - } + } + return status; } http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/examples/echo_service/client/private/src/echo_client_activator.c ---------------------------------------------------------------------- diff --git a/examples/echo_service/client/private/src/echo_client_activator.c b/examples/echo_service/client/private/src/echo_client_activator.c index f03a741..4026886 100644 --- a/examples/echo_service/client/private/src/echo_client_activator.c +++ b/examples/echo_service/client/private/src/echo_client_activator.c @@ -1,4 +1,4 @@ -#include <sys/cdefs.h>/** +/** *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 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/examples/hello_world_test/private/src/activator.c ---------------------------------------------------------------------- diff --git a/examples/hello_world_test/private/src/activator.c b/examples/hello_world_test/private/src/activator.c index 8bf9501..2185e16 100644 --- a/examples/hello_world_test/private/src/activator.c +++ b/examples/hello_world_test/private/src/activator.c @@ -1,4 +1,4 @@ -#include <sys/cdefs.h>/** +/** *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 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/examples/mongoose/private/src/activator.c ---------------------------------------------------------------------- diff --git a/examples/mongoose/private/src/activator.c b/examples/mongoose/private/src/activator.c index 2fd51bb..beea9df 100644 --- a/examples/mongoose/private/src/activator.c +++ b/examples/mongoose/private/src/activator.c @@ -1,4 +1,4 @@ -#include <sys/cdefs.h>/** +/** *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 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/examples/osgi-in-action/chapter01-greeting-example/client/private/src/client.c ---------------------------------------------------------------------- diff --git a/examples/osgi-in-action/chapter01-greeting-example/client/private/src/client.c b/examples/osgi-in-action/chapter01-greeting-example/client/private/src/client.c index 41aff7c..dfae0ce 100644 --- a/examples/osgi-in-action/chapter01-greeting-example/client/private/src/client.c +++ b/examples/osgi-in-action/chapter01-greeting-example/client/private/src/client.c @@ -1,4 +1,4 @@ -#include <sys/cdefs.h>/** +/** *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 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/examples/osgi-in-action/chapter01-greeting-example/greeting/private/src/activator.c ---------------------------------------------------------------------- diff --git a/examples/osgi-in-action/chapter01-greeting-example/greeting/private/src/activator.c b/examples/osgi-in-action/chapter01-greeting-example/greeting/private/src/activator.c index 64d324a..d5b0b3f 100644 --- a/examples/osgi-in-action/chapter01-greeting-example/greeting/private/src/activator.c +++ b/examples/osgi-in-action/chapter01-greeting-example/greeting/private/src/activator.c @@ -1,4 +1,4 @@ -#include <sys/cdefs.h>/** +/** *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 http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/framework/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index 06eead2..06f0c9f 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -76,7 +76,7 @@ if (FRAMEWORK) endif() target_link_libraries(celix_framework celix_utils ${UUID} ${ZLIB_LIBRARY} ${CURL_LIBRARIES}) - install(TARGETS celix_framework DESTINATION lib COMPONENT framework) + install(TARGETS celix_framework DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework) FILE(GLOB files "public/include/*.h") INSTALL(FILES ${files} DESTINATION include/celix COMPONENT framework) INSTALL(DIRECTORY "${PROJECT_SOURCE_DIR}/cmake/" DESTINATION share/celix/cmake/modules COMPONENT framework) http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/launcher/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index e1f9a9c..4f9056a 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -18,20 +18,20 @@ celix_subproject(LAUNCHER "Option to build the launcher" "ON" DEPS UTILS FRAMEWO if (LAUNCHER) find_package(CURL REQUIRED) - SET(CMAKE_SKIP_BUILD_RPATH FALSE) #TODO needed? - SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) #TODO needed? - SET(CMAKE_INSTALL_RPATH "${PROJECT_BINARY_DIR}/framework" "${PROJECT_BINARY_DIR}/utils") - include_directories(public/include) add_executable(celix private/src/main ) + + set_target_properties(celix PROPERTIES "INSTALL_RPATH" "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") target_link_libraries(celix celix_framework ${CURL_LIBRARIES}) + target_link_libraries(celix celix_dfi) #note not strictly needed, but ensure libdfi is a dep for the framework, useful when create docker images + include_directories("${PROJECT_SOURCE_DIR}/utils/public/include") include_directories("${PROJECT_SOURCE_DIR}/framework/public/include") include_directories("${CURL_INCLUDE_DIRS}") - install(TARGETS celix RUNTIME DESTINATION bin COMPONENT framework) -endif (LAUNCHER) \ No newline at end of file + install(TARGETS celix RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT framework) +endif (LAUNCHER) http://git-wip-us.apache.org/repos/asf/celix/blob/6425b408/utils/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index 6c273bd..3c20b90 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -63,7 +63,7 @@ if (UTILS) target_link_libraries(celix_utils m) ENDIF() - install(TARGETS celix_utils DESTINATION lib COMPONENT framework) + install(TARGETS celix_utils DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT framework) FILE(GLOB files "public/include/*.h") INSTALL(FILES ${files} DESTINATION include/celix COMPONENT framework)