Fossil SCM

fossil-scm / compat / zlib / contrib / minizip / CMakeLists.txt
Blame History Raw 388 lines
1
cmake_minimum_required(VERSION 3.12...3.31)
2
3
project(
4
minizip
5
VERSION 1.0.0
6
LANGUAGES C
7
DESCRIPTION "A library for creating zipfiles based in zlib"
8
HOMEPAGE_URL "https://www.winimage.com/zLibDll/minizip.html")
9
10
if(CMAKE_SIZEOF_VOID_P LESS 8 AND NOT MINGW)
11
message(WARNING "libminizip needs 64bit - stopping here")
12
return()
13
endif(CMAKE_SIZEOF_VOID_P LESS 8 AND NOT MINGW)
14
15
# ============================================================================
16
# CPack
17
# ============================================================================
18
set(CPACK_PACKAGE_VENDOR "zlib-Project")
19
set(CPACK_PACKAGE_DESCRIPTION_FILE ${minizip_SOURCE_DIR}/MiniZip64_info.txt)
20
set(CPACK_RESOURCE_FILE_LICENSE ${minizip_SOURCE_DIR}/../../LICENSE)
21
set(CPACK_RESOURCE_FILE_README ${minizip_SOURCE_DIR}/MiniZip64_info.txt)
22
23
# ============================================================================
24
# set options if build from zlib
25
# ============================================================================
26
if(ZLIB_BUILD_MINIZIP)
27
set(MINIZIP_BUILD_SHARED ${ZLIB_MINIZIP_BUILD_SHARED} CACHE BOOL "")
28
set(MINIZIP_BUILD_STATIC ${ZLIB_MINIZIP_BUILD_STATIC} CACHE BOOL "")
29
set(MINIZIP_BUILD_TESTING ${ZLIB_MINIZIP_INSTALL} CACHE BOOL "")
30
set(MINIZIP_INSTALL ${ZLIB_MINIZIP_INSTALL} CACHE BOOL "")
31
endif(ZLIB_BUILD_MINIZIP)
32
33
# ============================================================================
34
# configuration
35
# ============================================================================
36
option(MINIZIP_BUILD_SHARED "Enable building minizip shared library" ON)
37
option(MINIZIP_BUILD_STATIC "Enable building minizip static library" ON)
38
option(MINIZIP_BUILD_TESTING "Enable testing of minizip" ON)
39
option(MINIZIP_ENABLE_BZIP2 "Build minizip with bzip2 support" OFF)
40
option(MINIZIP_INSTALL "Enable installation of minizip" ON)
41
42
include(CheckCSourceCompiles)
43
include(CheckFunctionExists)
44
include(CheckIncludeFile)
45
include(CMakePackageConfigHelpers)
46
include(CheckTypeSize)
47
include(GNUInstallDirs)
48
49
if(NOT CPACK_INCLUDED)
50
include(CPack)
51
endif(NOT CPACK_INCLUDED)
52
53
if(NOT DEFINED ZLIB_BUILD_MINIZIP)
54
if(MINIZIP_BUILD_SHARED)
55
list(APPEND REQUIRED_COMPONENTS "shared")
56
endif(MINIZIP_BUILD_SHARED)
57
58
if(MINIZIP_BUILD_STATIC)
59
list(APPEND REQUIRED_COMPONENTS "static")
60
endif(MINIZIP_BUILD_STATIC)
61
62
find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG)
63
endif(NOT DEFINED ZLIB_BUILD_MINIZIP)
64
65
if(MINIZIP_ENABLE_BZIP2)
66
find_package(BZip2 REQUIRED)
67
endif(MINIZIP_ENABLE_BZIP2)
68
69
#
70
# Check for fopen64
71
#
72
check_function_exists(fopen64 HAVE_FOPEN64)
73
74
#
75
# Check for fseeko
76
#
77
check_function_exists(fseeko HAVE_FSEEKO)
78
79
#
80
# Check for unistd.h
81
#
82
check_include_file(unistd.h HAVE_UNISTD_H)
83
84
#
85
# Check to see if we have large file support
86
#
87
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
88
check_type_size(off64_t OFF64_T)
89
unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable
90
91
#
92
# Check visibility attribute is supported
93
#
94
if(MSVC)
95
set(CMAKE_REQUIRED_FLAGS "-WX")
96
else(MSVC)
97
set(CMAKE_REQUIRED_FLAGS "-WError")
98
endif(MSVC)
99
100
check_c_source_compiles(
101
"
102
#include <stdlib.h>
103
static void f(void) __attribute__ ((visibility(\"hidden\")));
104
int main(void) {return 0;}
105
"
106
HAVE___ATTR__VIS_HIDDEN)
107
108
unset(CMAKE_REQUIRED_FLAGS)
109
110
set(LIBMINIZIP_SRCS ioapi.c mztools.c unzip.c zip.c)
111
112
set(LIBMINIZIP_HDRS crypt.h ints.h ioapi.h mztools.h unzip.h zip.h)
113
114
set(MINIZIP_SRCS ioapi.c $<$<BOOL:${WIN32}>:iowin32.c> minizip.c zip.c)
115
116
set(MINIZIP_HDRS crypt.h ints.h ioapi.h $<$<BOOL:${WIN32}>:iowin32.h> skipset.h
117
zip.h)
118
119
set(MINIUNZIP_SRCS ioapi.c $<$<BOOL:${WIN32}>:iowin32.c> miniunz.c unzip.c
120
zip.c)
121
122
set(MINIUNZIP_HDRS
123
crypt.h
124
ints.h
125
ioapi.h
126
$<$<BOOL:${WIN32}>:iowin32.h>
127
skipset.h
128
unzip.h
129
zip.h)
130
131
if(WIN32 OR CYGWIN)
132
set(minizip_static_suffix "s")
133
set(CMAKE_DEBUG_POSTFIX "d")
134
endif(WIN32 OR CYGWIN)
135
136
if(MINIZIP_BUILD_SHARED)
137
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
138
add_library(libminizip SHARED ${LIBMINIZIP_SRCS} ${LIBMINIZIP_HDRS})
139
add_library(MINIZIP::minizip ALIAS libminizip)
140
target_include_directories(
141
libminizip PUBLIC $<BUILD_INTERFACE:${minizip_SOURCE_DIR}>
142
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
143
target_compile_definitions(
144
libminizip
145
PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
146
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>
147
$<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1>
148
PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
149
$<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1>
150
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>)
151
152
if(NOT CYGWIN)
153
set_target_properties(libminizip PROPERTIES SOVERSION
154
${minizip_VERSION_MAJOR})
155
endif(NOT CYGWIN)
156
157
set_target_properties(
158
libminizip
159
PROPERTIES EXPORT_NAME minizip
160
OUTPUT_NAME minizip
161
VERSION ${minizip_VERSION}
162
SOVERSION ${minizip_VERSION_MAJOR})
163
164
target_link_libraries(libminizip
165
PUBLIC ZLIB::ZLIB
166
$<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2>)
167
168
add_executable(minizip ${MINIZIP_SRCS} ${MINIZIP_HDRS})
169
set_target_properties(minizip PROPERTIES EXPORT_NAME minizip_executable)
170
target_compile_definitions(
171
minizip PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>)
172
target_link_libraries(minizip PRIVATE MINIZIP::minizip)
173
add_executable(miniunzip ${MINIUNZIP_SRCS} ${MINIUNZIP_HDRS})
174
set_target_properties(miniunzip PROPERTIES EXPORT_NAME miniunzip_executable)
175
target_compile_definitions(
176
miniunzip PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>)
177
target_link_libraries(miniunzip PRIVATE MINIZIP::minizip)
178
endif(MINIZIP_BUILD_SHARED)
179
180
if(MINIZIP_BUILD_STATIC)
181
add_library(libminizipstatic STATIC ${LIBMINIZIP_SRCS} ${LIBMINIZIP_HDRS})
182
add_library(MINIZIP::minizipstatic ALIAS libminizipstatic)
183
target_include_directories(
184
libminizipstatic
185
PUBLIC $<BUILD_INTERFACE:${minizip_SOURCE_DIR}>
186
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
187
target_compile_definitions(
188
libminizipstatic
189
PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>
190
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>
191
$<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1>
192
PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
193
$<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1>
194
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>)
195
set_target_properties(
196
libminizipstatic PROPERTIES EXPORT_NAME minizipstatic
197
OUTPUT_NAME minizip${minizip_static_suffix})
198
199
if(CYGWIN)
200
set_target_properties(libminizipstatic PROPERTIES SUFFIX ".dll.a")
201
endif(CYGWIN)
202
203
target_link_libraries(libminizipstatic PUBLIC ZLIB::ZLIBSTATIC
204
$<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2>)
205
206
add_executable(minizipstatic ${MINIZIP_SRCS} ${MINIZIP_HDRS})
207
set_target_properties(minizipstatic PROPERTIES EXPORT_NAME
208
minizip_static_executable)
209
target_compile_definitions(
210
minizipstatic PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>)
211
target_link_libraries(minizipstatic PRIVATE MINIZIP::minizipstatic)
212
add_executable(miniunzipstatic ${MINIUNZIP_SRCS} ${MINIUNZIP_HDRS})
213
set_target_properties(miniunzipstatic
214
PROPERTIES EXPORT_NAME miniunzip_static_executable)
215
target_compile_definitions(
216
miniunzipstatic PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>)
217
target_link_libraries(miniunzipstatic PRIVATE MINIZIP::minizipstatic)
218
endif(MINIZIP_BUILD_STATIC)
219
220
if(MINIZIP_INSTALL)
221
if(MINIZIP_BUILD_SHARED)
222
install(
223
TARGETS libminizip minizip miniunzip
224
COMPONENT Runtime
225
EXPORT minizipSharedExport
226
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
227
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
228
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
229
install(
230
EXPORT minizipSharedExport
231
FILE minizip-shared.cmake
232
NAMESPACE MINIZIP::
233
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip)
234
235
if(MSVC)
236
install(
237
FILES $<TARGET_PDB_FILE:libminizip>
238
COMPONENT Runtime
239
DESTINATION ${CMAKE_INSTALL_BINDIR}
240
CONFIGURATIONS Debug OR RelWithDebInfo
241
OPTIONAL)
242
endif(MSVC)
243
endif(MINIZIP_BUILD_SHARED)
244
245
if(MINIZIP_BUILD_STATIC)
246
install(
247
TARGETS libminizipstatic
248
COMPONENT Development
249
TARGETS minizipstatic miniunzipstatic
250
COMPONENT Runtime
251
EXPORT minizipStaticExport
252
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
253
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
254
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
255
install(
256
EXPORT minizipStaticExport
257
FILE minizip-static.cmake
258
NAMESPACE MINIZIP::
259
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip)
260
endif(MINIZIP_BUILD_STATIC)
261
262
configure_package_config_file(
263
${minizip_SOURCE_DIR}/minizipConfig.cmake.in
264
${minizip_BINARY_DIR}/minizipConfig.cmake
265
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip)
266
write_basic_package_version_file(
267
"${minizip_BINARY_DIR}/minizipConfigVersion.cmake"
268
VERSION "${minizip_VERSION}"
269
COMPATIBILITY AnyNewerVersion)
270
install(FILES ${minizip_BINARY_DIR}/minizipConfig.cmake
271
${minizip_BINARY_DIR}/minizipConfigVersion.cmake
272
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip)
273
install(
274
FILES ${LIBMINIZIP_HDRS}
275
COMPONENT Development
276
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
277
endif(MINIZIP_INSTALL)
278
279
if(MINIZIP_BUILD_TESTING)
280
enable_testing()
281
282
if(MINIZIP_BUILD_SHARED AND NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL
283
".dll")
284
add_test(
285
NAME minizip_prepare_shared_zip
286
COMMAND ${CMAKE_COMMAND} -DCREATE_SHARED=ON -P
287
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
288
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
289
add_test(
290
NAME minizip_zipping_test_file_shared
291
COMMAND minizip test_file_shared.zip test_file_shared.txt
292
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
293
add_test(
294
NAME minizip_prepare_shared_unzip
295
COMMAND ${CMAKE_COMMAND} -DMOVE_SHARED=ON -P
296
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
297
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
298
add_test(
299
NAME minizip_miniunzipping_test_file_shared.zip
300
COMMAND miniunzip test_file_shared.zip
301
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
302
add_test(
303
NAME minizip_compare_shared
304
COMMAND ${CMAKE_COMMAND} -E compare_files test_file_shared.txt
305
test_file_shared.orig
306
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
307
add_test(
308
NAME minizip_clean_shared_zip
309
COMMAND ${CMAKE_COMMAND} -DDELETE_SHARED=ON -P
310
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
311
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
312
set_tests_properties(minizip_prepare_shared_zip
313
PROPERTIES FIXTURES_SETUP prepare_shared)
314
set_tests_properties(
315
minizip_zipping_test_file_shared
316
PROPERTIES FIXTURES_REQUIRED prepare_shared FIXTURES_SETUP
317
zip_shared)
318
set_tests_properties(
319
minizip_prepare_shared_unzip
320
PROPERTIES FIXTURES_REQUIRED zip_shared FIXTURES_SETUP
321
prepare_unzip_shared)
322
set_tests_properties(
323
minizip_miniunzipping_test_file_shared.zip
324
PROPERTIES FIXTURES_REQUIRED prepare_unzip_shared FIXTURES_SETUP
325
prepare_compare_shared)
326
set_tests_properties(
327
minizip_compare_shared
328
PROPERTIES FIXTURES_REQUIRED prepare_compare_shared FIXTURES_SETUP
329
compared_shared)
330
set_tests_properties(minizip_clean_shared_zip
331
PROPERTIES FIXTURES_CLEANUP compared_shared)
332
endif(MINIZIP_BUILD_SHARED AND NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL
333
".dll")
334
335
if(MINIZIP_BUILD_STATIC)
336
add_test(
337
NAME minizip_prepare_static_zip
338
COMMAND ${CMAKE_COMMAND} -DCREATE_STATIC=ON -P
339
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
340
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
341
add_test(
342
NAME minizip_zipping_test_file_static
343
COMMAND minizipstatic test_file_static.zip test_file_static.txt
344
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
345
add_test(
346
NAME minizip_prepare_static_unzip
347
COMMAND ${CMAKE_COMMAND} -DMOVE_STATIC=ON -P
348
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
349
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
350
add_test(
351
NAME minizip_miniunzipping_test_file_static.zip
352
COMMAND miniunzipstatic test_file_static.zip
353
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
354
add_test(
355
NAME minizip_compare_static
356
COMMAND ${CMAKE_COMMAND} -E compare_files test_file_static.txt
357
test_file_static.orig
358
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
359
add_test(
360
NAME minizip_clean_static_zip
361
COMMAND ${CMAKE_COMMAND} -DDELETE_STATIC=ON -P
362
${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm
363
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test)
364
set_tests_properties(minizip_prepare_static_zip
365
PROPERTIES FIXTURES_SETUP prepare_static)
366
set_tests_properties(
367
minizip_zipping_test_file_static
368
PROPERTIES FIXTURES_REQUIRED prepare_static FIXTURES_SETUP
369
zip_static)
370
set_tests_properties(
371
minizip_prepare_static_unzip
372
PROPERTIES FIXTURES_REQUIRED zip_static FIXTURES_SETUP
373
prepare_unzip_static)
374
set_tests_properties(
375
minizip_miniunzipping_test_file_static.zip
376
PROPERTIES FIXTURES_REQUIRED prepare_unzip_static FIXTURES_SETUP
377
prepare_compare_static)
378
set_tests_properties(
379
minizip_compare_static
380
PROPERTIES FIXTURES_REQUIRED prepare_compare_static FIXTURES_SETUP
381
compared_static)
382
set_tests_properties(minizip_clean_static_zip
383
PROPERTIES FIXTURES_CLEANUP compared_static)
384
endif(MINIZIP_BUILD_STATIC)
385
386
add_subdirectory(test)
387
endif(MINIZIP_BUILD_TESTING)
388

Keyboard Shortcuts

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