AusweisApp2/cmake/Install.cmake

214 lines
9.1 KiB
CMake

################################################
# Implements install target!
# It will be included by ./src/CMakeLists.txt
################################################
SET(TRANSLATION_DESTINATION translations)
SET(DEFAULT_FILE_DESTINATION .)
IF(CMAKE_PREFIX_PATH)
STRING(REPLACE "\\" "/" TOOLCHAIN_PATH ${CMAKE_PREFIX_PATH})
SET(TOOLCHAIN_BIN_PATH ${TOOLCHAIN_PATH}/bin)
SET(TOOLCHAIN_LIB_PATH ${TOOLCHAIN_PATH}/lib)
ENDIF()
SET(SEARCH_ADDITIONAL_DIRS "
SET(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\")
INCLUDE(Helper)
DIRLIST_OF_FILES(ADDITIONAL_DIRS ${CMAKE_BINARY_DIR}/src/*${CMAKE_SHARED_LIBRARY_SUFFIX})
")
IF(WIN32)
IF(MSVC)
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
IF(NOT CMAKE_VERSION VERSION_LESS "3.6")
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
ENDIF()
INCLUDE(InstallRequiredSystemLibraries)
ENDIF()
FETCH_TARGET_LOCATION(libSvg "Qt5::Svg")
FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin")
FETCH_TARGET_LOCATION(pluginGif "Qt5::QGifPlugin")
FETCH_TARGET_LOCATION(platformWin "Qt5::QWindowsIntegrationPlugin")
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${libSvg} DESTINATION . COMPONENT Runtime)
INSTALL(FILES ${pluginSvg} DESTINATION imageformats COMPONENT Runtime)
INSTALL(FILES ${pluginGif} DESTINATION imageformats COMPONENT Runtime)
INSTALL(FILES ${platformWin} DESTINATION platforms COMPONENT Runtime)
INSTALL(CODE
"
${SEARCH_ADDITIONAL_DIRS}
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\" \"${TOOLCHAIN_BIN_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
ELSEIF(APPLE AND NOT IOS)
SET(MACOS_BUNDLE_PLUGINS_DIR ../PlugIns)
SET(MACOS_BUNDLE_FRAMEWORKS_DIR ../Frameworks)
# We need to include the following (i.e. all) image format plug-ins,
# since those seem to be loaded upon program start-up. Not including
# them would cause the respective add-on from a Qt installation (if
# any) to be loaded, which would in turn cause the Qt libraries they
# depend on to be loaded as well, thus resulting in two sets of Qt
# libraries being loaded (ours from the bundle and the ones from the
# installation) and the program misbehaving (crashing).
FETCH_TARGET_LOCATION(platformMac "Qt5::QCocoaIntegrationPlugin")
FOREACH (qtComponent QtCore Qt5Gui Qt5Network Qt5Svg Qt5Widgets)
FOREACH(plugin ${${qtComponent}_PLUGINS})
GET_TARGET_PROPERTY(pluginPath ${plugin} LOCATION)
GET_FILENAME_COMPONENT(pluginDir ${pluginPath} DIRECTORY)
GET_FILENAME_COMPONENT(pluginName ${pluginPath} NAME)
GET_FILENAME_COMPONENT(pluginDirName ${pluginDir} NAME)
INSTALL(FILES ${pluginPath} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/${pluginDirName} COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/PlugIns/${pluginDirName}/${pluginName}")
ENDFOREACH()
ENDFOREACH()
INSTALL(TARGETS AusweisApp DESTINATION . COMPONENT Application)
INSTALL(FILES ${platformMac} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/platforms COMPONENT Runtime)
INSTALL(CODE
"
${SEARCH_ADDITIONAL_DIRS}
file(GLOB_RECURSE QTPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}\" \"\${QTPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtCore.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtGui.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtXml.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework")
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQml.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
ENDIF()
FOREACH (OPENSSL_LIBRARY ${OPENSSL_LIBRARIES})
GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_REAL ${OPENSSL_LIBRARY} REALPATH)
GET_FILENAME_COMPONENT(OPENSSL_LIBRARY_NAME ${OPENSSL_LIBRARY_REAL} NAME)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${OPENSSL_LIBRARY_NAME}")
ENDFOREACH()
# set it to parent scope to be able to access it from Packaging.cmake
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)
ELSEIF(IOS)
LIST(APPEND CMAKE_MODULE_PATH "${PACKAGING_DIR}/ios")
ELSEIF(ANDROID)
SET(ANDROID_DEST libs/${ANDROID_ABI})
SET(PERMISSIONS PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
INSTALL(TARGETS AusweisApp DESTINATION ${ANDROID_DEST} ${PERMISSIONS} COMPONENT Application)
SET(RESOURCES_IMG_ANDROID_DIR ${RESOURCES_DIR}/images/android)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/ldpi/npa.png DESTINATION res/drawable-ldpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/mdpi/npa.png DESTINATION res/drawable-mdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/hdpi/npa.png DESTINATION res/drawable-hdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xhdpi/npa.png DESTINATION res/drawable-xhdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xxhdpi/npa.png DESTINATION res/drawable-xxhdpi COMPONENT Runtime)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/xxxhdpi/npa.png DESTINATION res/drawable-xxxhdpi COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/nfc_tech_filter.xml DESTINATION res/xml COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/colors.xml DESTINATION res/values COMPONENT Runtime)
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
INSTALL(FILES ${JAVA_FILES} DESTINATION src COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2Sdk.aidl DESTINATION src/com/governikus/ausweisapp2/ COMPONENT Runtime)
INSTALL(FILES ${PACKAGING_DIR}/android/IAusweisApp2SdkCallback.aidl DESTINATION src/com/governikus/ausweisapp2/ COMPONENT Runtime)
SET(TRANSLATION_DESTINATION assets/translations)
SET(DEFAULT_FILE_DESTINATION assets)
ELSEIF(UNIX)
IF(BUILD_SHARED_LIBS)
SET(CMAKE_INSTALL_RPATH "\$ORIGIN")
ENDIF()
SET(DEFAULT_FILE_DESTINATION bin)
INSTALL(TARGETS AusweisApp DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Application)
INSTALL(CODE
"
${SEARCH_ADDITIONAL_DIRS}
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}/${EXECUTABLE_NAME}\" \"\" \"\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
CONFIGURE_FILE(${PACKAGING_DIR}/linux/AusweisApp2.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/AusweisApp2.desktop @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/AusweisApp2.desktop DESTINATION share/applications COMPONENT Application)
#INSTALL(FILES ${RESOURCES_DIR}/images/AusweisApp2.svg DESTINATION share/icons/hicolor/scalable/apps COMPONENT Application)
ENDIF()
IF(LINUX OR WIN32 OR MAC)
OPTION(SELFPACKER "Compress executable with self packer like UPX")
IF(SELFPACKER)
FIND_PACKAGE(SelfPackers)
IF(SELF_PACKER_FOR_EXECUTABLE)
MESSAGE(STATUS "Using SelfPacker: ${SELF_PACKER_FOR_EXECUTABLE} ${SELF_PACKER_FOR_EXECUTABLE_FLAGS}")
ELSE()
MESSAGE(FATAL_ERROR "Cannot find self packer")
ENDIF()
INSTALL(CODE
"
EXECUTE_PROCESS(COMMAND
${SELF_PACKER_FOR_EXECUTABLE} ${SELF_PACKER_FOR_EXECUTABLE_FLAGS} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}/${EXECUTABLE_NAME}\")
" COMPONENT Application)
ENDIF()
ENDIF()
IF(WIN32)
IF(SIGNTOOL_CMD)
CONFIGURE_FILE(${CMAKE_MODULE_PATH}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
INSTALL(CODE
"
EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" -DSIGN_EXT=*.exe -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}\")
" COMPONENT Application)
ENDIF()
ENDIF()
IF(LINUX)
INSTALL(FILES ${QM_FILES} DESTINATION ${TRANSLATION_DESTINATION} COMPONENT Translations)
ELSE()
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/translations/ DESTINATION ${TRANSLATION_DESTINATION} COMPONENT Translations)
ENDIF()
# resources file
INSTALL(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# secure storage file
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/config.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# qtlogging.ini
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# qml directory
IF(IOS OR ANDROID)
INSTALL(DIRECTORY ${RESOURCES_DIR}/qml DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
ENDIF()
# default-providers.json
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-providers.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
# default-supported-devices.json
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/default-supported-devices.json DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)