1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
|
################################################
# Implements install target!
# It will be included by ./src/CMakeLists.txt
################################################
if(MAC)
set(DEFAULT_FILE_DESTINATION ${PROJECT_NAME}.app/Contents/Resources)
else()
set(DEFAULT_FILE_DESTINATION .)
endif()
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})
")
set(DEPENDENCY_CHECK "
function(gp_resolved_file_type_override file type)
message(STATUS \"Collect dependency: \${file}\")
if(file MATCHES \"libstdc.+\.dll\"
OR file MATCHES \"libwinpthread-.+\.dll\"
OR file MATCHES \"libgcc_s_.+\.dll\"
OR file MATCHES \"libssp-.+\.dll\")
get_filename_component(path \"${CMAKE_CXX_COMPILER}\" DIRECTORY)
get_filename_component(pathDest \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}\" DIRECTORY)
if(NOT file MATCHES \"\${path}\" AND NOT file MATCHES \"\${pathDest}\")
message(FATAL_ERROR \"Wrong source path detected: \${file} | Should be: \${path} or \${pathDest}\")
endif()
endif()
endfunction()
")
# qt qml plugins (fixup_bundle needs to know this to fetch their dependencies)
if((WIN32 OR MAC) AND TARGET ${Qt}::Qml)
set(modules QtQuick QtQml Qt QtCore)
foreach(entry ${modules})
set(_lib_dir ${QT_INSTALL_ARCHDATA}/qml/${entry})
file(GLOB_RECURSE _libs "${_lib_dir}/*.dll" "${_lib_dir}/*.dylib")
list(APPEND LIBS ${_libs})
install(DIRECTORY ${_lib_dir} DESTINATION ${DEFAULT_FILE_DESTINATION}/qml COMPONENT Runtime PATTERN "*.dylib" EXCLUDE)
endforeach()
endif()
if(WIN32)
if(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG")
set(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
endif()
include(InstallRequiredSystemLibraries)
endif()
if(TARGET ${Qt}::Qml)
FETCH_TARGET_LOCATION(libQuickControls2 "${Qt}::QuickControls2")
install(FILES ${libQuickControls2} DESTINATION . COMPONENT Runtime)
list(APPEND LIBS ${libQuickControls2})
FETCH_TARGET_LOCATION(libQmlCore "${Qt}::QmlCore")
install(FILES ${libQmlCore} DESTINATION . COMPONENT Runtime)
list(APPEND LIBS ${libQmlCore})
if(TARGET ${Qt}::QmlWorkerScript)
FETCH_TARGET_LOCATION(libQmlWorkerScript "${Qt}::QmlWorkerScript")
install(FILES ${libQmlWorkerScript} DESTINATION . COMPONENT Runtime)
endif()
if(TARGET ${Qt}::Gui_EGL AND TARGET ${Qt}::Gui_GLESv2)
FETCH_TARGET_LOCATION(libEgl "${Qt}::Gui_EGL")
FETCH_TARGET_LOCATION(libGLES "${Qt}::Gui_GLESv2")
install(FILES ${libEgl} DESTINATION . COMPONENT Runtime)
install(FILES ${libGLES} DESTINATION . COMPONENT Runtime)
endif()
endif()
FETCH_TARGET_LOCATION(openSslBackend "${Qt}::QTlsBackendOpenSSLPlugin")
install(FILES ${openSslBackend} DESTINATION tls COMPONENT Runtime)
list(APPEND LIBS ${openSslBackend})
FETCH_TARGET_LOCATION(pluginSvg "${Qt}::QSvgPlugin")
FETCH_TARGET_LOCATION(pluginGif "${Qt}::QGifPlugin")
FETCH_TARGET_LOCATION(pluginJpeg "${Qt}::QJpegPlugin")
FETCH_TARGET_LOCATION(platformWin "${Qt}::QWindowsIntegrationPlugin")
FETCH_TARGET_LOCATION(styleWin "${Qt}::QModernWindowsStylePlugin")
install(TARGETS AusweisAppBinary DESTINATION . COMPONENT Application)
install(FILES ${pluginSvg} DESTINATION imageformats COMPONENT Runtime)
install(FILES ${pluginGif} DESTINATION imageformats COMPONENT Runtime)
install(FILES ${pluginJpeg} DESTINATION imageformats COMPONENT Runtime)
install(FILES ${platformWin} DESTINATION platforms COMPONENT Runtime)
install(FILES ${styleWin} DESTINATION styles COMPONENT Runtime)
list(APPEND LIBS ${pluginSvg} ${pluginGif} ${pluginJpeg} ${platformWin} ${styleWin})
install(CODE
"
${DEPENDENCY_CHECK}
${SEARCH_ADDITIONAL_DIRS}
include(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}\" \"${LIBS}\" \"${TOOLCHAIN_BIN_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
elseif(MAC)
set(MACOS_BUNDLE_MACOS_DIR ${DEFAULT_FILE_DESTINATION}/../MacOS)
set(MACOS_BUNDLE_PLUGINS_DIR ${DEFAULT_FILE_DESTINATION}/../PlugIns)
set(MACOS_BUNDLE_FRAMEWORKS_DIR ${DEFAULT_FILE_DESTINATION}/../Frameworks)
set(MACOS_BUNDLE_RESOURCES_DIR ${DEFAULT_FILE_DESTINATION}/../Resources)
set(MACOS_BUNDLE_LOGIN_ITEMS_DIR ${DEFAULT_FILE_DESTINATION}/../Library/LoginItems)
install(TARGETS AusweisAppBinary BUNDLE DESTINATION . COMPONENT Application)
install(TARGETS AusweisAppAutostartHelper BUNDLE DESTINATION ${MACOS_BUNDLE_LOGIN_ITEMS_DIR} COMPONENT Application)
function(install_mac_plugins plugins)
foreach(plugin ${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)
if(pluginDirName STREQUAL "platforms" AND NOT plugin STREQUAL "${Qt}::QCocoaIntegrationPlugin")
continue()
endif()
install(FILES ${pluginPath} DESTINATION ${MACOS_BUNDLE_PLUGINS_DIR}/${pluginDirName} COMPONENT Runtime)
endforeach()
endfunction(install_mac_plugins)
set(plugins ${Qt}::QCocoaIntegrationPlugin ${Qt}::QTlsBackendOpenSSLPlugin)
if(NOT INTEGRATED_SDK)
list(APPEND plugins ${Qt}::QTuioTouchPlugin ${Qt}::QSvgIconPlugin ${Qt}::QGifPlugin ${Qt}::QICNSPlugin ${Qt}::QICOPlugin ${Qt}::QJpegPlugin ${Qt}::QMacHeifPlugin ${Qt}::QMacJp2Plugin ${Qt}::QSvgPlugin ${Qt}::QMacStylePlugin)
endif()
install_mac_plugins("${plugins}")
if(TARGET ${Qt}::Qml)
foreach(entry QtQuick QtQuick.2 QtQml Qt QtCore)
set(_dir "${QT_INSTALL_ARCHDATA}/qml")
file(GLOB_RECURSE DYLIB "${_dir}/${entry}/*.dylib")
foreach(_lib ${DYLIB})
file(RELATIVE_PATH _lib_dest "${_dir}" "${_lib}")
if(NOT _lib_dest MATCHES "XmlListModel|LocalStorage|Shapes") # not needed stuff
get_filename_component(_lib_dest_dir ${_lib_dest} DIRECTORY)
install(FILES ${_lib} DESTINATION ${MACOS_BUNDLE_RESOURCES_DIR}/qml/${_lib_dest_dir} COMPONENT Runtime)
endif()
endforeach()
endforeach()
endif()
install(CODE
"
${DEPENDENCY_CHECK}
${SEARCH_ADDITIONAL_DIRS}
file(GLOB_RECURSE QTPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_PLUGINS_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
file(GLOB_RECURSE QtQuickPLUGINS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_RESOURCES_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
include(BundleUtilities)
FIXUP_BUNDLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${MACOS_BUNDLE_MACOS_DIR}/${PROJECT_NAME}\" \"\${QTPLUGINS};\${QtQuickPLUGINS}\" \"${TOOLCHAIN_LIB_PATH};\${ADDITIONAL_DIRS}\")
" COMPONENT Runtime)
elseif(IOS)
elseif(ANDROID)
elseif(UNIX)
if(BUILD_SHARED_LIBS)
set(CMAKE_INSTALL_RPATH "\$ORIGIN")
endif()
set(DEFAULT_FILE_DESTINATION ${CMAKE_INSTALL_DATADIR}/${VENDOR}/AusweisApp)
if(INTEGRATED_SDK AND NOT CONTAINER_SDK)
GET_PUBLIC_HEADER(AusweisAppBinary PUBLIC_HEADER)
if(PUBLIC_HEADER)
install(FILES ${PUBLIC_HEADER} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
endif()
install(TARGETS AusweisAppBinary DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Application)
else()
install(TARGETS AusweisAppBinary DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Application)
endif()
if(NOT CONTAINER_SDK)
configure_file(${PACKAGING_DIR}/linux/${BUNDLE_IDENTIFIER}.metainfo.xml.in ${CMAKE_CURRENT_BINARY_DIR}/${BUNDLE_IDENTIFIER}.metainfo.xml @ONLY)
configure_file(${PACKAGING_DIR}/linux/${BUNDLE_IDENTIFIER}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${BUNDLE_IDENTIFIER}.desktop @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BUNDLE_IDENTIFIER}.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo COMPONENT Application)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${BUNDLE_IDENTIFIER}.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications COMPONENT Application)
install(FILES ${RESOURCES_DIR}/images/npa.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps COMPONENT Application RENAME AusweisApp.svg)
install(FILES ${RESOURCES_DIR}/images/npa.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/96x96/apps COMPONENT Application RENAME AusweisApp.png)
install(FILES ${DOCS_DIR}/AusweisApp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT Application)
endif()
# This is for internal use only! It is not recommended to split the AusweisApp into multiple libs!
if(BUILD_SHARED_LIBS)
target_get_linked_libraries(AusweisAppBinary libraries)
foreach(libTarget ${libraries})
get_target_property(target_type "${libTarget}" TYPE)
if(${target_type} STREQUAL "SHARED_LIBRARY" OR ${target_type} STREQUAL "EXECUTABLE")
install(FILES $<TARGET_FILE:${libTarget}> DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT Application)
endif()
endforeach()
endif()
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}/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}\")
" COMPONENT Application)
endif()
endif()
if((NOT INTEGRATED_SDK OR CONTAINER_SDK) AND NOT ANDROID)
# resources file
install(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
endif()
if(SIGNTOOL_CMD)
if(IOS)
set(SIGNTOOL_PARAMS "-s \"${XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}\"")
endif()
configure_file(${CMAKE_DIR}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
if(MAC)
option(OSX_TIMESTAMP "Timestamp the application bundle" ON)
install(CODE
"
execute_process(COMMAND \"${CMAKE_COMMAND}\" -DOSX_TIMESTAMP=${OSX_TIMESTAMP} -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}\")
" COMPONENT Application)
elseif(WIN32)
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()
|