1##--------------------------------------------------------------------------- 2## Author: Pavel Kalian (Based on the work of Sean D'Epagnier) 3## Copyright: 2014 4## License: GPLv3+ 5##--------------------------------------------------------------------------- 6 7# build a CPack driven installer package 8#include (InstallRequiredSystemLibraries) 9 10IF (COMMAND cmake_policy) 11 CMAKE_POLICY(SET CMP0002 OLD) 12ENDIF (COMMAND cmake_policy) 13 14SET(CPACK_PACKAGE_NAME "${PACKAGE_NAME}") 15SET(CPACK_PACKAGE_VENDOR "opencpn.org") 16SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${CPACK_PACKAGE_NAME} ${PACKAGE_VERSION}) 17SET(CPACK_PACKAGE_VERSION ${PACKAGE_VERSION}) 18SET(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR}) 19SET(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR}) 20SET(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH}) 21SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_CURRENT_BINARY_DIR};${PACKAGE_NAME};ALL;/") 22SET(CPACK_PACKAGE_EXECUTABLES OpenCPN ${PACKAGE_NAME}) 23 24IF(WIN32) 25# to protect against confusable windows users, let us _not_ generate zip packages 26# SET(CPACK_GENERATOR "NSIS;ZIP") 27 28 # override install directory to put package files in the opencpn directory 29 SET(CPACK_PACKAGE_INSTALL_DIRECTORY "OpenCPN") 30 31# CPACK_NSIS_DIR ?? 32# CPACK_BUILDWIN_DIR ?? 33# CPACK_PACKAGE_ICON ?? 34 35 SET(CPACK_NSIS_PACKAGE_NAME "${PACKAGE_NAME}") 36 37 # Let cmake find NSIS.template.in 38 SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/buildwin") 39 40# These lines set the name of the Windows Start Menu shortcut and the icon that goes with it 41# SET(CPACK_NSIS_INSTALLED_ICON_NAME "${PACKAGE_NAME}") 42SET(CPACK_NSIS_DISPLAY_NAME "OpenCPN ${PACKAGE_NAME}") 43 44# SET(CPACK_PACKAGE_FILE_NAME "${PACKAGE_NAME}_${VERSION_MAJOR}.${VERSION_MINOR}_setup" ) 45 46 SET(CPACK_NSIS_DIR "${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode") #Gunther 47 SET(CPACK_BUILDWIN_DIR "${PROJECT_SOURCE_DIR}/buildwin") #Gunther 48 49ELSE(WIN32) 50 SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${PACKAGE_NAME}) 51ENDIF(WIN32) 52 53SET(CPACK_STRIP_FILES "${PACKAGE_NAME}") 54 55SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/gpl.txt") 56 57IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/README") 58# MESSAGE(STATUS "Using generic cpack package description file.") 59 SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README") 60 SET(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") 61ENDIF () 62 63#SET(CPACK_SOURCE_GENERATOR "TGZ") 64 65# The following components are regex's to match anywhere (unless anchored) 66# in absolute path + filename to find files or directories to be excluded 67# from source tarball. 68set(CPACK_SOURCE_IGNORE_FILES 69"^${CMAKE_CURRENT_SOURCE_DIR}/.git/*" 70"^${CMAKE_CURRENT_SOURCE_DIR}/build*" 71"^${CPACK_PACKAGE_INSTALL_DIRECTORY}/*" 72) 73 74IF(UNIX AND NOT APPLE) 75 76# need apt-get install rpm, for rpmbuild 77if (NOT OCPN_PACKAGE_RELEASE) 78 SET(OCPN_PACKAGE_RELEASE 1) 79endif () 80 81 82 IF (CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") 83 SET (ARCH "armhf") 84 # don't bother with rpm on armhf 85 SET(CPACK_GENERATOR "DEB;TBZ2") 86 ELSE () 87 SET(CPACK_GENERATOR "DEB;TBZ2") 88 89 IF (CMAKE_SIZEOF_VOID_P MATCHES "8") 90 SET (ARCH "amd64") 91 ELSE (CMAKE_SIZEOF_VOID_P MATCHES "8") 92 SET (ARCH "i386") 93 # note: in a chroot must use "setarch i686 make package" 94 ENDIF (CMAKE_SIZEOF_VOID_P MATCHES "8") 95 ENDIF () 96 97 SET(CPACK_DEBIAN_PACKAGE_RECOMMENDS ${PACKAGE_RECS}) 98 SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCH}) 99 SET(CPACK_DEBIAN_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION}") 100 SET(CPACK_DEBIAN_PACKAGE_SECTION "misc") 101 SET(CPACK_DEBIAN_COMPRESSION_TYPE "xz") # requires my patches to cmake 102 103 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE_NAME} PlugIn for OpenCPN") 104 SET(CPACK_PACKAGE_DESCRIPTION "${PACKAGE_NAME} PlugIn for OpenCPN") 105# SET(CPACK_SET_DESTDIR ON) 106 SET(CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 107 108 109 SET(CPACK_PACKAGE_FILE_NAME 110 "${PACKAGE_NAME}_${PACKAGE_VERSION}-${OCPN_PACKAGE_RELEASE}_${ARCH}") 111ENDIF(UNIX AND NOT APPLE) 112 113IF(TWIN32 AND NOT UNIX) 114# configure_file(${PROJECT_SOURCE_DIR}/src/opencpn.rc.in ${PROJECT_SOURCE_DIR}/src/opencpn.rc) 115 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_GERMAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_GERMAN.nsh" @ONLY) 116 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FRENCH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FRENCH.nsh" @ONLY) 117 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CZECH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CZECH.nsh" @ONLY) 118 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DANISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DANISH.nsh" @ONLY) 119 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SPANISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SPANISH.nsh" @ONLY) 120 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_ITALIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_ITALIAN.nsh" @ONLY) 121 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_DUTCH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_DUTCH.nsh" @ONLY) 122 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_POLISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_POLISH.nsh" @ONLY) 123 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESEBR.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESEBR.nsh" @ONLY) 124 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_PORTUGUESE.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_PORTUGUESE.nsh" @ONLY) 125 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_RUSSIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_RUSSIAN.nsh" @ONLY) 126 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_SWEDISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_SWEDISH.nsh" @ONLY) 127 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_FINNISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_FINNISH.nsh" @ONLY) 128 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_NORWEGIAN.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_NORWEGIAN.nsh" @ONLY) 129 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_CHINESETW.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_CHINESETW.nsh" @ONLY) 130 configure_file("${PROJECT_SOURCE_DIR}/buildwin/NSIS_Unicode/Language files/Langstrings_TURKISH.nsh.in" "${PROJECT_SOURCE_DIR}//buildwin/NSIS_Unicode/Include/Langstrings_TURKISH.nsh" @ONLY) 131ENDIF(TWIN32 AND NOT UNIX) 132 133 134# this dummy target is necessary to make sure the ADDITIONAL_MAKE_CLEAN_FILES directive is executed. 135# apparently, the base CMakeLists.txt file must have "some" target to activate all the clean steps. 136#ADD_CUSTOM_TARGET(dummy COMMENT "dummy: Done." DEPENDS ${PACKAGE_NAME}) 137 138 139INCLUDE(CPack) 140 141IF(NOT STANDALONE MATCHES "BUNDLED") 142 143IF(APPLE) 144MESSAGE (STATUS "*** Staging to build PlugIn OSX Package ***") 145 146 # Copy a bunch of files so the Packages installer builder can find them 147 # relative to ${CMAKE_CURRENT_BINARY_DIR} 148 # This avoids absolute paths in the chartdldr_pi.pkgproj file 149 150configure_file(${PROJECT_SOURCE_DIR}/cmake/gpl.txt 151 ${CMAKE_CURRENT_BINARY_DIR}/license.txt COPYONLY) 152 153configure_file(${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/pkg_background.jpg 154 ${CMAKE_CURRENT_BINARY_DIR}/pkg_background.jpg COPYONLY) 155 156 # Patch the pkgproj.in file to make the output package name conform to Xxx-Plugin_x.x.pkg format 157 # Key is: 158 # <key>NAME</key> 159 # <string>${VERBOSE_NAME}-Plugin_${VERSION_MAJOR}.${VERSION_MINOR}</string> 160 161 configure_file(${PROJECT_SOURCE_DIR}/buildosx/InstallOSX/${PACKAGE_NAME}.pkgproj.in 162 ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj) 163 164 ADD_CUSTOM_COMMAND( 165 OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin.pkg 166 COMMAND /usr/local/bin/packagesbuild -F ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}.pkgproj 167 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 168 DEPENDS ${PACKAGE_NAME} 169 COMMENT "create-pkg [${PACKAGE_NAME}]: Generating pkg file." 170) 171 172 ADD_CUSTOM_TARGET(create-pkg COMMENT "create-pkg: Done." 173 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${VERBOSE_NAME}-Plugin.pkg ) 174 175 176ENDIF(APPLE) 177ENDIF(NOT STANDALONE MATCHES "BUNDLED") 178