1# This file is included from the top-level CMakeLists.txt.  We just store it
2# here to avoid cluttering up that file.
3
4set(PKGNAME ${CMAKE_PROJECT_NAME} CACHE STRING
5  "Distribution package name (default: ${CMAKE_PROJECT_NAME})")
6set(PKGVENDOR "The ${CMAKE_PROJECT_NAME} Project" CACHE STRING
7  "Vendor name to be included in distribution package descriptions (default: The ${CMAKE_PROJECT_NAME} Project)")
8set(PKGURL "http://www.${CMAKE_PROJECT_NAME}.org" CACHE STRING
9  "URL of project web site to be included in distribution package descriptions (default: http://www.${CMAKE_PROJECT_NAME}.org)")
10set(PKGEMAIL "information@${CMAKE_PROJECT_NAME}.org" CACHE STRING
11  "E-mail of project maintainer to be included in distribution package descriptions (default: information@${CMAKE_PROJECT_NAME}.org")
12set(PKGID "com.${CMAKE_PROJECT_NAME}.${PKGNAME}" CACHE STRING
13  "Globally unique package identifier (reverse DNS notation) (default: com.${CMAKE_PROJECT_NAME}.${PKGNAME})")
14
15
16###############################################################################
17# Linux RPM and DEB
18###############################################################################
19
20if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
21
22set(RPMARCH ${CMAKE_SYSTEM_PROCESSOR})
23if(CPU_TYPE STREQUAL "x86_64")
24  set(DEBARCH amd64)
25elseif(CPU_TYPE STREQUAL "arm64")
26  set(DEBARCH ${CPU_TYPE})
27elseif(CPU_TYPE STREQUAL "arm")
28  check_c_source_compiles("
29    #if __ARM_PCS_VFP != 1
30    #error \"float ABI != hard\"
31    #endif
32    int main(void) { return 0; }" HAVE_HARD_FLOAT)
33  if(HAVE_HARD_FLOAT)
34    set(RPMARCH armv7hl)
35    set(DEBARCH armhf)
36  else()
37    set(RPMARCH armel)
38    set(DEBARCH armel)
39  endif()
40elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "ppc64le")
41  set(DEBARCH ppc64el)
42elseif(CPU_TYPE STREQUAL "powerpc" AND BITS EQUAL 32)
43  set(RPMARCH ppc)
44  set(DEBARCH ppc)
45else()
46  set(DEBARCH ${CMAKE_SYSTEM_PROCESSOR})
47endif()
48message(STATUS "RPM architecture = ${RPMARCH}, DEB architecture = ${DEBARCH}")
49
50# Re-set CMAKE_POSITION_INDEPENDENT_CODE so that the RPM spec file works
51# properly
52boolean_number(CMAKE_POSITION_INDEPENDENT_CODE)
53
54configure_file(release/makerpm.in pkgscripts/makerpm)
55configure_file(release/rpm.spec.in pkgscripts/rpm.spec @ONLY)
56
57add_custom_target(rpm pkgscripts/makerpm
58  SOURCES pkgscripts/makerpm)
59
60configure_file(release/makesrpm.in pkgscripts/makesrpm)
61
62add_custom_target(srpm pkgscripts/makesrpm
63  SOURCES pkgscripts/makesrpm
64  DEPENDS dist)
65
66configure_file(release/makedpkg.in pkgscripts/makedpkg)
67configure_file(release/deb-control.in pkgscripts/deb-control)
68
69add_custom_target(deb pkgscripts/makedpkg
70  SOURCES pkgscripts/makedpkg)
71
72endif() # Linux
73
74
75###############################################################################
76# Windows installer (NullSoft Installer)
77###############################################################################
78
79if(WIN32)
80
81if(MSVC)
82  set(INST_PLATFORM "Visual C++")
83  set(INST_ID vc)
84  set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
85  set(INST_REG_NAME ${CMAKE_PROJECT_NAME})
86elseif(MINGW)
87  set(INST_PLATFORM GCC)
88  set(INST_ID gcc)
89  set(INST_NAME ${CMAKE_PROJECT_NAME}-${VERSION}-${INST_ID})
90  set(INST_REG_NAME ${CMAKE_PROJECT_NAME}-${INST_ID})
91  set(INST_DEFS -DGCC)
92endif()
93
94if(BITS EQUAL 64)
95  set(INST_PLATFORM "${INST_PLATFORM} 64-bit")
96  set(INST_NAME ${INST_NAME}64)
97  set(INST_REG_NAME ${INST_REG_NAME}64)
98  set(INST_DEFS ${INST_DEFS} -DWIN64)
99endif()
100
101if(WITH_JAVA)
102  set(INST_DEFS ${INST_DEFS} -DJAVA)
103endif()
104
105if(MSVC_IDE)
106  set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=${CMAKE_CFG_INTDIR}\\")
107else()
108  set(INST_DEFS ${INST_DEFS} "-DBUILDDIR=")
109endif()
110
111string(REGEX REPLACE "/" "\\\\" INST_DIR ${CMAKE_INSTALL_PREFIX})
112
113configure_file(release/installer.nsi.in installer.nsi @ONLY)
114# TODO: It would be nice to eventually switch to CPack and eliminate this mess,
115# but not today.
116configure_file(win/projectTargets.cmake.in
117  win/${CMAKE_PROJECT_NAME}Targets.cmake @ONLY)
118configure_file(win/${INST_ID}/projectTargets-release.cmake.in
119  win/${CMAKE_PROJECT_NAME}Targets-release.cmake @ONLY)
120
121if(WITH_JAVA)
122  set(JAVA_DEPEND turbojpeg-java)
123endif()
124add_custom_target(installer
125  makensis -nocd ${INST_DEFS} installer.nsi
126  DEPENDS jpeg jpeg-static turbojpeg turbojpeg-static rdjpgcom wrjpgcom
127    cjpeg djpeg jpegtran tjbench ${JAVA_DEPEND}
128  SOURCES installer.nsi)
129
130endif() # WIN32
131
132
133###############################################################################
134# Mac DMG
135###############################################################################
136
137if(APPLE)
138
139set(ARMV8_BUILD "" CACHE PATH
140  "Directory containing Armv8 iOS or macOS build to include in universal binaries")
141
142set(MACOS_APP_CERT_NAME "" CACHE STRING
143  "Name of the Developer ID Application certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo DMG.  Leave this blank to generate an unsigned DMG.")
144set(MACOS_INST_CERT_NAME "" CACHE STRING
145  "Name of the Developer ID Installer certificate (in the macOS keychain) that should be used to sign the libjpeg-turbo installer package.  Leave this blank to generate an unsigned package.")
146
147configure_file(release/makemacpkg.in pkgscripts/makemacpkg)
148configure_file(release/Distribution.xml.in pkgscripts/Distribution.xml)
149configure_file(release/Welcome.rtf.in pkgscripts/Welcome.rtf)
150configure_file(release/uninstall.in pkgscripts/uninstall)
151
152add_custom_target(dmg pkgscripts/makemacpkg
153  SOURCES pkgscripts/makemacpkg)
154
155endif() # APPLE
156
157
158###############################################################################
159# Generic
160###############################################################################
161
162add_custom_target(dist
163  COMMAND git archive --prefix=${CMAKE_PROJECT_NAME}-${VERSION}/ HEAD |
164    gzip > ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${VERSION}.tar.gz
165    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
166
167configure_file(release/maketarball.in pkgscripts/maketarball)
168
169add_custom_target(tarball pkgscripts/maketarball
170  SOURCES pkgscripts/maketarball)
171
172configure_file(release/libjpeg.pc.in pkgscripts/libjpeg.pc @ONLY)
173
174configure_file(release/libturbojpeg.pc.in pkgscripts/libturbojpeg.pc @ONLY)
175
176include(CMakePackageConfigHelpers)
177write_basic_package_version_file(
178  pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
179  VERSION ${VERSION} COMPATIBILITY AnyNewerVersion)
180
181configure_package_config_file(release/Config.cmake.in
182  pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake
183  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME})
184