Commit c352fa0 for zlib

commit c352fa05f0f3e06bf34f2fb7ca3df27c37c16c03
Author: Vollstrecker <werner@vollstreckernet.de>
Date:   Wed May 6 13:32:47 2026 +0200

    CMake: Fix prefixing symbols.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 43b000a..e60c083 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,8 +23,8 @@ option(ZLIB_BUILD_TESTING "Enable Zlib Examples as tests" ON)
 option(ZLIB_BUILD_SHARED "Enable building zlib shared library" ON)
 option(ZLIB_BUILD_STATIC "Enable building zlib static library" ON)
 option(ZLIB_INSTALL "Enable installation of zlib" ON)
-option(ZLIB_PREFIX "prefix for all types and library functions, see zconf.h.in"
-       OFF)
+set(ZLIB_PREFIX "" CACHE STRING
+    "prefix for all types and library functions, see zconf.h.in")
 mark_as_advanced(ZLIB_PREFIX)

 get_property(IS_MULTI GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
@@ -44,12 +44,16 @@ include(GNUInstallDirs)

 set(CPACK_INCLUDED TRUE)

+set(Z_PREFIX "${ZLIB_PREFIX}")
+
+#
+# Create zconf.h.cmakein
+#
 if(NOT ZLIB_CONF_WRITTEN)
-    set(Z_PREFIX ${ZLIB_PREFIX})
     set(CONF_OUT_FILE ${zlib_BINARY_DIR}/zconf.h.cmakein)
     file(READ ${zlib_SOURCE_DIR}/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 Z_PREFIX @Z_PREFIX@\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 ${zlib_SOURCE_DIR}/zconf.h ZCONF_CONTENT OFFSET 244)
@@ -71,6 +75,73 @@ if(NOT ZLIB_CONF_WRITTEN)
     mark_as_advanced(ZLIB_CONF_WRITTEN)
 endif(NOT ZLIB_CONF_WRITTEN)

+#
+# Create zlib.def.cmakein
+#
+if(NOT ZLIB_DEF_WRITTEN)
+    file(STRINGS "${zlib_SOURCE_DIR}/win32/zlib.def" ZLIB_DEF_LINES)
+
+    set(ZLIB_DEF_OUT "")
+
+    foreach(line IN LISTS ZLIB_DEF_LINES)
+        if(line MATCHES "^;")
+            string(APPEND ZLIB_DEF_OUT "${line}\n")
+        elseif(line MATCHES "^(LIBRARY|EXPORTS|DESCRIPTION)")
+            string(APPEND ZLIB_DEF_OUT "${line}\n")
+        elseif(line MATCHES "^ *$")
+            string(APPEND ZLIB_DEF_OUT "\n")
+        elseif(line MATCHES "^ *[A-Za-z_][A-Za-z0-9_]*")
+            string(REGEX REPLACE "^ +" "" sym "${line}")
+            string(APPEND ZLIB_DEF_OUT
+                    "    @ZLIB_PREFIX@${sym}\n")
+        else()
+            string(APPEND ZLIB_DEF_OUT "${line}\n")
+        endif()
+    endforeach()
+
+    file(WRITE
+      "${CMAKE_CURRENT_BINARY_DIR}/zlib.def.cmakein"
+      "${ZLIB_DEF_OUT}"
+    )
+
+    set(ZLIB_DEF_WRITTEN
+        TRUE
+        CACHE BOOL "zlib.def.cmakein was created")
+    mark_as_advanced(ZLIB_DEF_WRITTEN)
+endif(NOT ZLIB_DEF_WRITTEN)
+
+#
+#Create zlib.map
+#
+if(NOT ZLIB_MAP_WRITTEN)
+    file(STRINGS "${zlib_SOURCE_DIR}/zlib.map" ZLIB_MAP_CONTENT)
+    set(ZLIB_MAP_OUT "")
+
+    foreach(line IN LISTS ZLIB_MAP_CONTENT)
+        if(line MATCHES "^ *[A-Za-z_][A-Za-z0-9_]* *; *$")
+            if(line MATCHES "^ *\\* *; *$")
+                string(APPEND ZLIB_MAP_OUT "${line}\n")
+            else()
+                string(REGEX REPLACE "^ +" "" sym "${line}")
+                string(APPEND ZLIB_MAP_OUT
+                       "    @ZLIB_PREFIX@${sym}\n")
+            endif()
+        else()
+            string(APPEND ZLIB_MAP_OUT "${line}\n")
+        endif()
+    endforeach()
+
+    file(WRITE
+      "${zlib_BINARY_DIR}/zlib.map.cmakein"
+      "${ZLIB_MAP_OUT}"
+    )
+
+    set(ZLIB_MAP_WRITTEN
+        TRUE
+        CACHE BOOL "zlib.map.cmakein was created")
+    mark_as_advanced(ZLIB_MAP_WRITTEN)
+endif(NOT ZLIB_MAP_WRITTEN)
+
 #
 # Check to see if we have large file support
 #
@@ -122,8 +193,11 @@ if(IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
 else()
     set(pc_libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
 endif()
+
 configure_file(${zlib_SOURCE_DIR}/zlib.pc.cmakein ${ZLIB_PC} @ONLY)
 configure_file(${zlib_BINARY_DIR}/zconf.h.cmakein ${zlib_BINARY_DIR}/zconf.h)
+configure_file(${zlib_BINARY_DIR}/zlib.def.cmakein ${zlib_BINARY_DIR}/zlib.def)
+configure_file(${zlib_BINARY_DIR}/zlib.map.cmakein ${zlib_BINARY_DIR}/zlib.map)

 # ============================================================================
 # zlib
@@ -166,8 +240,10 @@ endif(WIN32)

 if(ZLIB_BUILD_SHARED)
     add_library(
-        zlib SHARED ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}
-                    $<$<OR:$<BOOL:${WIN32}>,$<BOOL:${CYGWIN}>>:win32/zlib-cmake.rc>)
+        zlib SHARED ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS}
+                    ${ZLIB_PRIVATE_HDRS}
+                    $<$<OR:$<BOOL:${WIN32}>,$<BOOL:${CYGWIN}>>:win32/zlib-cmake.rc>
+                    $<$<BOOL:${MSVC}>:${zlib_BINARY_DIR}/zlib.def>)
     add_library(ZLIB::ZLIB ALIAS zlib)

     target_include_directories(
@@ -182,7 +258,9 @@ if(ZLIB_BUILD_SHARED)
                 $<$<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>)
