diff options
Diffstat (limited to 'compat/zlib/contrib/minizip/CMakeLists.txt')
| -rw-r--r-- | compat/zlib/contrib/minizip/CMakeLists.txt | 387 |
1 files changed, 387 insertions, 0 deletions
diff --git a/compat/zlib/contrib/minizip/CMakeLists.txt b/compat/zlib/contrib/minizip/CMakeLists.txt new file mode 100644 index 0000000..80ccf99 --- /dev/null +++ b/compat/zlib/contrib/minizip/CMakeLists.txt @@ -0,0 +1,387 @@ +cmake_minimum_required(VERSION 3.12...3.31) + +project( + minizip + VERSION 1.0.0 + LANGUAGES C + DESCRIPTION "A library for creating zipfiles based in zlib" + HOMEPAGE_URL "https://www.winimage.com/zLibDll/minizip.html") + +if(CMAKE_SIZEOF_VOID_P LESS 8 AND NOT MINGW) + message(WARNING "libminizip needs 64bit - stopping here") + return() +endif(CMAKE_SIZEOF_VOID_P LESS 8 AND NOT MINGW) + +# ============================================================================ +# CPack +# ============================================================================ +set(CPACK_PACKAGE_VENDOR "zlib-Project") +set(CPACK_PACKAGE_DESCRIPTION_FILE ${minizip_SOURCE_DIR}/MiniZip64_info.txt) +set(CPACK_RESOURCE_FILE_LICENSE ${minizip_SOURCE_DIR}/../../LICENSE) +set(CPACK_RESOURCE_FILE_README ${minizip_SOURCE_DIR}/MiniZip64_info.txt) + +# ============================================================================ +# set options if build from zlib +# ============================================================================ +if(ZLIB_BUILD_MINIZIP) + set(MINIZIP_BUILD_SHARED ${ZLIB_MINIZIP_BUILD_SHARED} CACHE BOOL "") + set(MINIZIP_BUILD_STATIC ${ZLIB_MINIZIP_BUILD_STATIC} CACHE BOOL "") + set(MINIZIP_BUILD_TESTING ${ZLIB_MINIZIP_INSTALL} CACHE BOOL "") + set(MINIZIP_INSTALL ${ZLIB_MINIZIP_INSTALL} CACHE BOOL "") +endif(ZLIB_BUILD_MINIZIP) + +# ============================================================================ +# configuration +# ============================================================================ +option(MINIZIP_BUILD_SHARED "Enable building minizip shared library" ON) +option(MINIZIP_BUILD_STATIC "Enable building minizip static library" ON) +option(MINIZIP_BUILD_TESTING "Enable testing of minizip" ON) +option(MINIZIP_ENABLE_BZIP2 "Build minizip with bzip2 support" OFF) +option(MINIZIP_INSTALL "Enable installation of minizip" ON) + +include(CheckCSourceCompiles) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CMakePackageConfigHelpers) +include(CheckTypeSize) +include(GNUInstallDirs) + +if(NOT CPACK_INCLUDED) + include(CPack) +endif(NOT CPACK_INCLUDED) + +if(NOT DEFINED ZLIB_BUILD_MINIZIP) + if(MINIZIP_BUILD_SHARED) + list(APPEND REQUIRED_COMPONENTS "shared") + endif(MINIZIP_BUILD_SHARED) + + if(MINIZIP_BUILD_STATIC) + list(APPEND REQUIRED_COMPONENTS "static") + endif(MINIZIP_BUILD_STATIC) + + find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG) +endif(NOT DEFINED ZLIB_BUILD_MINIZIP) + +if(MINIZIP_ENABLE_BZIP2) + find_package(BZip2 REQUIRED) +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) + +set(LIBMINIZIP_SRCS ioapi.c mztools.c unzip.c zip.c) + +set(LIBMINIZIP_HDRS crypt.h ints.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 OR CYGWIN) + set(minizip_static_suffix "s") + set(CMAKE_DEBUG_POSTFIX "d") +endif(WIN32 OR CYGWIN) + +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:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> + $<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1> + PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1> + $<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1> + $<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=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 + VERSION ${minizip_VERSION} + SOVERSION ${minizip_VERSION_MAJOR}) + + target_link_libraries(libminizip + PUBLIC ZLIB::ZLIB + $<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2>) + + add_executable(minizip ${MINIZIP_SRCS} ${MINIZIP_HDRS}) + set_target_properties(minizip PROPERTIES EXPORT_NAME minizip_executable) + target_compile_definitions( + minizip PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>) + target_link_libraries(minizip PRIVATE MINIZIP::minizip) + add_executable(miniunzip ${MINIUNZIP_SRCS} ${MINIUNZIP_HDRS}) + set_target_properties(miniunzip PROPERTIES EXPORT_NAME miniunzip_executable) + target_compile_definitions( + miniunzip PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>) + 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:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN> + $<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1> + PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1> + $<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1> + $<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=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 ZLIB::ZLIBSTATIC + $<$<BOOL:${BZIP2_FOUND}>:BZip2::BZip2>) + + add_executable(minizipstatic ${MINIZIP_SRCS} ${MINIZIP_HDRS}) + set_target_properties(minizipstatic PROPERTIES EXPORT_NAME + minizip_static_executable) + target_compile_definitions( + minizipstatic PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>) + target_link_libraries(minizipstatic PRIVATE MINIZIP::minizipstatic) + add_executable(miniunzipstatic ${MINIUNZIP_SRCS} ${MINIUNZIP_HDRS}) + set_target_properties(miniunzipstatic + PROPERTIES EXPORT_NAME miniunzip_static_executable) + target_compile_definitions( + miniunzipstatic PRIVATE $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_WARNINGS>) + 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 minizipSharedExport + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + install( + EXPORT minizipSharedExport + FILE minizip-shared.cmake + NAMESPACE MINIZIP:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip) + + 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 minizipStaticExport + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + install( + EXPORT minizipStaticExport + FILE minizip-static.cmake + NAMESPACE MINIZIP:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/minizip) + 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) + 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( + 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) |
