From 229385955109b866a23c4ac2aa03d4d11044c39d Mon Sep 17 00:00:00 2001 From: "Enrico Loparco (eloparco)" Date: Thu, 24 Jun 2021 09:15:41 +0200 Subject: [HICN-708] Rebase with master Signed-off-by: Enrico Loparco (eloparco) Change-Id: I2122e1d61dd3b2e039972624ffbdbcb3c5610159 --- cmake/Modules/BuildMacros.cmake | 82 ++++++++++++++++-- cmake/Modules/FindCollectd.cmake | 10 +-- cmake/Modules/FindLibFec.cmake | 24 ++++++ cmake/Modules/FindLibRely.cmake | 24 ++++++ cmake/Modules/FindLibconfig++.cmake | 44 ++++++++++ cmake/Modules/FindLibconfig.cmake | 43 ++++++++++ cmake/Modules/FindLibhicn.cmake | 2 +- cmake/Modules/GTestImport.cmake | 21 +++-- cmake/Modules/License.txt | 12 +++ cmake/Modules/Packager.cmake | 162 +++++++++++++++++++++++++++++++----- cmake/Modules/PostInstall.cmake | 83 ++++++++++++++++++ cmake/Modules/ServiceScript.cmake | 2 +- 12 files changed, 463 insertions(+), 46 deletions(-) create mode 100644 cmake/Modules/FindLibFec.cmake create mode 100644 cmake/Modules/FindLibRely.cmake create mode 100644 cmake/Modules/FindLibconfig++.cmake create mode 100644 cmake/Modules/FindLibconfig.cmake create mode 100644 cmake/Modules/License.txt create mode 100644 cmake/Modules/PostInstall.cmake (limited to 'cmake/Modules') diff --git a/cmake/Modules/BuildMacros.cmake b/cmake/Modules/BuildMacros.cmake index ed95259b2..c57aaa73c 100644 --- a/cmake/Modules/BuildMacros.cmake +++ b/cmake/Modules/BuildMacros.cmake @@ -21,7 +21,7 @@ macro(build_executable exec) cmake_parse_arguments(ARG "NO_INSTALL" "COMPONENT" - "SOURCES;LINK_LIBRARIES;DEPENDS;INCLUDE_DIRS;DEFINITIONS;LINK_FLAGS" + "SOURCES;LINK_LIBRARIES;DEPENDS;INCLUDE_DIRS;DEFINITIONS;COMPILE_OPTIONS;LINK_FLAGS" ${ARGN} ) @@ -48,6 +48,10 @@ macro(build_executable exec) add_dependencies(${exec}-bin ${ARG_DEPENDS}) endif() + if (ARG_COMPILE_OPTIONS) + target_compile_options(${exec}-bin ${ARG_COMPILE_OPTIONS}) + endif() + if(ARG_DEFINITIONS) target_compile_definitions(${exec}-bin PRIVATE ${ARG_DEFINITIONS}) endif() @@ -73,10 +77,15 @@ macro(build_library lib) cmake_parse_arguments(ARG "SHARED;STATIC;NO_DEV" "COMPONENT;" - "SOURCES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS;INCLUDE_DIRS;DEFINITIONS;INSTALL_ROOT_DIR;INSTALL_FULL_PATH_DIR;EMPTY_PREFIX;" + "SOURCES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS;INCLUDE_DIRS;DEFINITIONS;HEADER_ROOT_DIR;LIBRARY_ROOT_DIR;INSTALL_FULL_PATH_DIR;EMPTY_PREFIX;COMPILE_OPTIONS;VERSION" ${ARGN} ) + message(STATUS "Building library ${lib}") + + # Clear target_libs + unset(TARGET_LIBS) + if (ARG_SHARED) list(APPEND TARGET_LIBS ${lib}.shared @@ -128,13 +137,13 @@ macro(build_library lib) endif() if (WIN32) - target_compile_options(${library} PRIVATE) + target_compile_options(${library} PRIVATE ${ARG_COMPILE_OPTIONS}) set_target_properties(${library} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE ) else () - target_compile_options(${library} PRIVATE -Wall) + target_compile_options(${library} PRIVATE -Wall ${ARG_COMPILE_OPTIONS}) set_target_properties(${library} PROPERTIES OUTPUT_NAME ${lib} @@ -157,7 +166,14 @@ macro(build_library lib) ) endif() - set(INSTALL_LIB_PATH ${CMAKE_INSTALL_LIBDIR}) + if(ARG_VERSION) + set_target_properties(${library} + PROPERTIES + VERSION ${ARG_VERSION} + ) + endif() + + set(INSTALL_LIB_PATH "${CMAKE_INSTALL_LIBDIR}/${ARG_LIBRARY_ROOT_DIR}") if (ARG_INSTALL_FULL_PATH_DIR) set(INSTALL_LIB_PATH ${ARG_INSTALL_FULL_PATH_DIR}) @@ -178,8 +194,8 @@ macro(build_library lib) # install headers if(ARG_INSTALL_HEADERS) - if (NOT ARG_INSTALL_ROOT_DIR) - set(ARG_INSTALL_ROOT_DIR "hicn") + if (NOT ARG_HEADER_ROOT_DIR) + set(ARG_HEADER_ROOT_DIR "hicn") endif() list(APPEND local_comps @@ -197,7 +213,7 @@ macro(build_library lib) if ("${dir}" STREQUAL includes) set(dir "") endif() - if ("${dir}" STREQUAL ${ARG_INSTALL_ROOT_DIR}) + if ("${dir}" STREQUAL ${ARG_HEADER_ROOT_DIR}) set(dir "") endif() else() @@ -210,12 +226,60 @@ macro(build_library lib) endif() install( FILES ${file} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${ARG_INSTALL_ROOT_DIR}/${dir} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${ARG_HEADER_ROOT_DIR}/${dir} COMPONENT ${COMPONENT} ) endforeach() endif() endmacro() +macro (build_module module) + cmake_parse_arguments(ARG + "SHARED;STATIC;NO_DEV" + "COMPONENT;" + "SOURCES;LINK_LIBRARIES;INSTALL_HEADERS;DEPENDS;INCLUDE_DIRS;DEFINITIONS;HEADER_ROOT_DIR;LIBRARY_ROOT_DIR;INSTALL_FULL_PATH_DIR;EMPTY_PREFIX;COMPILE_OPTIONS;VERSION" + ${ARGN} + ) + + message(STATUS "Building module ${module}") + + build_library(${module} + SHARED + SOURCES ${ARG_SOURCES} + LINK_LIBRARIES ${ARG_LINK_LIBRARIES} + INSTALL_HEADERS ${ARG_INSTALL_HEADERS} + DEPENDS ${ARG_DEPENDS} + COMPONENT lib${LIBTRANSPORT} + INCLUDE_DIRS ${ARG_INCLUDE_DIRS} + HEADER_ROOT_DIR ${ARG_HEADER_ROOT_DIR} + LIBRARY_ROOT_DIR ${ARG_LIBRARY_ROOT_DIR} + INSTALL_FULL_PATH_DIR ${ARG_INSTALL_FULL_PATH_DIR} + DEFINITIONS ${ARG_DEFINITIONS} + EMPTY_PREFIX ${ARG_EMPTY_PREFIX} + COMPILE_OPTIONS ${ARG_COMPILE_OPTIONS} + VERSION ${ARG_VERSION} + ) + + if (${CMAKE_SYSTEM_NAME} MATCHES Darwin) + set(LINK_FLAGS "-Wl,-undefined,dynamic_lookup") + elseif(${CMAKE_SYSTEM_NAME} MATCHES iOS) + set(LINK_FLAGS "-Wl,-undefined,dynamic_lookup") + elseif(${CMAKE_SYSTEM_NAME} MATCHES Linux) + set(LINK_FLAGS "-Wl,-unresolved-symbols=ignore-all") + elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows) + set(LINK_FLAGS "/wd4275") + else() + message(FATAL_ERROR "Trying to build module on a not supportd platform. Aborting.") + endif() + + set_target_properties(${module}.shared + PROPERTIES + LINKER_LANGUAGE C + PREFIX "" + LINK_FLAGS ${LINK_FLAGS} + ) + +endmacro(build_module) + include(IosMacros) include(WindowsMacros) diff --git a/cmake/Modules/FindCollectd.cmake b/cmake/Modules/FindCollectd.cmake index 76d2df43f..244fd14e5 100644 --- a/cmake/Modules/FindCollectd.cmake +++ b/cmake/Modules/FindCollectd.cmake @@ -25,21 +25,15 @@ find_path(COLLECTD_INCLUDE_DIR collectd.h DOC "Find the collectd includes" ) -find_path(COLLECTD_COMMON_INCLUDE_DIR common.h - HINTS ${COLLECTD_SEARCH_PATH_LIST} - PATH_SUFFIXES include/collectd/core/daemon/ utils/common/ - DOC "Find the collectd includes" -) - find_path(COLLECTD_CONFIG_INCLUDE_DIR config.h HINTS ${COLLECTD_SEARCH_PATH_LIST} PATH_SUFFIXES include/collectd/core/ DOC "Find the collectd includes" ) -message(STATUS ${COLLECTD_INCLUDE_DIR} ${COLLECTD_COMMON_INCLUDE_DIR} ${COLLECTD_CONFIG_INCLUDE_DIR}) +message(STATUS ${COLLECTD_INCLUDE_DIR} ${COLLECTD_CONFIG_INCLUDE_DIR}) -set(COLLECTD_INCLUDE_DIRS ${COLLECTD_INCLUDE_DIR} ${COLLECTD_COMMON_INCLUDE_DIR} ${COLLECTD_CONFIG_INCLUDE_DIR}) +set(COLLECTD_INCLUDE_DIRS ${COLLECTD_INCLUDE_DIR} ${COLLECTD_CONFIG_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Collectd DEFAULT_MSG COLLECTD_INCLUDE_DIRS) diff --git a/cmake/Modules/FindLibFec.cmake b/cmake/Modules/FindLibFec.cmake new file mode 100644 index 000000000..f8b33ad6b --- /dev/null +++ b/cmake/Modules/FindLibFec.cmake @@ -0,0 +1,24 @@ +set(LIBFEC_SEARCH_PATH_LIST + ${LIBFEC_HOME} + $ENV{DEPENDENCIES} + $ENV{LIBFEC_HOME} + /usr/local + /opt + /usr + ) + +find_path(LIBFEC_INCLUDE_DIR fec/version.h + HINTS ${LIBFEC_SEARCH_PATH_LIST} + PATH_SUFFIXES include + DOC "Find the LibFec includes" ) + +find_library(LIBFEC_LIBRARY NAMES fec + HINTS ${LIBFEC_SEARCH_PATH_LIST} + PATH_SUFFIXES lib + DOC "Find the LibFec libraries" ) + +set(LIBFEC_LIBRARIES ${LIBFEC_LIBRARY}) +set(LIBFEC_INCLUDE_DIRS ${LIBFEC_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibFec DEFAULT_MSG LIBFEC_LIBRARY LIBFEC_INCLUDE_DIR) \ No newline at end of file diff --git a/cmake/Modules/FindLibRely.cmake b/cmake/Modules/FindLibRely.cmake new file mode 100644 index 000000000..4b8960041 --- /dev/null +++ b/cmake/Modules/FindLibRely.cmake @@ -0,0 +1,24 @@ +set(LIBRELY_SEARCH_PATH_LIST + ${LIBRELY_HOME} + $ENV{DEPENDENCIES} + $ENV{LIBRELY_HOME} + /usr/local + /opt + /usr + ) + +find_path(LIBRELY_INCLUDE_DIR rely/version.hpp + HINTS ${LIBRELY_SEARCH_PATH_LIST} + PATH_SUFFIXES include + DOC "Find the LibRely includes" ) + +find_library(LIBRELY_LIBRARY NAMES rely + HINTS ${LIBRELY_SEARCH_PATH_LIST} + PATH_SUFFIXES lib + DOC "Find the LibRely libraries" ) + +set(LIBRELY_LIBRARIES ${LIBRELY_LIBRARY}) +set(LIBRELY_INCLUDE_DIRS ${LIBRELY_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibRely DEFAULT_MSG LIBRELY_LIBRARY LIBRELY_INCLUDE_DIR) \ No newline at end of file diff --git a/cmake/Modules/FindLibconfig++.cmake b/cmake/Modules/FindLibconfig++.cmake new file mode 100644 index 000000000..8dfc5fbe8 --- /dev/null +++ b/cmake/Modules/FindLibconfig++.cmake @@ -0,0 +1,44 @@ +set(LIBCONFIG_SEARCH_PATH_LIST + ${LIBCONFIG_HOME} + $ENV{LIBCONFIG_HOME} + /usr/local + /opt + /usr +) + +find_path(LIBCONFIG_INCLUDE_DIR libconfig.h++ + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES include + DOC "Find the libconfig include" +) + +if (WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library(LIBCONFIG_CPP_LIBRARIES NAMES libconfig++.lib + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib/x64 + DOC "Find the libconfig libraries" + ) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + find_library(LIBCONFIG_CPP_LIBRARIES NAMES libconfig++.lib + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib/x32 + DOC "Find the libconfig libraries" + ) + endif() +else() + find_library(LIBCONFIG_CPP_LIBRARY NAMES config++ + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib + DOC "Find the libconfig++ libraries" + ) +endif() + +set(LIBCONFIG_CPP_LIBRARIES ${LIBCONFIG_CPP_LIBRARY}) +set(LIBCONFIG_INCLUDE_DIRS ${LIBCONFIG_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libconfig++ LIBCONFIG_CPP_LIBRARIES LIBCONFIG_INCLUDE_DIRS) + + +mark_as_advanced(LIBCONFIG_CPP_LIBRARIES LIBCONFIG_INCLUDE_DIRS) diff --git a/cmake/Modules/FindLibconfig.cmake b/cmake/Modules/FindLibconfig.cmake new file mode 100644 index 000000000..55d2a0fad --- /dev/null +++ b/cmake/Modules/FindLibconfig.cmake @@ -0,0 +1,43 @@ +set(LIBCONFIG_SEARCH_PATH_LIST + ${LIBCONFIG_HOME} + $ENV{LIBCONFIG_HOME} + /usr/local + /opt + /usr +) + +find_path(LIBCONFIG_INCLUDE_DIR libconfig.h + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES include + DOC "Find the libconfig include" +) + +if (WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library(LIBCONFIG_LIBRARY NAMES libconfig.lib + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib/x64 + DOC "Find the libconfig libraries" + ) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + find_library(LIBCONFIG_LIBRARY NAMES libconfig.lib + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib/x32 + DOC "Find the libconfig libraries" + ) + endif() +else() + find_library(LIBCONFIG_LIBRARY NAMES config + HINTS ${LIBCONFIG_SEARCH_PATH_LIST} + PATH_SUFFIXES lib + DOC "Find the libconfig libraries" + ) +endif() + +set(LIBCONFIG_LIBRARIES ${LIBCONFIG_LIBRARY}) +set(LIBCONFIG_INCLUDE_DIRS ${LIBCONFIG_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libconfig LIBCONFIG_LIBRARIES LIBCONFIG_INCLUDE_DIRS) + +mark_as_advanced(LIBCONFIG_LIBRARIES LIBCONFIG_INCLUDE_DIRS) diff --git a/cmake/Modules/FindLibhicn.cmake b/cmake/Modules/FindLibhicn.cmake index 38775be6a..5f241a6cd 100644 --- a/cmake/Modules/FindLibhicn.cmake +++ b/cmake/Modules/FindLibhicn.cmake @@ -44,7 +44,7 @@ find_library(HICN_LIBRARY NAMES hicn set(HICN_LIBRARIES ${HICN_LIBRARY}) if (${CMAKE_SYSTEM_NAME} STREQUAL "Android") -set(HICN_LIBRARIES ${HICN_LIBRARIES} log) + set(HICN_LIBRARIES ${HICN_LIBRARIES} log) endif() set(HICN_INCLUDE_DIRS ${HICN_INCLUDE_DIR}) diff --git a/cmake/Modules/GTestImport.cmake b/cmake/Modules/GTestImport.cmake index cdca922d6..d9d182578 100644 --- a/cmake/Modules/GTestImport.cmake +++ b/cmake/Modules/GTestImport.cmake @@ -18,13 +18,12 @@ include(ExternalProject) ExternalProject_Add(gtest URL https://github.com/google/googletest/archive/v1.10.x.zip PREFIX ${CMAKE_BINARY_DIR}/gtest + BUILD_BYPRODUCTS + ${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgmock_main.a + ${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgmock.a + ${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgtest_main.a + ${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgtest.a INSTALL_COMMAND "" - - # Necessary to build using ninja - BUILD_BYPRODUCTS "${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgmock.a" - BUILD_BYPRODUCTS "${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgmock_main.a" - BUILD_BYPRODUCTS "${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgtest_main.a" - BUILD_BYPRODUCTS "${CMAKE_BINARY_DIR}/gtest/src/gtest-build/lib/libgtest.a" ) ExternalProject_Get_Property(gtest source_dir binary_dir) @@ -35,4 +34,12 @@ message (STATUS "GTest libs: ${binary_dir}/lib/libgmock_main.a ${binary_dir}/lib set(GTEST_INCLUDE_DIRS ${source_dir}/googlemock/include ${source_dir}/googletest/include) set(GTEST_LIBRARIES ${binary_dir}/lib/libgmock_main.a ${binary_dir}/lib/libgmock.a ${binary_dir}/lib/libgtest_main.a ${binary_dir}/lib/libgtest.a) -enable_testing() \ No newline at end of file +macro(add_test_internal test) + if(${CMAKE_VERSION} VERSION_GREATER "3.10.0") + gtest_discover_tests(${test}-bin TEST_PREFIX new:) + else() + add_test(NAME ${test}-bin COMMAND ${test}) + endif() +endmacro(add_test_internal) + +enable_testing() diff --git a/cmake/Modules/License.txt b/cmake/Modules/License.txt new file mode 100644 index 000000000..4d84c0dc7 --- /dev/null +++ b/cmake/Modules/License.txt @@ -0,0 +1,12 @@ +Copyright (c) 2017-2021 Cisco and/or its affiliates. +Licensed 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. \ No newline at end of file diff --git a/cmake/Modules/Packager.cmake b/cmake/Modules/Packager.cmake index 1edfd671d..f27479188 100644 --- a/cmake/Modules/Packager.cmake +++ b/cmake/Modules/Packager.cmake @@ -26,10 +26,10 @@ function(get_next_version VERSION NEXT_VERSION) list(GET VER_NUMBERS 0 major) list(GET VER_NUMBERS 1 minor) - math(EXPR minor "${minor} + 3") + math(EXPR minor "${minor} + 4") if (minor GREATER 12) - set(minor "1") + math(EXPR minor "${minor} % 12") math(EXPR major "${major} + 1") endif() @@ -52,17 +52,17 @@ macro(extract_version) if (NOT VER) set(VER "v1.2-0-gcafe") endif() - message(STATUS "Git describe output: ${VER}") - string(REGEX REPLACE "v([0-9]+).([0-9]+).*-([0-9]+)-(g[0-9a-f]+)" "\\1;\\2;\\3;\\4" VER ${VER}) + string(REGEX REPLACE "v([0-9]+).([0-9]+)-?(.*)?-([0-9]+)-(g[0-9a-f]+)" "\\1;\\2;\\3;\\4;\\5;" VER ${VER}) list(GET VER 0 VERSION_MAJOR) list(GET VER 1 VERSION_MINOR) - list(GET VER 2 VERSION_REVISION) - list(GET VER 3 COMMIT_NAME) + list(GET VER 2 RELEASE_CANDIDATE) + list(GET VER 3 VERSION_REVISION) + list(GET VER 4 COMMIT_NAME) endmacro(extract_version) -macro(make_packages) +function(make_packages) if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # parse /etc/os-release file(READ "/etc/os-release" os_version) @@ -78,6 +78,7 @@ macro(make_packages) message(STATUS "Version major: ${VERSION_MAJOR}") message(STATUS "Version minor: ${VERSION_MINOR}") + message(STATUS "Release: ${RELEASE_CANDIDATE}") message(STATUS "Revision: ${VERSION_REVISION}") message(STATUS "Commit hash: ${COMMIT_NAME}") @@ -91,24 +92,43 @@ macro(make_packages) else() set(bld "b$ENV{BUILD_NUMBER}") endif() - - message("Build number is: ${bld}") + message(STATUS "Build number is: ${bld}") #define DEB and RPM version numbers - if(${commit_num} EQUAL 0) - set(deb_ver "${tag}") - set(rpm_ver "${tag}") + if(NOT RELEASE_CANDIDATE) + if (commit_num) + set(deb_ver "${tag}.${commit_num}-release") + set(rpm_ver "${tag}.${commit_num}") + else() + set(deb_ver "${tag}-release") + set(rpm_ver "${tag}") + endif() + set(rpm_release "release") else() - set(deb_ver "${tag}-${commit_num}-release") - set(rpm_ver "${tag}-${commit_num}-release") + # TODO To be changed for next release with + # set(deb_ver "${tag}${RELEASE_CANDIDATE}~${commit_num}") + # set(rpm_ver "${tag}") + # set(rpm_release "${RELEASE_CANDIDATE}~${commit_num}") + set(deb_ver "${tag}-${commit_num}") + set(rpm_ver "${tag}-${commit_num}") + set(rpm_release "1") endif() + message(STATUS "Version: ${deb_ver}") + get_next_version(${tag} next_version) + message(STATUS "Next version: ${next_version}") get_cmake_property(components COMPONENTS) list(REMOVE_ITEM components "Unspecified") set(CPACK_COMPONENTS_ALL ${components}) + list(LENGTH components N_COMPONENTS) + + if (NOT N_COMPONENTS) + return() + endif() + if(OS_ID MATCHES "debian" OR OS_ID_LIKE MATCHES "debian") set(CPACK_GENERATOR "DEB") set(type "DEBIAN") @@ -119,7 +139,7 @@ macro(make_packages) OUTPUT_STRIP_TRAILING_WHITESPACE ) - set(CPACK_PACKAGE_VERSION "${deb_ver}") + set(CPACK_${type}_PACKAGE_VERSION "${deb_ver}") foreach(lc ${components}) if (${lc} MATCHES ".*Unspecified.*") continue() @@ -152,7 +172,8 @@ macro(make_packages) OUTPUT_STRIP_TRAILING_WHITESPACE ) - set(CPACK_PACKAGE_VERSION "${rpm_ver}") + set(CPACK_${type}_PACKAGE_VERSION "${rpm_ver}") + set(CPACK_${type}_PACKAGE_RELEASE "${rpm_release}") foreach(lc ${components}) if (${lc} MATCHES ".*Unspecified.*") continue() @@ -162,7 +183,7 @@ macro(make_packages) set(CPACK_${type}_${uc}_DESCRIPTION "${${lc}_DESCRIPTION}") set(RPM_DEPS) - if (NOT ${${lc}_DEB_DEPENDENCIES} STREQUAL "") + if (NOT ${${lc}_RPM_DEPENDENCIES} STREQUAL "") string(REPLACE "stable_version" ${tag} RPM_DEPS ${${lc}_RPM_DEPENDENCIES}) string(REPLACE "next_version" ${next_version} RPM_DEPS ${RPM_DEPS}) endif() @@ -176,7 +197,7 @@ macro(make_packages) endif() set(CPACK_RPM_${uc}_PACKAGE_NAME "${package_name}") - set(CPACK_${type}_${uc}_FILE_NAME "${package_name}-${rpm_ver}.${arch}.rpm") + set(CPACK_${type}_${uc}_FILE_NAME "${package_name}-${rpm_ver}-${rpm_release}.${arch}.rpm") if (NOT ${${lc}_RPM_POST_INSTALL_SCRIPT_FILE} STREQUAL "") set(CPACK_RPM_${uc}_POST_INSTALL_SCRIPT_FILE "${${lc}_RPM_POST_INSTALL_SCRIPT_FILE}") @@ -199,8 +220,109 @@ macro(make_packages) set(CPACK_COMPONENTS_IGNORE_GROUPS 1) set(CPACK_${CPACK_GENERATOR}_COMPONENT_INSTALL ON) set(CPACK_${type}_PACKAGE_MAINTAINER "HICN Team") - set(CPACK_${type}_PACKAGE_RELEASE 1) + set(CPACK_PACKAGE_CONTACT ${CONTACT}) include(CPack) endif() + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR ${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(CMAKE_SKIP_BUILD_RPATH FALSE) + set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) + set(CMAKE_INSTALL_RPATH /opt/hicn) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + set(CPACK_SET_DESTDIR true) + set(CMAKE_INSTALL_RPATH "\${CPACK_INSTALL_PREFIX}") + set(CMAKE_SKIP_INSTALL_RPATH FALSE) + set(HICN_DEPENDECIES_INSTALLER "${LIBTRANSPORT_LIBRARIES_LIST};${FACEMGR_LIBRARY_LIST};${APPS_LIBRARY_LIST}") + separate_arguments(HICN_DEPENDECIES_INSTALLER) + foreach (HICN_DEPENDECY ${HICN_DEPENDECIES_INSTALLER}) + get_filename_component(DEPENDENCY_NAME "${HICN_DEPENDECY}" NAME) + get_filename_component(DEPENDENCY "${HICN_DEPENDECY}" REALPATH) + get_filename_component(DEPENDENCY_PATH "${DEPENDENCY}" DIRECTORY) + install(FILES ${DEPENDENCY} DESTINATION lib COMPONENT dependencies) + endforeach() + set(CPACK_PACKAGE_NAME "hicn") + extract_version() + set(CPACK_PACKAGE_VENDOR "${PACKAGE_VENDOR}") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "hICN") + set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}") + set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") + set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") + set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_REVISION}") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "hICN Components") + set(CPACK_COMPONENTS_ALL dependencies ${HICN_UTILS} ${HICN_LIGHT} ${HICN_APPS} ${FACEMGR} lib${LIBTRANSPORT} ${LIBTRANSPORT}-dev lib${LIBHICN} ${LIBHICN}-dev ${HICN_UTILS}-dev ${HICN_LIGHT}-dev ${HICN_APPS}-dev ${FACEMGR}-dev) + set(CPACK_COMPONENT_DEPENDENCIES_DISPLAY_NAME "Dependencies") + if (HICN_UTILS) + string(TOUPPER ${HICN_UTILS} HICN_UTILS_UPPERCASE) + set(CPACK_COMPONENT_${HICN_UTILS_UPPERCASE}_DISPLAY_NAME "hICN utils") + set(CPACK_COMPONENT_${HICN_UTILS_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${HICN_UTILS_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_APPS_DEV_UPPERCASE}_DISPLAY_NAME "hicn-apps headers") + endif() + string(TOUPPER ${HICN_LIGHT} HICN_LIGHT_UPPERCASE) + if (HICN_APPS) + string(TOUPPER ${HICN_APPS} HICN_APPS_UPPERCASE) + string(TOUPPER ${HICN_APPS}-dev HICN_APPS_DEV_UPPERCASE) + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_DISPLAY_NAME "hICN apps") + set(CPACK_COMPONENT_${HICN_APPS_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_APPS_DEV_UPPERCASE}_INSTALL_TYPES Full) + endif() + if (FACEMGR) + string(TOUPPER ${FACEMGR} FACEMGR_UPPERCASE) + string(TOUPPER ${FACEMGR}-dev FACEMGR_DEV_UPPERCASE) + set(CPACK_COMPONENT_${FACEMGR_DEV_UPPERCASE}_DISPLAY_NAME "facemgr headers") + set(CPACK_COMPONENT_${FACEMGR_UPPERCASE}_DISPLAY_NAME "facemgr") + set(CPACK_COMPONENT_${FACEMGR_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${FACEMGR_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${FACEMGR_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${FACEMGR_DEV_UPPERCASE}_INSTALL_TYPES Full) + endif() + string(TOUPPER lib${LIBTRANSPORT} LIBTRANSPORT_UPPERCASE) + string(TOUPPER ${LIBTRANSPORT}-dev LIBTRANSPORT_DEV_UPPERCASE) + string(TOUPPER lib${LIBHICN} LIBHICN_UPPERCASE) + string(TOUPPER ${LIBHICN}-dev LIBHICN_DEV_UPPERCASE) + string(TOUPPER ${HICN_UTILS}-dev HICN_UTILS_DEV_UPPERCASE) + string(TOUPPER ${HICN_LIGHT}-dev HICN_LIGHT_DEV_UPPERCASE) + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_DISPLAY_NAME "hICN light apps") + set(CPACK_COMPONENT_${LIBTRANSPORT_UPPERCASE}_DISPLAY_NAME "libtransport libs") + set(CPACK_COMPONENT_${LIBHICN_UPPERCASE}_DISPLAY_NAME "hicn libs") + set(CPACK_COMPONENT_${LIBTRANSPORT_DEV_UPPERCASE}_DISPLAY_NAME "libtransport headers") + set(CPACK_COMPONENT_${LIBHICN_DEV_UPPERCASE}_DISPLAY_NAME "hicn headers") + set(CPACK_COMPONENT_${HICN_UTILS_DEV_UPPERCASE}_DISPLAY_NAME "hicn utils headers") + set(CPACK_COMPONENT_${HICN_LIGHT_DEV_UPPERCASE}_DISPLAY_NAME "hicn-light headers") + set (CPACK_RESOURCE_FILE_LICENSE + "${PROJECT_SOURCE_DIR}/cmake/Modules/License.txt") + set(CPACK_COMPONENT_DEPENDENCIES_DESCRIPTION + "All dependency libreries") + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${LIBTRANSPORT_UPPERCASE}_GROUP "Libraries") + set(CPACK_COMPONENT_${LIBHICN_UPPERCASE}_GROUP "Libraries") + set(CPACK_COMPONENT_${LIBTRANSPORT_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${LIBHICN_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${HICN_UTILS_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${HICN_LIGHT_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_DEPENDENCIES_GROUP "Dependencies") + set(CPACK_COMPONENT_GROUP_DEVELOPMENT_EXPANDED ON) + set(CPACK_COMPONENT_GROUP_DEPENDENCIES_DESCRIPTION + "All dependency libreries") + set(CPACK_ALL_INSTALL_TYPES Full Developer) + set(CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Everything") + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${LIBTRANSPORT_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${LIBHICN_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${LIBTRANSPORT_DEV_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${LIBHICN_DEV_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_UTILS_DEV_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_LIGHT_DEV_UPPERCASE}_INSTALL_TYPES Full) + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(CMAKE_INSTALL_RPATH /opt/hicn) + + set(CPACK_INSTALL_PREFIX "/opt/hicn") + set(CPACK_GENERATOR productbuild) + set( CPACK_PRE_BUILD_SCRIPTS "${PROJECT_SOURCE_DIR}/cmake/Modules/PostInstall.cmake") + else() + set(CPACK_INSTALL_PREFIX "c:/Program Files/hicn") + endif() + include(CPack) endif() -endmacro() +endfunction() diff --git a/cmake/Modules/PostInstall.cmake b/cmake/Modules/PostInstall.cmake new file mode 100644 index 000000000..89c7b9f68 --- /dev/null +++ b/cmake/Modules/PostInstall.cmake @@ -0,0 +1,83 @@ +function(change_rpath LIB_PATH TYPE) + execute_process ( + COMMAND bash -c "ls ${LIB_PATH}" + OUTPUT_VARIABLE ITEMS + ) + string(REPLACE "\n" ";" ITEMS ${ITEMS}) + + separate_arguments(ITEMS) + foreach (ITEM ${ITEMS}) + if (NOT ITEM MATCHES ".a$") + if (TYPE STREQUAL "LIB") + execute_process ( + COMMAND bash -c "otool -L ${LIB_PATH}/${ITEM} | head -2 | tail -1| sed -e 's/^[[:space:]]*//'|awk '{print $1;}'" + OUTPUT_VARIABLE OTOOL_OUTPUT + ) + string(REPLACE "\n" "" OTOOL_OUTPUT ${OTOOL_OUTPUT}) + + execute_process ( + COMMAND bash -c "basename ${OTOOL_OUTPUT}| sed -e 's/^[[:space:]]*//'" + OUTPUT_VARIABLE BASENAME + ) + string(REPLACE "\n" "" BASENAME ${BASENAME}) + execute_process ( + COMMAND bash -c "install_name_tool -id ${CPACK_INSTALL_PREFIX}/${BASENAME} ${LIB_PATH}/${ITEM}" + OUTPUT_VARIABLE OUTPUT_INSTALL_NAME_TOOL + ) + #change rpath + execute_process ( + COMMAND bash -c "otool -L ${LIB_PATH}/${ITEM} | tail -n +3| sed -e 's/^[[:space:]]*//'|awk '{print $1;}'" + OUTPUT_VARIABLE OTOOL_OUTPUTS + ) + else () + #change rpath + execute_process ( + COMMAND bash -c "otool -L ${LIB_PATH}/${ITEM} | tail -n +2| sed -e 's/^[[:space:]]*//'|awk '{print $1;}'" + OUTPUT_VARIABLE OTOOL_OUTPUTS + ) + endif () + string(REPLACE "\n" ";" OTOOL_OUTPUTS ${OTOOL_OUTPUTS}) + separate_arguments(OTOOL_OUTPUTS) + foreach (OTOOL_OUTPUT ${OTOOL_OUTPUTS}) + execute_process ( + COMMAND bash -c "basename ${OTOOL_OUTPUT}| sed -e 's/^[[:space:]]*//'" + OUTPUT_VARIABLE BASENAME + ) + string(REPLACE "\n" "" BASENAME ${BASENAME}) + execute_process ( + COMMAND bash -c "dirname ${OTOOL_OUTPUT}| sed -e 's/^[[:space:]]*//'" + OUTPUT_VARIABLE DIRNAME + ) + string(REPLACE "\n" "" DIRNAME ${DIRNAME}) + if(NOT DIRNAME MATCHES "/usr/lib") + execute_process ( + COMMAND bash -c "install_name_tool -change ${OTOOL_OUTPUT} ${CPACK_INSTALL_PREFIX}/${BASENAME} ${LIB_PATH}/${ITEM}" + OUTPUT_VARIABLE OUTPUT_INSTALL_NAME_TOOL + ) + endif() + + endforeach() + endif() + endforeach() +endfunction() +string(TOLOWER ${CPACK_COMPONENT_DEPENDENCIES_GROUP} CPACK_COMPONENT_DEPENDENCIES_GROUP ) +set(LIB_PATH "${CPACK_TEMPORARY_DIRECTORY}/${CPACK_COMPONENT_DEPENDENCIES_GROUP}${CPACK_INSTALL_PREFIX}/lib") +change_rpath(${LIB_PATH} LIB) + +set(LIB_PATH "${CPACK_TEMPORARY_DIRECTORY}/facemgr${CPACK_INSTALL_PREFIX}/lib") +change_rpath(${LIB_PATH} LIB) +set(LIB_PATH "${CPACK_TEMPORARY_DIRECTORY}/libhicntransport${CPACK_INSTALL_PREFIX}/lib") +change_rpath(${LIB_PATH} LIB) +set(LIB_PATH "${CPACK_TEMPORARY_DIRECTORY}/libhicn${CPACK_INSTALL_PREFIX}/lib") +change_rpath(${LIB_PATH} LIB) + +set(EXE_PATH "${CPACK_TEMPORARY_DIRECTORY}/hicn-utils${CPACK_INSTALL_PREFIX}/bin") +change_rpath(${EXE_PATH} EXE) +set(EXE_PATH "${CPACK_TEMPORARY_DIRECTORY}/hicn-light${CPACK_INSTALL_PREFIX}/bin") +change_rpath(${EXE_PATH} EXE) +set(EXE_PATH "${CPACK_TEMPORARY_DIRECTORY}/hicn-apps${CPACK_INSTALL_PREFIX}/bin") +change_rpath(${EXE_PATH} EXE) +set(EXE_PATH "${CPACK_TEMPORARY_DIRECTORY}/facemgr${CPACK_INSTALL_PREFIX}/bin") +change_rpath(${EXE_PATH} EXE) +#set(EXE_PATH "${CPACK_TEMPORARY_DIRECTORY}/hicnctrl${CPACK_INSTALL_PREFIX}/bin") +#change_rpath(${EXE_PATH} EXE) diff --git a/cmake/Modules/ServiceScript.cmake b/cmake/Modules/ServiceScript.cmake index 110aa816b..8e7056a5a 100644 --- a/cmake/Modules/ServiceScript.cmake +++ b/cmake/Modules/ServiceScript.cmake @@ -39,4 +39,4 @@ cmake_parse_arguments(ARG if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" AND ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr") install (FILES ${script} DESTINATION ${SYSTEMD_SERVICE_FOLDER} COMPONENT ${ARG_COMPONENT}) endif() -endmacro(install_service_script) \ No newline at end of file +endmacro(install_service_script) -- cgit 1.2.3-korg