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