diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/Modules/License.txt | 12 | ||||
-rw-r--r-- | cmake/Modules/Packager.cmake | 108 | ||||
-rw-r--r-- | cmake/Modules/PostInstall.cmake | 83 |
3 files changed, 201 insertions, 2 deletions
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) |