From 7ca1c947dacd1cedee1a574228d2897277198907 Mon Sep 17 00:00:00 2001 From: Angelo Mantellini Date: Wed, 26 May 2021 11:18:35 +0200 Subject: [HICN-705] create packages for windows and mac os Signed-off-by: Angelo Mantellini Change-Id: Ie408cf35737b8c66d6de3ef49c2990ff4c868a50 --- apps/CMakeLists.txt | 1 + cmake/Modules/License.txt | 12 +++++ cmake/Modules/Packager.cmake | 108 +++++++++++++++++++++++++++++++++++++++- cmake/Modules/PostInstall.cmake | 83 ++++++++++++++++++++++++++++++ ctrl/facemgr/src/CMakeLists.txt | 2 + hicn-light/CMakeLists.txt | 2 + lib/includes/CMakeLists.txt | 2 + libtransport/CMakeLists.txt | 1 + 8 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 cmake/Modules/License.txt create mode 100644 cmake/Modules/PostInstall.cmake diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 9b9011800..37e44f9e7 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -61,6 +61,7 @@ list(APPEND LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ) +set(APPS_LIBRARY_LIST "${OPENSSL_LIBRARIES};${CMAKE_THREAD_LIBS_INIT}" CACHE INTERNAL "APPS_LIBRARY_LIST") if (WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4200 /wd4996") endif () 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 7aad1d7b0..b414f7169 100644 --- a/cmake/Modules/Packager.cmake +++ b/cmake/Modules/Packager.cmake @@ -52,7 +52,6 @@ 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;\\5;" VER ${VER}) @@ -93,7 +92,6 @@ function(make_packages) else() set(bld "b$ENV{BUILD_NUMBER}") endif() - message(STATUS "Build number is: ${bld}") #define DEB and RPM version numbers @@ -225,5 +223,111 @@ function(make_packages) 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") + string(TOUPPER ${HICN_UTILS} HICN_UTILS_UPPERCASE) + string(TOUPPER ${HICN_LIGHT} HICN_LIGHT_UPPERCASE) + string(TOUPPER ${HICN_APPS} HICN_APPS_UPPERCASE) + string(TOUPPER ${FACEMGR} FACEMGR_UPPERCASE) + + 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) + string(TOUPPER ${HICN_APPS}-dev HICN_APPS_DEV_UPPERCASE) + string(TOUPPER ${FACEMGR}-dev FACEMGR_DEV_UPPERCASE) + + set(CPACK_COMPONENT_${HICN_UTILS_UPPERCASE}_DISPLAY_NAME "hICN utils") + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_DISPLAY_NAME "hICN light apps") + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_DISPLAY_NAME "hICN apps") + set(CPACK_COMPONENT_${FACEMGR_UPPERCASE}_DISPLAY_NAME "facemgr") + 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_COMPONENT_${HICN_APPS_DEV_UPPERCASE}_DISPLAY_NAME "hicn-apps headers") + set(CPACK_COMPONENT_${FACEMGR_DEV_UPPERCASE}_DISPLAY_NAME "facemgr 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_UTILS_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_GROUP "Executables") + set(CPACK_COMPONENT_${FACEMGR_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_${HICN_APPS_DEV_UPPERCASE}_GROUP "Headers") + set(CPACK_COMPONENT_${FACEMGR_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_UTILS_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_LIGHT_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${HICN_APPS_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${FACEMGR_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) + set(CPACK_COMPONENT_${HICN_APPS_DEV_UPPERCASE}_INSTALL_TYPES Full) + set(CPACK_COMPONENT_${FACEMGR_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() 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/ctrl/facemgr/src/CMakeLists.txt b/ctrl/facemgr/src/CMakeLists.txt index 3650ef4f5..cf5606e04 100644 --- a/ctrl/facemgr/src/CMakeLists.txt +++ b/ctrl/facemgr/src/CMakeLists.txt @@ -68,6 +68,8 @@ set(LIBRARIES ${LIBEVENT_LIBRARY} ) +set(FACEMGR_LIBRARY_LIST "${LIBCONFIG_LIBRARIES};${LIBEVENT_LIBRARY}" CACHE INTERNAL "FACEMGR_LIBRARY_LIST") + add_subdirectory(interfaces) diff --git a/hicn-light/CMakeLists.txt b/hicn-light/CMakeLists.txt index db56feff7..c9a536dd6 100644 --- a/hicn-light/CMakeLists.txt +++ b/hicn-light/CMakeLists.txt @@ -91,6 +91,8 @@ set(HICN_LIGHT_LINK_LIBRARIES ${WINDOWS_LIBRARIES} ) +set(HICN_LIGHT_LIBRARIES_LIST "${LIBPARC_LIBRARIES};${CMAKE_THREAD_LIBS_INIT};${WINDOWS_LIBRARIES}" CACHE INTERNAL "HICN_LIGHT_LIBRARIES_LIST") + # Include dirs -- Order does matter! list(APPEND HICN_LIGHT_INCLUDE_DIRS diff --git a/lib/includes/CMakeLists.txt b/lib/includes/CMakeLists.txt index 12529bd57..6c2c34b86 100644 --- a/lib/includes/CMakeLists.txt +++ b/lib/includes/CMakeLists.txt @@ -54,3 +54,5 @@ set(LIBHICN_HEADER_FILES_UTIL PARENT_SCOPE ) +set_property(GLOBAL PROPERTY LIBHICN_HEADER_FILES_UTIL_PROPERTY "${LIBHICN_HEADER_FILES_UTIL}") + diff --git a/libtransport/CMakeLists.txt b/libtransport/CMakeLists.txt index 9d2b9069f..d94f2859b 100644 --- a/libtransport/CMakeLists.txt +++ b/libtransport/CMakeLists.txt @@ -105,6 +105,7 @@ list(APPEND LIBRARIES ${LIBCONFIG_CPP_LIBRARIES} ) +set(LIBTRANSPORT_LIBRARIES_LIST "${LIBPARC_LIBRARIES};${CMAKE_THREAD_LIBS_INIT};${VPP_LIBRARIES};${ANDROID_LIBRARIES};${OPENSSL_LIBRARIES};${WINDOWS_LIBRARIES};${LIBCONFIG_CPP_LIBRARIES}" CACHE INTERNAL "LIBTRANSPORT_LIBRARIES_LIST") # Include dirs -- Order does matter! list(APPEND LIBTRANSPORT_INTERNAL_INCLUDE_DIRS -- cgit 1.2.3-korg