+        PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
+               $<$<BOOL:${ZLIB_PREFIX}>:Z_PREFIX=${ZLIB_PREFIX}>)
+
     set(INSTALL_VERSION ${zlib_VERSION})

     if(CYGWIN)
@@ -212,7 +290,7 @@ if(ZLIB_BUILD_SHARED)
         set_target_properties(
             zlib
             PROPERTIES LINK_FLAGS
-                       "-Wl,--version-script,\"${zlib_SOURCE_DIR}/zlib.map\"")
+                       "-Wl,--version-script,\"${zlib_BINARY_DIR}/zlib.map\"")
     endif(
         UNIX
         AND NOT APPLE
@@ -236,7 +314,8 @@ if(ZLIB_BUILD_STATIC)
                 $<$<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>)
+        PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
+               $<$<BOOL:${ZLIB_PREFIX}>:Z_PREFIX=${ZLIB_PREFIX}>)

     if(CYGWIN)
         set_target_properties(zlibstatic PROPERTIES PREFIX "lib")
diff --git a/contrib/zlib1-dll/CMakeLists.txt b/contrib/zlib1-dll/CMakeLists.txt
index caf6373..72f6758 100644
--- a/contrib/zlib1-dll/CMakeLists.txt
+++ b/contrib/zlib1-dll/CMakeLists.txt
@@ -21,11 +21,15 @@ if(ZLIB_BUILD_ZLIB1_DLL)
     set(ZLIB1_DLL_BUILD_TESTING ${ZLIB_BUILD_TESTING} CACHE BOOL "")
     set(ZLIB1_DLL_ENABLE_BZIP2 ${MINIZIP_ENABLE_BZIP2} CACHE BOOL "")
     set(ZLIB1_DLL_INSTALL ${ZLIB_INSTALL} CACHE BOOL "")
+    set(ZLIB1_DLL_PREFIX "${ZLIB_PREFIX}" CACHE STRING
+    "prefix for all types and library functions, see zconf.h.in")
 endif(ZLIB_BUILD_ZLIB1_DLL)

 option(ZLIB1_DLL_ENABLE_BZIP2 "Build with bzip2 support" OFF)
 option(ZLIB1_DLL_INSTALL "Install zlib1.dll" ON)
 option(ZLIB1_DLL_BUILD_TESTING "Build and run tests for zlib1.dll" ON)
+set(ZLIB1_DLL_PREFIX "" CACHE STRING
+    "prefix for all types and library functions, see zconf.h.in")
 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)

 include(CheckCSourceCompiles)
@@ -43,7 +47,7 @@ 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 Z_PREFIX @Z_PREFIX@\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)
@@ -67,6 +71,8 @@ if(NOT ZLIB_CONF_WRITTEN)
     set(ZCONF_IN_ZLIB1 True CACHE INTERNAL "find zconf.h in zlib1-dll")
 endif(NOT ZLIB_CONF_WRITTEN)

+set(Z_PREFIX "${ZLIB1_DLL_PREFIX}")
+
 if(ZLIB1_DLL_ENABLE_BZIP2)
     find_package(BZip2 REQUIRED)
 endif(ZLIB1_DLL_ENABLE_BZIP2)
@@ -194,6 +200,7 @@ target_compile_definitions(${ZLIB_CONTRIB_PREFIX}zlib1
             $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>
             $<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE>
             $<$<BOOL:${MSVC}>:_CRT_NONSTDC_NO_DEPRECATE>
+            $<$<BOOL:${ZLIB1_DLL_PREFIX}>:Z_PREFIX=${ZLIB1_DLL_PREFIX}>
     PUBLIC $<$<BOOL:${HAVE_OFF64_T}>:_LARGEFILE64_SOURCE=1>
            $<$<BOOL:${BZIP2_FOUND}>:HAVE_BZIP2=1>
            $<$<BOOL:NOT:${HAVE_FOPEN64}>:USE_FILE32API=1>)