Commit 0b3932c for zlib

commit 0b3932c80dc338b36fe1b8bacd216bacb8991c17
Author: Vollstrecker <github@vollstreckernet.de>
Date:   Sun Feb 15 00:15:41 2026 +0100

    CMake: Add build for zlib1.dll with zlib and minizip.

    zlib1.dll is the legacy zlib + minizip DLL.

diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
index c716d6a..4c7bc68 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 8513aec..44c51bd 100644
--- a/contrib/minizip/unzip.c
+++ b/contrib/minizip/unzip.c
@@ -68,6 +68,9 @@
 #include <stdlib.h>
 #include <string.h>

+#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 4fc87d4..46943ce 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 0000000..c9825aa
--- /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.<DLL>, 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 <stdlib.h>
+        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
+            $<$<BOOL:NOT:${HAVE_FSEEKO}>:NO_FSEEKO>
+            $<$<BOOL:${HAVE_UNISTD_H}>:HAVE_UNISTD_H=1>
+            $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>
+            $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE>
+            $<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE>
+    PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
+           $<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1>
+           $<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>)
+
+target_link_libraries(zlib1
+    PUBLIC $<$<BOOL:${BZIP2_FOUND}>: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 0000000..eccb6ca
--- /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.