From 0b3932c80dc338b36fe1b8bacd216bacb8991c17 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Sun, 15 Feb 2026 00:15:41 +0100 Subject: CMake: Add build for zlib1.dll with zlib and minizip. zlib1.dll is the legacy zlib + minizip DLL. --- contrib/CMakeLists.txt | 6 ++ contrib/minizip/unzip.c | 3 + contrib/minizip/zip.c | 3 + contrib/zlib1-dll/CMakeLists.txt | 196 +++++++++++++++++++++++++++++++++++++++ contrib/zlib1-dll/readme.txt | 21 +++++ 5 files changed, 229 insertions(+) create mode 100644 contrib/zlib1-dll/CMakeLists.txt create mode 100644 contrib/zlib1-dll/readme.txt diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index c716d6a3..4c7bc688 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -52,4 +52,10 @@ zlib_add_contrib_lib(PUFF "puff decompress library" puff) if(WIN32) zlib_add_contrib_lib(TESTZLIB "testzlib binary" testzlib) + + if (ZLIB_BUILD_ZLIB1_DLL) + add_subdirectory(zlib1-dll/) + endif (ZLIB_BUILD_ZLIB1_DLL) + + option(ZLIB_BUILD_ZLIB1_DLL "Build the legacy zlib + minizip DLL" OFF) endif(WIN32) diff --git a/contrib/minizip/unzip.c b/contrib/minizip/unzip.c index 8513aec6..44c51bd3 100644 --- a/contrib/minizip/unzip.c +++ b/contrib/minizip/unzip.c @@ -68,6 +68,9 @@ #include #include +#ifdef ZLIB_DLL +# undef ZLIB_DLL +#endif #include "zlib.h" #include "unzip.h" diff --git a/contrib/minizip/zip.c b/contrib/minizip/zip.c index 4fc87d48..46943cec 100644 --- a/contrib/minizip/zip.c +++ b/contrib/minizip/zip.c @@ -29,6 +29,9 @@ #ifndef ZLIB_CONST # define ZLIB_CONST #endif +#ifdef ZLIB_DLL +# undef ZLIB_DLL +#endif #include "zlib.h" #include "zip.h" diff --git a/contrib/zlib1-dll/CMakeLists.txt b/contrib/zlib1-dll/CMakeLists.txt new file mode 100644 index 00000000..c9825aa0 --- /dev/null +++ b/contrib/zlib1-dll/CMakeLists.txt @@ -0,0 +1,196 @@ +cmake_minimum_required(VERSION 3.12...3.31) + +project( + zlib1-dll + LANGUAGES C + VERSION 1.3.1.2 + HOMEPAGE_URL "https://zlib.net/" + DESCRIPTION "zlib1.dll is the legacy DLL with zlib and minizip") + +# ============================================================================ +# configuration +# ============================================================================ + +if(NOT WIN32) + message(FATAL_ERROR "This creates zlib1., Nothing else") +endif(NOT WIN32) + +option(ENABLE_BZIP2 "Build with bzip2 support" OFF) +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + +include(CheckCSourceCompiles) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CMakePackageConfigHelpers) +include(CheckTypeSize) +include(CPack) +include(GNUInstallDirs) + +if(NOT ZLIB_CONF_WRITTEN) + set(CONF_OUT_FILE ${zlib1-dll_BINARY_DIR}/zconf.h.cmakein) + file(READ ../../zconf.h ZCONF_CONTENT LIMIT 245) + file(WRITE ${CONF_OUT_FILE} ${ZCONF_CONTENT}) + file(APPEND ${CONF_OUT_FILE} "#cmakedefine Z_PREFIX 1\n") + file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_STDARG_H 1\n") + file(APPEND ${CONF_OUT_FILE} "#cmakedefine HAVE_UNISTD_H 1\n") + file(READ ../../zconf.h ZCONF_CONTENT OFFSET 244) + set(FIRST_ITEM TRUE) + + foreach(item IN LISTS ZCONF_CONTENT) + if(FIRST_ITEM) + string(APPEND OUT_CONTENT ${item}) + set(FIRST_ITEM FALSE) + else(FIRST_ITEM) + string(APPEND OUT_CONTENT "\;" ${item}) + endif(FIRST_ITEM) + endforeach(item IN LISTS ${ZCONF_CONTENT}) + + file(APPEND ${CONF_OUT_FILE} ${OUT_CONTENT}) + set(ZLIB_CONF_WRITTEN + TRUE + CACHE BOOL "zconf.h.cmakein was created") + mark_as_advanced(ZLIB_CONF_WRITTEN) +endif(NOT ZLIB_CONF_WRITTEN) + +if(ENABLE_BZIP2) + find_package(BZip2 REQUIRED) +endif(ENABLE_BZIP2) + +# +# Check for fopen64 +# +check_function_exists(fopen64 HAVE_FOPEN64) + +# +# 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 for fseeko +# +check_function_exists(fseeko HAVE_FSEEKO) + +# +# Check for stdarg.h +# +check_include_file(stdarg.h HAVE_STDARG_H) + +# +# Check for unistd.h +# +check_include_file(unistd.h HAVE_UNISTD_H) + +# +# 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 + static void f(void) __attribute__ ((visibility(\"hidden\"))); + int main(void) {return 0;} + " + HAVE___ATTR__VIS_HIDDEN) + +unset(CMAKE_COMPILE_FLAGS) +configure_file(${zlib1-dll_BINARY_DIR}/zconf.h.cmakein ${zlib1-dll_BINARY_DIR}/zconf.h) + +# ============================================================================ +# zlib1-dll +# ============================================================================ +set(ZLIB1-DLL_PUBLIC_HDRS + ${zlib1-dll_BINARY_DIR}/zconf.h + ../../zlib.h + ../minizip/crypt.h + ../minizip/ints.h + ../minizip/ioapi.h + ../minizip/mztools.h + ../minizip/unzip.h + ../minizip/zip.h) + +set(ZLIB1-DLL_PRIVATE_HDRS + ../../crc32.h + ../../deflate.h + ../../gzguts.h + ../../inffast.h + ../../inffixed.h + ../../inflate.h + ../../inftrees.h + ../../trees.h + ../../zutil.h) + +set(ZLIB1-DLL_SRCS + ../../adler32.c + ../../compress.c + ../../crc32.c + ../../deflate.c + ../../gzclose.c + ../../gzlib.c + ../../gzread.c + ../../gzwrite.c + ../../inflate.c + ../../infback.c + ../../inftrees.c + ../../inffast.c + ../../trees.c + ../../uncompr.c + ../../win32/zlib1.rc + ../../zutil.c + ../minizip/ioapi.c + ../minizip/mztools.c + ../minizip/unzip.c + ../minizip/zip.c) + +add_library(zlib1 SHARED ${ZLIB1-DLL_SRCS} + ${ZLIB1-DLL_PUBLIC_HDRS} + ${ZLIB1-DLL_PRIVATE_HDRS}) + +#taget_include_directories doesn't like relative paths +include_directories(../../ + ../minizip + ${CMAKE_CURRENT_BINARY_DIR}) + +target_compile_definitions(zlib1 + PRIVATE ZLIB_BUILD + $<$:NO_FSEEKO> + $<$:HAVE_UNISTD_H=1> + $<$:HAVE_HIDDEN> + $<$:_CRT_SECURE_NO_DEPRECATE> + $<$:_CRT_NONSTDC_NO_DEPRECATE> + PUBLIC $<$:_LARGEFILE64_SOURCE=1> + $<$:HAVE_BZIP2=1> + $<$:USE_FILE32API=1>) + +target_link_libraries(zlib1 + PUBLIC $<$:BZip2::BZip2>) + +if(NOT CYGWIN) + set_target_properties(zlib1 PROPERTIES + SOVERSION ${zlib1-dll_VERSION_MAJOR} + VERSION ${zlib1-dll_VERSION}) +endif(NOT CYGWIN) + +set_target_properties(zlib1 PROPERTIES + DEFINE_SYMBOL ZLIB_DLL) + +install( + TARGETS zlib1 + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}") + +install( + FILES ${ZLIB1-DLL_PUBLIC_HDRS} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + +install( + FILES ../../LICENSE + DESTINATION "${CMAKE_INSTALL_DOCDIR}/zlib1-dll") diff --git a/contrib/zlib1-dll/readme.txt b/contrib/zlib1-dll/readme.txt new file mode 100644 index 00000000..eccb6ca3 --- /dev/null +++ b/contrib/zlib1-dll/readme.txt @@ -0,0 +1,21 @@ +Use this directory to build the legacy zlib1.dll for Windows, which contains +both zlib and minizip. Use cmake either at the command prompt, or with Visual +Studio as outlined below. + + +To create a Visual Studio project +--------------------------------- + +1. Start cmake-gui. +2. Point source-dir to the source. +3. Point build-dir to the dir where you want to build. +4. Hit configure -- there you can select details. +5. Select the options you want, which are shown with descriptions after the + configure run is complete. +6. Hit configure again to assure that everything that is needed is found. +7. For those not found, deactivate the option or install the dependency, e.g. + bzip2 for minizip, and go back to step 6 until there is no red. +8. Hit generate. +9. Hit open project. + +Now you can Build > Build solution. -- cgit v1.2.3-55-g6feb