220 lines
8.5 KiB
CMake
220 lines
8.5 KiB
CMake
# CPack
|
|
# http://www.cmake.org/Wiki/CMake:CPackConfiguration
|
|
|
|
SET(FILENAME ${PROJECT_NAME}-${PROJECT_VERSION})
|
|
|
|
IF(ANDROID)
|
|
SET(FILENAME ${FILENAME}-${ANDROID_ABI})
|
|
ENDIF()
|
|
|
|
IF(DEFINED dvcs_distance)
|
|
SET(FILENAME ${FILENAME}+${dvcs_distance})
|
|
ENDIF()
|
|
|
|
IF(DEFINED dvcs_branch)
|
|
SET(FILENAME ${FILENAME}-${dvcs_branch})
|
|
ENDIF()
|
|
|
|
IF(DEFINED dvcs_phase)
|
|
SET(FILENAME ${FILENAME}-${dvcs_phase})
|
|
ENDIF()
|
|
|
|
IF(DEFINED dvcs_revision)
|
|
SET(FILENAME ${FILENAME}-${dvcs_revision})
|
|
ENDIF()
|
|
|
|
|
|
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
|
|
SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
|
|
SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
|
SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
|
SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
|
SET(CPACK_PACKAGE_VERSION_TWEAK ${PROJECT_VERSION_TWEAK})
|
|
SET(CPACK_PACKAGE_VENDOR "Governikus GmbH & Co. KG")
|
|
SET(CPACK_PACKAGE_CONTACT "info@governikus.com")
|
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Governikus AusweisApp2")
|
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.rst")
|
|
SET(CPACK_PACKAGE_FILE_NAME ${FILENAME})
|
|
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.txt")
|
|
|
|
IF(APPLE AND NOT IOS)
|
|
FIND_PROGRAM(ICONV iconv)
|
|
IF(NOT ICONV)
|
|
MESSAGE(FATAL_ERROR "Cannot find 'iconv' to convert LICENSE.txt")
|
|
ENDIF()
|
|
|
|
EXECUTE_PROCESS(COMMAND ${ICONV} -f UTF-8 -t MAC ${CPACK_RESOURCE_FILE_LICENSE} OUTPUT_FILE "${PROJECT_BINARY_DIR}/LICENSE.txt")
|
|
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_BINARY_DIR}/LICENSE.txt")
|
|
ENDIF()
|
|
|
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")
|
|
SET(CPACK_STRIP_FILES TRUE)
|
|
ENDIF()
|
|
|
|
SET(CPACK_SOURCE_GENERATOR TGZ)
|
|
SET(CPACK_SOURCE_PACKAGE_FILE_NAME ${FILENAME} CACHE INTERNAL "tarball basename")
|
|
|
|
SET(CPACK_SOURCE_IGNORE_FILES "\\\\.hgignore" "\\\\.hgtags" "/\\\\.hg/")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "vendor.txt")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_BINARY_DIR}")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "CMakeCache.txt")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "CMakeFiles")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "CMakeLists\\\\.txt\\\\.user")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.project")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.cproject")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "\\\\.reviewboardrc")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/tlscheck")
|
|
LIST(APPEND CPACK_SOURCE_IGNORE_FILES "utils/testbedtool")
|
|
|
|
SET(CPACK_MONOLITHIC_INSTALL true)
|
|
|
|
|
|
IF(WIN32)
|
|
SET(CPACK_PACKAGE_EXECUTABLES "AusweisApp2;AusweisApp2")
|
|
|
|
SET(CPACK_GENERATOR WIX)
|
|
SET(CPACK_WIX_UPGRADE_GUID 4EE0E467-EAB7-483E-AB45-87BD1DB6B037)
|
|
SET(CPACK_WIX_PRODUCT_ICON ${RESOURCES_DIR}/images/npa.ico)
|
|
SET(CPACK_WIX_CULTURES de-DE en-US)
|
|
# disable above line, enable beneath line to build MSI for english
|
|
# SET(CPACK_WIX_CULTURES en-US)
|
|
SET(CPACK_WIX_TEMPLATE ${PACKAGING_DIR}/win/WIX.template.in)
|
|
SET(CPACK_WIX_UI_BANNER ${RESOURCES_DIR}/images/wix_banner.jpg)
|
|
SET(CPACK_WIX_UI_DIALOG ${RESOURCES_DIR}/images/wix_dialog.jpg)
|
|
SET(CPACK_WIX_EXTENSIONS WixUtilExtension)
|
|
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -loc ${PACKAGING_DIR}/win/WIX.Texts.de-DE.wxl -loc ${PACKAGING_DIR}/win/WIX.Texts.en-US.wxl)
|
|
|
|
IF(SIGNTOOL_CMD)
|
|
MESSAGE(STATUS "MSI can be signed with 'make package.sign'")
|
|
ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi)
|
|
ENDIF()
|
|
|
|
ELSEIF(IOS)
|
|
FIND_PROGRAM(xcrun xcrun CMAKE_FIND_ROOT_PATH_BOTH)
|
|
IF(NOT xcrun)
|
|
MESSAGE(FATAL_ERROR "Cannot find xcrun to create IPAs")
|
|
ENDIF()
|
|
|
|
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
|
|
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;UninstalledProducts;UninstalledProducts/iphoneos\")
|
|
|
|
FOREACH(dir \${BUNDLE_DIRS})
|
|
SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app)
|
|
IF(EXISTS \"\${tmpBundleDir}\")
|
|
SET(BundleDir \"\${tmpBundleDir}\")
|
|
BREAK()
|
|
ENDIF()
|
|
ENDFOREACH()
|
|
|
|
IF(BundleDir)
|
|
MESSAGE(STATUS \"Use bundle: \${BundleDir}\")
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR \"Bundle directory does not exist\")
|
|
ENDIF()
|
|
|
|
EXECUTE_PROCESS(COMMAND ${xcrun} -sdk iphoneos PackageApplication \${BundleDir} -o ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.ipa)
|
|
")
|
|
|
|
ADD_CUSTOM_TARGET(ipa COMMAND ${CMAKE_COMMAND} -DCONFIG=$<CONFIGURATION> -P ${CMAKE_BINARY_DIR}/ipa.cmake)
|
|
|
|
ELSEIF(APPLE)
|
|
SET(MACOS_PACKAGING_DIR ${PACKAGING_DIR}/macos)
|
|
SET(CPACK_GENERATOR Bundle)
|
|
SET(CPACK_INSTALL_CMAKE_PROJECTS ${CMAKE_BINARY_DIR};${PROJECT_NAME};ALL;/)
|
|
SET(CPACK_BUNDLE_NAME ${PROJECT_NAME})
|
|
SET(CPACK_BUNDLE_ICON ${RESOURCES_DIR}/images/bundle_icons.icns)
|
|
SET(CPACK_BUNDLE_APPLE_CERT_APP "Developer ID Application: Governikus GmbH & Co. KG (G7EQCJU4BR)")
|
|
|
|
SET(CPACK_BUNDLE_APPLE_CODESIGN_FILES ${ADDITIONAL_BUNDLE_FILES_TO_SIGN})
|
|
SET(CPACK_APPLE_BUNDLE_ID "com.governikus.AusweisApp2")
|
|
SET(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "--force")
|
|
OPTION(OSX_TIMESTAMP "Timestamp the application bundle" ON)
|
|
IF(OSX_TIMESTAMP)
|
|
SET(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "${CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER} --timestamp")
|
|
ELSE()
|
|
SET(CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER "${CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER} --timestamp=none")
|
|
ENDIF()
|
|
SET(CPACK_PACKAGE_ICON ${RESOURCES_DIR}/images/dmg_icons.icns)
|
|
SET(CPACK_DMG_VOLUME_NAME ${CPACK_PACKAGE_NAME})
|
|
SET(CPACK_DMG_FORMAT UDBZ)
|
|
SET(CPACK_DMG_BACKGROUND_IMAGE ${RESOURCES_DIR}/images/dmg_background.png)
|
|
SET(CPACK_DMG_SLA_DIR ${MACOS_PACKAGING_DIR}/sla)
|
|
SET(CPACK_DMG_SLA_LANGUAGES English German)
|
|
|
|
# We can not generate the DS_STORE on each build since jenkins runs headless
|
|
#SET(CPACK_DMG_DS_STORE_SETUP_SCRIPT ${MACOS_PACKAGING_DIR}/prepare-ds_store.applescript)
|
|
SET(CPACK_DMG_DS_STORE ${MACOS_PACKAGING_DIR}/DS_STORE)
|
|
|
|
SET(INFO_PLIST_FILE_NAME Info.plist)
|
|
CONFIGURE_FILE(${MACOS_PACKAGING_DIR}/${INFO_PLIST_FILE_NAME} ${INFO_PLIST_FILE_NAME} @ONLY)
|
|
SET(CPACK_BUNDLE_PLIST ${INFO_PLIST_FILE_NAME})
|
|
|
|
SET(STARTUP_FILE_NAME start-ausweisapp2.sh)
|
|
CONFIGURE_FILE(${MACOS_PACKAGING_DIR}/${STARTUP_FILE_NAME} ${STARTUP_FILE_NAME} @ONLY)
|
|
SET(CPACK_BUNDLE_STARTUP_COMMAND ${STARTUP_FILE_NAME})
|
|
|
|
ELSEIF(ANDROID)
|
|
FIND_PROGRAM(androiddeployqt androiddeployqt CMAKE_FIND_ROOT_PATH_BOTH)
|
|
IF(NOT androiddeployqt)
|
|
MESSAGE(FATAL_ERROR "Cannot find androiddeployqt to create APKs")
|
|
ENDIF()
|
|
MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}")
|
|
|
|
SET(ANDROID_APK_DIR ${CMAKE_INSTALL_PREFIX})
|
|
SET(DEPLOYMENT_SETTINGS ${PROJECT_BINARY_DIR}/libAusweisApp2.so-deployment-settings.json)
|
|
SET(PACKAGE_SRC_DIR ${PROJECT_BINARY_DIR}/package-src-dir)
|
|
|
|
IF("${ANDROID_ABI}" STREQUAL "x86")
|
|
SET(ANDROID_TOOLCHAIN_PREFIX x86)
|
|
SET(ANDROID_TOOL_PREFIX i686-linux-android)
|
|
ELSEIF("${ANDROID_ABI}" STREQUAL "armeabi-v7a")
|
|
SET(ANDROID_TOOLCHAIN_PREFIX arm-linux-androideabi)
|
|
SET(ANDROID_TOOL_PREFIX arm-linux-androideabi)
|
|
ELSEIF("${ANDROID_ABI}" STREQUAL "arm64-v8a")
|
|
SET(ANDROID_TOOLCHAIN_PREFIX aarch64-linux-android)
|
|
SET(ANDROID_TOOL_PREFIX aarch64-linux-android)
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Unsupported ANDROID_ABI: ${ANDROID_ABI}")
|
|
ENDIF()
|
|
|
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/AndroidManifest.xml.in ${PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
|
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/libAusweisApp2.so-deployment-settings.json.in ${DEPLOYMENT_SETTINGS} @ONLY)
|
|
|
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")
|
|
IF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
|
|
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
|
|
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
|
|
SET(APK_FILE QtApp-release-signed.apk)
|
|
ELSE()
|
|
MESSAGE(FATAL_ERROR "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
|
|
ENDIF()
|
|
|
|
ELSE()
|
|
SET(APK_FILE QtApp-debug.apk)
|
|
ENDIF()
|
|
|
|
SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${DEPLOYMENT_SETTINGS} --output ${ANDROID_APK_DIR} ${DEPLOY_CMD_SIGN})
|
|
SET(DESTINATION_APK_FILE ${CMAKE_INSTALL_PREFIX}/bin/${CPACK_PACKAGE_FILE_NAME}.apk)
|
|
|
|
# Add DEPENDS install someday
|
|
# http://public.kitware.com/Bug/view.php?id=8438
|
|
ADD_CUSTOM_TARGET(apk
|
|
COMMAND ${DEPLOY_CMD}
|
|
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_INSTALL_PREFIX}/bin/${APK_FILE} ${DESTINATION_APK_FILE})
|
|
|
|
FIND_PROGRAM(jarsigner jarsigner CMAKE_FIND_ROOT_PATH_BOTH)
|
|
IF(jarsigner)
|
|
IF(APK_SIGN_KEYSTORE)
|
|
SET(jarsigner_keystore -keystore ${APK_SIGN_KEYSTORE})
|
|
ENDIF()
|
|
ADD_CUSTOM_TARGET(verify.signature
|
|
COMMAND ${jarsigner} -verify -verbose -certs ${jarsigner_keystore} ${DESTINATION_APK_FILE})
|
|
ENDIF()
|
|
|
|
ELSEIF(UNIX)
|
|
SET(CPACK_GENERATOR STGZ)
|
|
ENDIF()
|
|
|
|
|
|
INCLUDE(CPack)
|