Fossil SCM

fossil-scm / compat / zlib / CMakeLists.txt
Blame History Raw 311 lines
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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button