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