-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
superseeds #835
- Loading branch information
Vollstrecker
committed
Dec 11, 2024
1 parent
2009fc5
commit cb47dd8
Showing
9 changed files
with
650 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,382 @@ | ||
cmake_minimum_required(VERSION 3.12) | ||
|
||
project(minizip | ||
VERSION 1.0.0 | ||
LANGUAGES C) | ||
|
||
option(MINIZIP_BUILD_SHARED "Enable building zlib shared library" ON) | ||
option(MINIZIP_BUILD_STATIC "Enable building zlib static library" ON) | ||
option(MINIZIP_BUILD_TESTING "Enable testing of minizip" ON) | ||
option(MINIZIP_ENABLE_BZIP2 "Build minizip withj bzip2 support" ON) | ||
option(MINIZIP_INSTALL "Enable installation of minizip" ON) | ||
|
||
if(MINGW) | ||
option(MINIZIP_INSTALL_COMPAT_DLL "Install a copy as libminizip-1.dll" ON) | ||
endif(MINGW) | ||
|
||
include(CheckFunctionExists) | ||
include(CheckIncludeFile) | ||
include(CheckCSourceCompiles) | ||
include(CMakePackageConfigHelpers) | ||
include(GNUInstallDirs) | ||
|
||
if(MINIZIP_ENABLE_BZIP2) | ||
find_package(BZip2) | ||
endif(MINIZIP_ENABLE_BZIP2) | ||
|
||
# | ||
# Check for fopen64 | ||
# | ||
check_function_exists(fopen64 HAVE_FOPEN64) | ||
|
||
# | ||
# Check for fseeko | ||
# | ||
check_function_exists(fseeko HAVE_FSEEKO) | ||
|
||
# | ||
# Check for unistd.h | ||
# | ||
check_include_file(unistd.h HAVE_UNISTD_H) | ||
|
||
# | ||
# Check to see if we have large file support | ||
# | ||
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) | ||
check_type_size(off64_t OFF64_T) | ||
unset(CMAKE_REQUIRED_DEFINITIONS) # clear variable | ||
|
||
# | ||
# Check visibility attribute is supported | ||
if(MSVC) | ||
set(CMAKE_REQUIRED_FLAGS "-WX") | ||
else(MSVC) | ||
set(CMAKE_REQUIRED_FLAGS "-WError") | ||
endif(MSVC) | ||
|
||
check_c_source_compiles( | ||
" | ||
#include <stdlib.h> | ||
static void f(void) __attribute__ ((visibility(\"hidden\"))); | ||
int main(void) {return 0;} | ||
" | ||
HAVE___ATTR__VIS_HIDDEN) | ||
|
||
unset(CMAKE_REQUIRED_FLAGS) | ||
|
||
if(NOT TARGET ZLIB::ZLIB) | ||
find_package(zlib REQUIRED) | ||
endif(NOT TARGET ZLIB::ZLIB) | ||
|
||
set(LIBMINIZIP_SRCS | ||
ioapi.c | ||
mztools.c | ||
unzip.c | ||
zip.c) | ||
|
||
set(LIBMINIZIP_HDRS | ||
crypt.h | ||
ioapi.h | ||
mztools.h | ||
unzip.h | ||
zip.h) | ||
|
||
set(MINIZIP_SRCS | ||
ioapi.c | ||
$<$<BOOL:${WIN32}>:iowin32.c> | ||
minizip.c | ||
zip.c) | ||
|
||
set(MINIZIP_HDRS | ||
crypt.h | ||
ints.h | ||
ioapi.h | ||
$<$<BOOL:${WIN32}>:iowin32.h> | ||
skipset.h | ||
zip.h) | ||
|
||
set(MINIUNZIP_SRCS | ||
ioapi.c | ||
$<$<BOOL:${WIN32}>:iowin32.c> | ||
miniunz.c | ||
unzip.c | ||
zip.c) | ||
|
||
set(MINIUNZIP_HDRS | ||
crypt.h | ||
ints.h | ||
ioapi.h | ||
$<$<BOOL:${WIN32}>:iowin32.h> | ||
skipset.h | ||
unzip.h | ||
zip.h) | ||
|
||
if(WIN32) | ||
set(minizip_static_suffix "s") | ||
set(CMAKE_DEBUG_POSTFIX "d") | ||
endif(WIN32) | ||
|
||
if(MINIZIP_BUILD_SHARED) | ||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) | ||
add_library(libminizip SHARED | ||
${LIBMINIZIP_SRCS} | ||
${LIBMINIZIP_HDRS}) | ||
add_library(MINIZIP::MINIZIP ALIAS libminizip) | ||
target_include_directories(libminizip PUBLIC | ||
$<BUILD_INTERFACE:${minizip_SOURCE_DIR}> | ||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) | ||
target_compile_definitions(libminizip | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1> | ||
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> | ||
$<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1> | ||
PUBLIC | ||
$<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) | ||
|
||
if(NOT CYGWIN) | ||
set_target_properties(libminizip PROPERTIES | ||
SOVERSION ${minizip_VERSION_MAJOR}) | ||
endif(NOT CYGWIN) | ||
|
||
set_target_properties(libminizip PROPERTIES | ||
EXPORT_NAME MINIZIP | ||
OUTPUT_NAME minizip | ||
VERSIOM ${minizip_VERSION} | ||
SOVERSION ${minizip_VERSION_MAJOR}) | ||
target_link_libraries(libminizip | ||
PUBLIC | ||
$<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2> | ||
ZLIB::ZLIB) | ||
|
||
add_executable(minizip | ||
${MINIZIP_SRCS} | ||
${MINIZIP_HDRS}) | ||
target_compile_definitions(minizip | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>) | ||
target_link_libraries(minizip PRIVATE MINIZIP::MINIZIP) | ||
|
||
add_executable(miniunzip | ||
${MINIUNZIP_SRCS} | ||
${MINIUNZIP_HDRS}) | ||
target_compile_definitions(miniunzip | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>) | ||
target_link_libraries(miniunzip PRIVATE MINIZIP::MINIZIP) | ||
endif(MINIZIP_BUILD_SHARED) | ||
|
||
if(MINIZIP_BUILD_STATIC) | ||
|
||
add_library(libminizipstatic STATIC | ||
${LIBMINIZIP_SRCS} | ||
${LIBMINIZIP_HDRS}) | ||
add_library(MINIZIP::MINIZIPSTATIC ALIAS libminizipstatic) | ||
target_include_directories(libminizipstatic PUBLIC | ||
$<BUILD_INTERFACE:${minizip_SOURCE_DIR}> | ||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) | ||
target_compile_definitions(libminizipstatic | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1> | ||
$<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> | ||
$<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1> | ||
PUBLIC | ||
$<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>) | ||
set_target_properties(libminizipstatic PROPERTIES | ||
EXPORT_NAME MINIZIPSTATIC | ||
OUTPUT_NAME minizip${minizip_static_suffix}) | ||
|
||
if(CYGWIN) | ||
set_target_properties(libminizipstatic PROPERTIES | ||
SUFFIX ".dll.a") | ||
endif(CYGWIN) | ||
|
||
target_link_libraries(libminizipstatic | ||
PUBLIC | ||
$<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2> | ||
ZLIB::ZLIBSTATIC) | ||
|
||
add_executable(minizipstatic | ||
${MINIZIP_SRCS} | ||
${MINIZIP_HDRS}) | ||
target_compile_definitions(minizipstatic | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>) | ||
target_link_libraries(minizipstatic PRIVATE MINIZIP::MINIZIPSTATIC) | ||
|
||
add_executable(miniunzipstatic | ||
${MINIUNZIP_SRCS} | ||
${MINIUNZIP_HDRS}) | ||
target_compile_definitions(miniunzipstatic | ||
PRIVATE | ||
$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS> | ||
$<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>) | ||
target_link_libraries(miniunzipstatic PRIVATE MINIZIP::MINIZIPSTATIC) | ||
endif(MINIZIP_BUILD_STATIC) | ||
|
||
if(MINIZIP_INSTALL) | ||
if(MINIZIP_BUILD_SHARED) | ||
install(TARGETS libminizip minizip miniunzip | ||
COMPONENT Runtime | ||
EXPORT minizipExport | ||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" | ||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" | ||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") | ||
if(MINIZIP_INSTALL_COMPAT_DLL) | ||
install(FILES $<TARGET_FILE:libminizip> | ||
COMPONENT Runtime | ||
RENAME libminizip-${minizip_VERSION_MAJOR}.dll | ||
DESTINATION "${CMAKE_INSTALL_BINDIR}") | ||
endif(MINIZIP_INSTALL_COMPAT_DLL) | ||
|
||
if(MSVC) | ||
install(FILES $<TARGET_PDB_FILE:libminizip> | ||
COMPONENT Runtime | ||
DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
CONFIGURATIONS Debug OR RelWithDebInfo | ||
OPTIONAL | ||
) | ||
endif(MSVC) | ||
endif(MINIZIP_BUILD_SHARED) | ||
|
||
if(MINIZIP_BUILD_STATIC) | ||
install(TARGETS libminizipstatic | ||
COMPONENT Development | ||
TARGETS minizipstatic miniunzipstatic | ||
COMPONENT Runtime | ||
EXPORT minizipExport | ||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" | ||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" | ||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") | ||
endif(MINIZIP_BUILD_STATIC) | ||
|
||
configure_package_config_file(${minizip_SOURCE_DIR}/minizipConfig.cmake.in | ||
${minizip_BINARY_DIR}/minizipConfig.cmake | ||
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip | ||
NO_CHECK_REQUIRED_COMPONENTS_MACRO) | ||
|
||
write_basic_package_version_file( | ||
"${minizip_BINARY_DIR}/minizipConfigVersion.cmake" | ||
VERSION "${minizip_VERSION}" | ||
COMPATIBILITY AnyNewerVersion) | ||
|
||
install(FILES | ||
${minizip_BINARY_DIR}/minizipConfig.cmake | ||
${minizip_BINARY_DIR}/minizipConfigVersion.cmake | ||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip) | ||
|
||
install(EXPORT minizipExport | ||
FILE minizip.cmake | ||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip | ||
NAMESPACE MINIZIP::) | ||
|
||
install(FILES ${LIBMINIZIP_HDRS} | ||
COMPONENT Development | ||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") | ||
endif(MINIZIP_INSTALL) | ||
|
||
if(MINIZIP_BUILD_TESTING) | ||
enable_testing() | ||
|
||
if(MINIZIP_BUILD_SHARED AND NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll") | ||
add_test(NAME minizip_prepare_shared_zip | ||
COMMAND ${CMAKE_COMMAND} -DCREATE_SHARED=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_zipping_test_file_shared | ||
COMMAND minizip test_file_shared.zip test_file_shared.txt | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_prepare_shared_unzip | ||
COMMAND ${CMAKE_COMMAND} -DMOVE_SHARED=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_miniunzipping_test_file_shared.zip | ||
COMMAND miniunzip test_file_shared.zip | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_compare_shared | ||
COMMAND ${CMAKE_COMMAND} -E compare_files | ||
test_file_shared.txt test_file_shared.orig | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_clean_shared_zip | ||
COMMAND ${CMAKE_COMMAND} -DDELETE_SHARED=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
set_tests_properties(minizip_prepare_shared_zip | ||
PROPERTIES | ||
FIXTURES_SETUP prepare_shared) | ||
set_tests_properties(minizip_zipping_test_file_shared | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_shared | ||
FIXTURES_SETUP zip_shared) | ||
set_tests_properties(minizip_prepare_shared_unzip | ||
PROPERTIES | ||
FIXTURES_REQUIRED zip_shared | ||
FIXTURES_SETUP prepare_unzip_shared) | ||
set_tests_properties(minizip_miniunzipping_test_file_shared.zip | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_unzip_shared | ||
FIXTURES_SETUP prepare_compare_shared) | ||
set_tests_properties(minizip_compare_shared | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_compare_shared | ||
FIXTURES_SETUP compared_shared) | ||
set_tests_properties(minizip_clean_shared_zip | ||
PROPERTIES | ||
FIXTURES_CLEANUP compared_shared) | ||
endif(MINIZIP_BUILD_SHARED AND NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll") | ||
|
||
if(MINIZIP_BUILD_STATIC) | ||
add_test(NAME minizip_prepare_static_zip | ||
COMMAND ${CMAKE_COMMAND} -DCREATE_STATIC=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_zipping_test_file_static | ||
COMMAND minizipstatic test_file_static.zip test_file_static.txt | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_prepare_static_unzip | ||
COMMAND ${CMAKE_COMMAND} -DMOVE_STATIC=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_miniunzipping_test_file_static.zip | ||
COMMAND miniunzipstatic test_file_static.zip | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_compare_static | ||
COMMAND ${CMAKE_COMMAND} -E compare_files | ||
test_file_static.txt test_file_static.orig | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
add_test(NAME minizip_clean_static_zip | ||
COMMAND ${CMAKE_COMMAND} -DDELETE_STATIC=ON | ||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test/test_helper.cm | ||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/test) | ||
set_tests_properties(minizip_prepare_static_zip | ||
PROPERTIES | ||
FIXTURES_SETUP prepare_static) | ||
set_tests_properties(minizip_zipping_test_file_static | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_static | ||
FIXTURES_SETUP zip_static) | ||
set_tests_properties(minizip_prepare_static_unzip | ||
PROPERTIES | ||
FIXTURES_REQUIRED zip_static | ||
FIXTURES_SETUP prepare_unzip_static) | ||
set_tests_properties(minizip_miniunzipping_test_file_static.zip | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_unzip_static | ||
FIXTURES_SETUP prepare_compare_static) | ||
set_tests_properties(minizip_compare_static | ||
PROPERTIES | ||
FIXTURES_REQUIRED prepare_compare_static | ||
FIXTURES_SETUP compared_static) | ||
set_tests_properties(minizip_clean_static_zip | ||
PROPERTIES | ||
FIXTURES_CLEANUP compared_static) | ||
endif(MINIZIP_BUILD_STATIC) | ||
|
||
add_subdirectory(test) | ||
endif(MINIZIP_BUILD_TESTING) |
Oops, something went wrong.