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