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.