|
1
|
cmake_minimum_required(VERSION 3.12...3.31) |
|
2
|
|
|
3
|
project( |
|
4
|
zlib |
|
5
|
LANGUAGES C |
|
6
|
VERSION 1.3.2 |
|
7
|
HOMEPAGE_URL "https://zlib.net/" |
|
8
|
DESCRIPTION "a general-purpose lossless data-compression library") |
|
9
|
|
|
10
|
# ============================================================================ |
|
11
|
# CPack |
|
12
|
# ============================================================================ |
|
13
|
set(CPACK_PACKAGE_VENDOR "zlib-Project") |
|
14
|
set(CPACK_PACKAGE_DESCRIPTION_FILE ${zlib_SOURCE_DIR}/README) |
|
15
|
set(CPACK_RESOURCE_FILE_LICENSE ${zlib_SOURCE_DIR}/LICENSE) |
|
16
|
set(CPACK_RESOURCE_FILE_README ${zlib_SOURCE_DIR}/README) |
|
17
|
|
|
18
|
# ============================================================================ |
|
19
|
# configuration |
|
20
|
# ============================================================================ |
|
21
|
|
|
22
|
option(ZLIB_BUILD_TESTING "Enable Zlib Examples as tests" ON) |
|
23
|
option(ZLIB_BUILD_SHARED "Enable building zlib shared library" ON) |
|
24
|
option(ZLIB_BUILD_STATIC "Enable building zlib static library" ON) |
|
25
|
option(ZLIB_INSTALL "Enable installation of zlib" ON) |
|
26
|
option(ZLIB_PREFIX "prefix for all types and library functions, see zconf.h.in" |
|
27
|
OFF) |
|
28
|
mark_as_advanced(ZLIB_PREFIX) |
|
29
|
|
|
30
|
get_property(IS_MULTI GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) |
|
31
|
|
|
32
|
if(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) |
|
33
|
message(STATUS "No CMAKE_BUILD_TYPE set -- using Release") |
|
34
|
set(CMAKE_BUILD_TYPE Release) |
|
35
|
endif(NOT DEFINED CMAKE_BUILD_TYPE AND NOT IS_MULTI) |
|
36
|
|
|
37
|
include(CheckCSourceCompiles) |
|
38
|
include(CheckFunctionExists) |
|
39
|
include(CheckIncludeFile) |
|
40
|
include(CMakePackageConfigHelpers) |
|
41
|
include(CheckTypeSize) |
|
42
|
include(CPack) |
|
43
|
include(GNUInstallDirs) |
|
44
|
|
|
45
|
set(CPACK_INCLUDED TRUE) |
|
46
|
|
|
47
|
if(NOT ZLIB_CONF_WRITTEN) |
|
48
|
set(Z_PREFIX ${ZLIB_PREFIX}) |
|
49
|
set(CONF_OUT_FILE ${zlib_BINARY_DIR}/zconf.h.cmakein) |
|
50
|
file(READ ${zlib_SOURCE_DIR}/zconf.h ZCONF_CONTENT LIMIT 245) |
|
51
|
file(WRITE ${CONF_OUT_FILE} ${ZCONF_CONTENT}) |
|
52
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine Z_PREFIX 1\n") |
|
53
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_STDARG_H 1\n") |
|
54
|
file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_UNISTD_H 1\n") |
|
55
|
file(READ ${zlib_SOURCE_DIR}/zconf.h ZCONF_CONTENT OFFSET 244) |
|
56
|
set(FIRST_ITEM TRUE) |
|
57
|
|
|
58
|
foreach(item IN LISTS ZCONF_CONTENT) |
|
59
|
if(FIRST_ITEM) |
|
60
|
string(APPEND OUT_CONTENT ${item}) |
|
61
|
set(FIRST_ITEM FALSE) |
|
62
|
else(FIRST_ITEM) |
|
63
|
string(APPEND OUT_CONTENT "\;" ${item}) |
|
64
|
endif(FIRST_ITEM) |
|
65
|
endforeach(item IN LISTS ${ZCONF_CONTENT}) |
|
66
|
|
|
67
|
file(APPEND ${CONF_OUT_FILE} ${OUT_CONTENT}) |
|
68
|
set(ZLIB_CONF_WRITTEN |
|
69
|
TRUE |
|
70
|
CACHE BOOL "zconf.h.cmakein was created") |
|
71
|
mark_as_advanced(ZLIB_CONF_WRITTEN) |
|
72
|
endif(NOT ZLIB_CONF_WRITTEN) |
|
73
|
|
|
74
|
# |
|
75
|
# Check to see if we have large file support |
|
76
|
# |
|
77
|
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) |
|
78
|
check_type_size(off64_t OFF64_T) |
|
79
|
unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable |
|
80
|
|
|
81
|
# |
|
82
|
# Check for fseeko |
|
83
|
# |
|
84
|
check_function_exists(fseeko HAVE_FSEEKO) |
|
85
|
|
|
86
|
# |
|
87
|
# Check for stdarg.h |
|
88
|
# |
|
89
|
check_include_file(stdarg.h HAVE_STDARG_H) |
|
90
|
|
|
91
|
# |
|
92
|
# Check for unistd.h |
|
93
|
# |
|
94
|
check_include_file(unistd.h HAVE_UNISTD_H) |
|
95
|
|
|
96
|
# |
|
97
|
# Check visibility attribute is supported |
|
98
|
# |
|
99
|
if(MSVC) |
|
100
|
set(CMAKE_REQUIRED_FLAGS "-WX") |
|
101
|
else(MSVC) |
|
102
|
set(CMAKE_REQUIRED_FLAGS "-Werror") |
|
103
|
endif(MSVC) |
|
104
|
|
|
105
|
check_c_source_compiles( |
|
106
|
" |
|
107
|
#include <stdlib.h> |
|
108
|
static void f(void) __attribute__ ((visibility(\"hidden\"))); |
|
109
|
int main(void) {return 0;} |
|
110
|
" |
|
111
|
HAVE___ATTR__VIS_HIDDEN) |
|
112
|
|
|
113
|
unset(CMAKE_COMPILE_FLAGS) |
|
114
|
set(ZLIB_PC ${zlib_BINARY_DIR}/zlib.pc) |
|
115
|
configure_file(${zlib_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY) |
|
116
|
configure_file(${zlib_BINARY_DIR}/zconf.h.cmakein ${zlib_BINARY_DIR}/zconf.h) |
|
117
|
|
|
118
|
# ============================================================================ |
|
119
|
# zlib |
|
120
|
# ============================================================================ |
|
121
|
|
|
122
|
set(ZLIB_PUBLIC_HDRS ${zlib_BINARY_DIR}/zconf.h zlib.h) |
|
123
|
|
|
124
|
set(ZLIB_PRIVATE_HDRS |
|
125
|
crc32.h |
|
126
|
deflate.h |
|
127
|
gzguts.h |
|
128
|
inffast.h |
|
129
|
inffixed.h |
|
130
|
inflate.h |
|
131
|
inftrees.h |
|
132
|
trees.h |
|
133
|
zutil.h) |
|
134
|
|
|
135
|
set(ZLIB_SRCS |
|
136
|
adler32.c |
|
137
|
compress.c |
|
138
|
crc32.c |
|
139
|
deflate.c |
|
140
|
gzclose.c |
|
141
|
gzlib.c |
|
142
|
gzread.c |
|
143
|
gzwrite.c |
|
144
|
inflate.c |
|
145
|
infback.c |
|
146
|
inftrees.c |
|
147
|
inffast.c |
|
148
|
trees.c |
|
149
|
uncompr.c |
|
150
|
zutil.c) |
|
151
|
|
|
152
|
if(WIN32) |
|
153
|
set(zlib_static_suffix "s") |
|
154
|
set(CMAKE_DEBUG_POSTFIX "d") |
|
155
|
endif(WIN32) |
|
156
|
|
|
157
|
if(ZLIB_BUILD_SHARED) |
|
158
|
add_library( |
|
159
|
zlib SHARED ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS} |
|
160
|
$<$<OR:$<BOOL:${WIN32}>,$<BOOL:${CYGWIN}>>:win32/zlib1.rc>) |
|
161
|
add_library(ZLIB::ZLIB ALIAS zlib) |
|
162
|
target_include_directories( |
|
163
|
zlib |
|
164
|
PUBLIC $<BUILD_INTERFACE:${zlib_BINARY_DIR}> |
|
165
|
$<BUILD_INTERFACE:${zlib_SOURCE_DIR}> |
|
166
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
|
167
|
target_compile_definitions( |
|
168
|
zlib |
|
169
|
PRIVATE ZLIB_BUILD |
|
170
|
$<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> |
|
171
|
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> |
|
172
|
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> |
|
173
|
$<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> |
|
174
|
PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) |
|
175
|
set(INSTALL_VERSION ${zlib_VERSION}) |
|
176
|
|
|
177
|
if(NOT CYGWIN) |
|
178
|
set_target_properties(zlib PROPERTIES SOVERSION ${zlib_VERSION_MAJOR} |
|
179
|
VERSION ${INSTALL_VERSION}) |
|
180
|
endif(NOT CYGWIN) |
|
181
|
|
|
182
|
set_target_properties( |
|
183
|
zlib |
|
184
|
PROPERTIES DEFINE_SYMBOL ZLIB_DLL |
|
185
|
EXPORT_NAME ZLIB |
|
186
|
OUTPUT_NAME z) |
|
187
|
if(UNIX |
|
188
|
AND NOT APPLE |
|
189
|
AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX) |
|
190
|
AND NOT (CMAKE_SYSTEM_NAME STREQUAL SunOS)) |
|
191
|
# On unix-like platforms the library is almost always called libz |
|
192
|
set_target_properties( |
|
193
|
zlib |
|
194
|
PROPERTIES LINK_FLAGS |
|
195
|
"-Wl,--version-script,\"${zlib_SOURCE_DIR}/zlib.map\"") |
|
196
|
endif( |
|
197
|
UNIX |
|
198
|
AND NOT APPLE |
|
199
|
AND NOT (CMAKE_SYSTEM_NAME STREQUAL AIX) |
|
200
|
AND NOT (CMAKE_SYSTEM_NAME STREQUAL SunOS)) |
|
201
|
endif(ZLIB_BUILD_SHARED) |
|
202
|
|
|
203
|
if(ZLIB_BUILD_STATIC) |
|
204
|
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} |
|
205
|
${ZLIB_PRIVATE_HDRS}) |
|
206
|
add_library(ZLIB::ZLIBSTATIC ALIAS zlibstatic) |
|
207
|
target_include_directories( |
|
208
|
zlibstatic |
|
209
|
PUBLIC $<BUILD_INTERFACE:${zlib_BINARY_DIR}> |
|
210
|
$<BUILD_INTERFACE:${zlib_SOURCE_DIR}> |
|
211
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) |
|
212
|
target_compile_definitions( |
|
213
|
zlibstatic |
|
214
|
PRIVATE ZLIB_BUILD |
|
215
|
$<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO> |
|
216
|
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> |
|
217
|
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE> |
|
218
|
$<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE> |
|
219
|
PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) |
|
220
|
set_target_properties( |
|
221
|
zlibstatic PROPERTIES EXPORT_NAME ZLIBSTATIC OUTPUT_NAME |
|
222
|
z${zlib_static_suffix}) |
|
223
|
endif(ZLIB_BUILD_STATIC) |
|
224
|
|
|
225
|
if(ZLIB_INSTALL) |
|
226
|
if(ZLIB_BUILD_SHARED) |
|
227
|
install( |
|
228
|
TARGETS zlib |
|
229
|
COMPONENT Runtime |
|
230
|
EXPORT zlibSharedExport |
|
231
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
|
232
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
233
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") |
|
234
|
install( |
|
235
|
EXPORT zlibSharedExport |
|
236
|
FILE ZLIB-shared.cmake |
|
237
|
NAMESPACE ZLIB:: |
|
238
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib) |
|
239
|
|
|
240
|
if(MSVC) |
|
241
|
install( |
|
242
|
FILES $<TARGET_PDB_FILE:zlib> |
|
243
|
COMPONENT Runtime |
|
244
|
DESTINATION ${CMAKE_INSTALL_BINDIR} |
|
245
|
CONFIGURATIONS Debug OR RelWithDebInfo |
|
246
|
OPTIONAL) |
|
247
|
endif(MSVC) |
|
248
|
endif(ZLIB_BUILD_SHARED) |
|
249
|
|
|
250
|
if(ZLIB_BUILD_STATIC) |
|
251
|
install( |
|
252
|
TARGETS zlibstatic |
|
253
|
COMPONENT Development |
|
254
|
EXPORT zlibStaticExport |
|
255
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" |
|
256
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" |
|
257
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") |
|
258
|
install( |
|
259
|
EXPORT zlibStaticExport |
|
260
|
FILE ZLIB-static.cmake |
|
261
|
NAMESPACE ZLIB:: |
|
262
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib) |
|
263
|
endif(ZLIB_BUILD_STATIC) |
|
264
|
|
|
265
|
configure_package_config_file( |
|
266
|
${zlib_SOURCE_DIR}/zlibConfig.cmake.in |
|
267
|
${zlib_BINARY_DIR}/ZLIBConfig.cmake |
|
268
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib) |
|
269
|
|
|
270
|
write_basic_package_version_file( |
|
271
|
"${zlib_BINARY_DIR}/ZLIBConfigVersion.cmake" |
|
272
|
VERSION "${zlib_VERSION}" |
|
273
|
COMPATIBILITY AnyNewerVersion) |
|
274
|
|
|
275
|
install(FILES ${zlib_BINARY_DIR}/ZLIBConfig.cmake |
|
276
|
${zlib_BINARY_DIR}/ZLIBConfigVersion.cmake |
|
277
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zlib) |
|
278
|
install( |
|
279
|
FILES ${ZLIB_PUBLIC_HDRS} |
|
280
|
COMPONENT Development |
|
281
|
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") |
|
282
|
install( |
|
283
|
FILES zlib.3 |
|
284
|
COMPONENT Docs |
|
285
|
DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") |
|
286
|
install( |
|
287
|
FILES LICENSE |
|
288
|
doc/algorithm.txt |
|
289
|
doc/crc-doc.1.0.pdf |
|
290
|
doc/rfc1950.txt |
|
291
|
doc/rfc1951.txt |
|
292
|
doc/rfc1952.txt |
|
293
|
doc/txtvsbin.txt |
|
294
|
COMPONENT Docs |
|
295
|
DESTINATION "${CMAKE_INSTALL_DOCDIR}/zlib") |
|
296
|
install( |
|
297
|
FILES ${ZLIB_PC} |
|
298
|
COMPONENT Development |
|
299
|
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") |
|
300
|
endif(ZLIB_INSTALL) |
|
301
|
|
|
302
|
# ============================================================================ |
|
303
|
# Tests |
|
304
|
# ============================================================================ |
|
305
|
if(ZLIB_BUILD_TESTING) |
|
306
|
enable_testing() |
|
307
|
add_subdirectory(test) |
|
308
|
endif(ZLIB_BUILD_TESTING) |
|
309
|
|
|
310
|
add_subdirectory(contrib) |
|
311
|
|