aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2026-03-13 23:48:36 +0000
committerXin LI <delphij@FreeBSD.org>2026-03-13 23:48:36 +0000
commit280d433d4c13f3b31722d446ec868053887caf06 (patch)
tree7ba0c0678315c114dcef41857e7710f6b3e31bc5 /test
parentf4695a30267c5d31987c7bc3eda906f55a8761be (diff)
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt318
-rw-r--r--test/add_subdirectory_exclude_test.cmake.in29
-rw-r--r--test/add_subdirectory_test.cmake.in28
-rw-r--r--test/example.c14
-rw-r--r--test/find_package_no_components_test.cmake.in27
-rw-r--r--test/find_package_test.cmake.in27
-rw-r--r--test/find_package_wrong_components_test.cmake.in27
-rw-r--r--test/infcover.c10
-rw-r--r--test/minigzip.c89
9 files changed, 522 insertions, 47 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 000000000000..61da30d6e05f
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,318 @@
+function(ZLIB_findTestEnv testName)
+ set(testEnv "PATH=")
+
+ if(MSVC OR MINGW)
+ set(separator "\\\;")
+ else()
+ set(separator ":")
+ endif()
+
+ string(APPEND testEnv "$<TARGET_FILE_DIR:ZLIB::ZLIB>${separator}")
+ string(APPEND testEnv "$ENV{PATH}")
+
+ set_tests_properties(${testName} PROPERTIES ENVIRONMENT "${testEnv}")
+endfunction()
+
+if(ZLIB_BUILD_SHARED)
+ add_executable(zlib_example example.c)
+ target_link_libraries(zlib_example ZLIB::ZLIB)
+ target_compile_definitions(zlib_example PRIVATE ZLIB_BUILD)
+ add_test(NAME zlib_example COMMAND zlib_example)
+
+ add_executable(minigzip minigzip.c)
+ target_compile_definitions(
+ minigzip PRIVATE $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>)
+ target_link_libraries(minigzip ZLIB::ZLIB)
+
+ if(MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ zlib_findtestenv(zlib_example)
+ endif(
+ MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+
+ if(HAVE_OFF64_T)
+ add_executable(zlib_example64 example.c)
+ target_compile_definitions(
+ zlib_example64
+ PRIVATE ZLIB_BUILD
+ $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>)
+ target_link_libraries(zlib_example64 ZLIB::ZLIB)
+ add_test(NAME zlib_example64 COMMAND zlib_example64)
+
+ if(MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ zlib_findtestenv(zlib_example64)
+ endif(
+ MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ endif(HAVE_OFF64_T)
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ add_executable(zlib_static_example example.c)
+ target_link_libraries(zlib_static_example ZLIB::ZLIBSTATIC)
+ target_compile_definitions(
+ zlib_static_example
+ PRIVATE ZLIB_BUILD
+ $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>)
+ add_test(NAME zlib_static_example COMMAND zlib_static_example)
+
+ add_executable(static_minigzip minigzip.c)
+ target_link_libraries(static_minigzip ZLIB::ZLIBSTATIC)
+
+ if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL
+ "Clang")
+ set(CFLAGS_OLD ${CMAKE_C_FLAGS})
+ set(CMAKE_C_FLAGS
+ ""
+ CACHE STRING "" FORCE)
+
+ if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
+ find_program(GCOV_EXECUTABLE gcov)
+ endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
+
+ if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
+ set(llvm_names llvm_cov)
+ list(APPEND llvm_names llvm-cov)
+
+ foreach(ver RANGE 11 99)
+ list(APPEND llvm_names llvm-cov-${ver})
+ endforeach(ver RANGE 11 99)
+
+ find_program(GCOV_EXECUTABLE NAMES ${llvm_names})
+ set(llvm_option "gcov")
+ endif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
+
+ add_executable(infcover infcover.c)
+ target_link_libraries(infcover ZLIB::ZLIBSTATIC)
+ target_compile_options(infcover PRIVATE -coverage)
+ target_link_options(infcover PRIVATE -coverage)
+ target_compile_definitions(
+ infcover PRIVATE $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>)
+ add_test(NAME zlib_coverage COMMAND infcover)
+ set(INFCOVER_DIR ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/infcover.dir)
+ add_test(
+ NAME zlib_coverage-summary
+ COMMAND
+ ${GCOV_EXECUTABLE} ${llvm_option}
+ ${CMAKE_CURRENT_SOURCE_DIR}/infcover.c -o
+ ${INFCOVER_DIR}/infcover.c.gcda)
+ set_tests_properties(zlib_coverage-summary PROPERTIES DEPENDS
+ zlib-coverage)
+ set(CMAKE_C_FLAGS
+ ${CFLAGS_OLD}
+ CACHE STRING "" FORCE)
+ endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID}
+ STREQUAL "Clang")
+
+ if(HAVE_OFF64_T)
+ add_executable(zlib_static_example64 example.c)
+ target_compile_definitions(
+ zlib_static_example64
+ PRIVATE ZLIB_BUILD
+ $<$<BOOL:${HAVE___ATTR__VIS_HIDDEN}>:HAVE_HIDDEN>)
+ target_link_libraries(zlib_static_example64 ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_static_example64 COMMAND zlib_static_example64)
+ endif(HAVE_OFF64_T)
+endif(ZLIB_BUILD_STATIC)
+
+add_test(
+ NAME zlib_install
+ COMMAND ${CMAKE_COMMAND} --install ${zlib_BINARY_DIR} --prefix
+ ${CMAKE_CURRENT_BINARY_DIR}/test_install --config $<CONFIG>
+ WORKING_DIRECTORY ${zlib_BINARY_DIR})
+
+set_tests_properties(zlib_install PROPERTIES FIXTURES_SETUP zlib_install)
+
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_no_components_test)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/find_package_wrong_components_test)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/find_package_test.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test/CMakeLists.txt @ONLY)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/find_package_no_components_test.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test/CMakeLists.txt @ONLY)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/find_package_wrong_components_test.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test/CMakeLists.txt @ONLY)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_test.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test/CMakeLists.txt @ONLY)
+
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/add_subdirectory_exclude_test.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test/CMakeLists.txt
+ @ONLY)
+
+# CMAKE_GENERATOR_PLATFORM doesn't work in the if
+set(GENERATOR ${CMAKE_GENERATOR_PLATFORM})
+
+if(GENERATOR)
+ set(PLATFORM "-A ${GENERATOR}")
+endif(GENERATOR)
+#
+# findpackage_test
+#
+add_test(
+ NAME zlib_find_package_configure
+ COMMAND
+ ${CMAKE_COMMAND} ${PLATFORM}
+ -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build
+ -DCMAKE_BUILD_TYPE=$<CONFIG> -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install --fresh
+ -G "${CMAKE_GENERATOR}" -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+ NAME zlib_find_package_build
+ COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build)
+
+add_test(
+ NAME zlib_find_package_test
+ COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build)
+
+set_tests_properties(
+ zlib_find_package_configure PROPERTIES FIXTURES_REQUIRED zlib_install
+ FIXTURES_SETUP fp_config)
+
+set_tests_properties(
+ zlib_find_package_build PROPERTIES FIXTURES_REQUIRED fp_config
+ FIXTURES_SETUP fp_build)
+
+set_tests_properties(
+ zlib_find_package_test PROPERTIES FIXTURES_REQUIRED fp_build ENVIRONMENT
+ CTEST_OUTPUT_ON_FAILURE=1)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+ NAME zlib_find_package_no_components_configure
+ COMMAND
+ ${CMAKE_COMMAND} ${PLATFORM}
+ -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test_build
+ -DCMAKE_BUILD_TYPE=$<CONFIG> -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install --fresh
+ -G "${CMAKE_GENERATOR}"
+ -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test)
+
+set_tests_properties(
+ zlib_find_package_no_components_configure
+ PROPERTIES FIXTURES_REQUIRED zlib_install)
+
+if(NOT ZLIB_BUILD_SHARED OR NOT ZLIB_BUILD_STATIC)
+ set_tests_properties(
+ zlib_find_package_no_components_configure
+ PROPERTIES WILL_FAIL TRUE)
+endif(NOT ZLIB_BUILD_SHARED OR NOT ZLIB_BUILD_STATIC)
+
+#
+# findpackage_no_component_test
+#
+add_test(
+ NAME zlib_find_package_wrong_components_configure
+ COMMAND
+ ${CMAKE_COMMAND} ${PLATFORM}
+ -B${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test_build
+ -DCMAKE_BUILD_TYPE=$<CONFIG> -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install --fresh
+ -G "${CMAKE_GENERATOR}"
+ -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test)
+
+set_tests_properties(
+ zlib_find_package_wrong_components_configure
+ PROPERTIES FIXTURES_REQUIRED zlib_install
+ WILL_FAIL TRUE)
+
+#
+# add_subdirectory_test
+#
+add_test(
+ NAME zlib_add_subdirectory_configure
+ COMMAND
+ ${CMAKE_COMMAND} ${PLATFORM}
+ -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build
+ -DCMAKE_BUILD_TYPE=$<CONFIG> -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install --fresh
+ -G "${CMAKE_GENERATOR}" -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+ NAME zlib_add_subdirectory_build
+ COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build)
+
+add_test(
+ NAME zlib_add_subdirectory_test
+ COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build)
+
+set_tests_properties(
+ zlib_add_subdirectory_configure PROPERTIES FIXTURES_REQUIRED zlib_install
+ FIXTURES_SETUP as_config)
+
+set_tests_properties(
+ zlib_add_subdirectory_build PROPERTIES FIXTURES_REQUIRED as_config
+ FIXTURES_SETUP as_build)
+
+set_tests_properties(
+ zlib_add_subdirectory_test PROPERTIES FIXTURES_REQUIRED as_build
+ ENVIRONMENT CTEST_OUTPUT_ON_FAILURE=1)
+
+#
+# add_subdirectory_exclude_test
+#
+add_test(
+ NAME zlib_add_subdirectory_exclude_configure
+ COMMAND
+ ${CMAKE_COMMAND} ${PLATFORM}
+ -B${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build
+ -DCMAKE_BUILD_TYPE=$<CONFIG> -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_install --fresh
+ -G "${CMAKE_GENERATOR}" -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+ NAME zlib_add_subdirectory_exclude_build
+ COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+ WORKING_DIRECTORY
+ ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build)
+
+add_test(
+ NAME zlib_add_subdirectory_exclude_test
+ COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIG>
+ WORKING_DIRECTORY
+ ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build)
+
+set_tests_properties(
+ zlib_add_subdirectory_exclude_configure
+ PROPERTIES FIXTURES_REQUIRED zlib_install FIXTURES_SETUP asx_config)
+
+set_tests_properties(
+ zlib_add_subdirectory_exclude_build PROPERTIES FIXTURES_REQUIRED as_config
+ FIXTURES_SETUP asx_build)
+
+set_tests_properties(
+ zlib_add_subdirectory_exclude_test
+ PROPERTIES FIXTURES_REQUIRED asx_build ENVIRONMENT
+ CTEST_OUTPUT_ON_FAILURE=1)
diff --git a/test/add_subdirectory_exclude_test.cmake.in b/test/add_subdirectory_exclude_test.cmake.in
new file mode 100644
index 000000000000..9077ce5950e0
--- /dev/null
+++ b/test/add_subdirectory_exclude_test.cmake.in
@@ -0,0 +1,29 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ zlib_find_package_test
+ LANGUAGES C
+ VERSION @zlib_VERSION@)
+
+enable_testing()
+option(ZLIB_BUILD_TESTING "" OFF)
+option(ZLIB_BUILD_SHARED "" @ZLIB_BUILD_SHARED@)
+option(ZLIB_BUILD_STATIC "" @ZLIB_BUILD_STATIC@)
+
+add_subdirectory(@zlib_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/zlib
+ EXCLUDE_FROM_ALL)
+
+if(ZLIB_BUILD_SHARED)
+ add_executable(test_example @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example ZLIB::ZLIB)
+
+ if(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+ add_test(NAME zlib_test_example_shared COMMAND test_example)
+ endif(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ add_executable(test_example_static @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example_static ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_test_example_static COMMAND test_example_static)
+endif(ZLIB_BUILD_STATIC)
diff --git a/test/add_subdirectory_test.cmake.in b/test/add_subdirectory_test.cmake.in
new file mode 100644
index 000000000000..4201af82fa41
--- /dev/null
+++ b/test/add_subdirectory_test.cmake.in
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ zlib_find_package_test
+ LANGUAGES C
+ VERSION @zlib_VERSION@)
+
+enable_testing()
+option(ZLIB_BUILD_TESTING "" OFF)
+option(ZLIB_BUILD_SHARED "" @ZLIB_BUILD_SHARED@)
+option(ZLIB_BUILD_STATIC "" @ZLIB_BUILD_STATIC@)
+
+add_subdirectory(@zlib_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/zlib)
+
+if(ZLIB_BUILD_SHARED)
+ add_executable(test_example @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example ZLIB::ZLIB)
+
+ if(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+ add_test(NAME zlib_test_example_shared COMMAND test_example)
+ endif(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ add_executable(test_example_static @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example_static ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_test_example_static COMMAND test_example_static)
+endif(@ZLIB_BUILD_STATIC)
diff --git a/test/example.c b/test/example.c
index c3521dd5934f..9cc5f763bc89 100644
--- a/test/example.c
+++ b/test/example.c
@@ -1,10 +1,14 @@
/* example.c -- usage example of the zlib compression library
- * Copyright (C) 1995-2006, 2011, 2016 Jean-loup Gailly
+ * Copyright (C) 1995-2026 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
+#if defined(_WIN32) && !defined(_CRT_SECURE_NO_WARNINGS)
+# define _CRT_SECURE_NO_WARNINGS
+#endif
+
#include "zlib.h"
#include <stdio.h>
@@ -13,8 +17,10 @@
# include <stdlib.h>
#endif
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
# define TESTFILE "foo-gz"
+#elif defined(__riscos) && !defined(__TARGET_UNIXLIB__)
+# define TESTFILE "foo/gz"
#else
# define TESTFILE "foo.gz"
#endif
@@ -319,7 +325,7 @@ static void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr,
CHECK_ERR(err, "inflateEnd");
if (d_stream.total_out != 2*uncomprLen + uncomprLen/2) {
- fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out);
+ fprintf(stderr, "bad large inflate: %lu\n", d_stream.total_out);
exit(1);
} else {
printf("large_inflate(): OK\n");
@@ -504,7 +510,7 @@ int main(int argc, char *argv[]) {
}
printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n",
- ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags());
+ ZLIB_VERSION, (unsigned)ZLIB_VERNUM, zlibCompileFlags());
compr = (Byte*)calloc((uInt)comprLen, 1);
uncompr = (Byte*)calloc((uInt)uncomprLen, 1);
diff --git a/test/find_package_no_components_test.cmake.in b/test/find_package_no_components_test.cmake.in
new file mode 100644
index 000000000000..7c54386d5d36
--- /dev/null
+++ b/test/find_package_no_components_test.cmake.in
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ zlib_find_package_test
+ LANGUAGES C
+ VERSION @zlib_VERSION@)
+
+enable_testing()
+option(ZLIB_BUILD_SHARED "" @ZLIB_BUILD_SHARED@)
+option(ZLIB_BUILD_STATIC "" @ZLIB_BUILD_STATIC@)
+
+find_package(ZLIB @zlib_VERSION@ CONFIG REQUIRED)
+
+if(ZLIB_BUILD_SHARED)
+ add_executable(test_example @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example ZLIB::ZLIB)
+
+ if(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+ add_test(NAME zlib_test_example_shared COMMAND test_example)
+ endif(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ add_executable(test_example_static @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example_static ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_test_example_static COMMAND test_example_static)
+endif(ZLIB_BUILD_STATIC)
diff --git a/test/find_package_test.cmake.in b/test/find_package_test.cmake.in
new file mode 100644
index 000000000000..be5486d81cd2
--- /dev/null
+++ b/test/find_package_test.cmake.in
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ zlib_find_package_test
+ LANGUAGES C
+ VERSION @zlib_VERSION@)
+
+enable_testing()
+option(ZLIB_BUILD_SHARED "" @ZLIB_BUILD_SHARED@)
+option(ZLIB_BUILD_STATIC "" @ZLIB_BUILD_STATIC@)
+
+if(ZLIB_BUILD_SHARED)
+ find_package(ZLIB @zlib_VERSION@ CONFIG COMPONENTS shared REQUIRED)
+ add_executable(test_example @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example ZLIB::ZLIB)
+
+ if(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+ add_test(NAME zlib_test_example_shared COMMAND test_example)
+ endif(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ find_package(ZLIB @zlib_VERSION@ CONFIG COMPONENTS static REQUIRED)
+ add_executable(test_example_static @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example_static ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_test_example_static COMMAND test_example_static)
+endif(ZLIB_BUILD_STATIC)
diff --git a/test/find_package_wrong_components_test.cmake.in b/test/find_package_wrong_components_test.cmake.in
new file mode 100644
index 000000000000..fff4601c284f
--- /dev/null
+++ b/test/find_package_wrong_components_test.cmake.in
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ zlib_find_package_test
+ LANGUAGES C
+ VERSION @zlib_VERSION@)
+
+enable_testing()
+option(ZLIB_BUILD_SHARED "" @ZLIB_BUILD_SHARED@)
+option(ZLIB_BUILD_STATIC "" @ZLIB_BUILD_STATIC@)
+
+find_package(ZLIB @zlib_VERSION@ CONFIG COMPONENTS wrong REQUIRED)
+
+if(ZLIB_BUILD_SHARED)
+ add_executable(test_example @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example ZLIB::ZLIB)
+
+ if(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+ add_test(NAME zlib_test_example_shared COMMAND test_example)
+ endif(NOT ${CMAKE_SHARED_LIBRARY_SUFFIX} STREQUAL ".dll")
+endif(ZLIB_BUILD_SHARED)
+
+if(ZLIB_BUILD_STATIC)
+ add_executable(test_example_static @zlib_SOURCE_DIR@/test/example.c)
+ target_link_libraries(test_example_static ZLIB::ZLIBSTATIC)
+ add_test(NAME zlib_test_example_static COMMAND test_example_static)
+endif(ZLIB_BUILD_STATIC)
diff --git a/test/infcover.c b/test/infcover.c
index 8912c403dd2b..f1ad0f91224d 100644
--- a/test/infcover.c
+++ b/test/infcover.c
@@ -1,5 +1,5 @@
/* infcover.c -- test zlib's inflate routines with full code coverage
- * Copyright (C) 2011, 2016 Mark Adler
+ * Copyright (C) 2011, 2016, 2024 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -185,7 +185,7 @@ local void mem_used(z_stream *strm, char *prefix)
{
struct mem_zone *zone = strm->opaque;
- fprintf(stderr, "%s: %lu allocated\n", prefix, zone->total);
+ fprintf(stderr, "%s: %zu allocated\n", prefix, zone->total);
}
/* show the high water allocation in bytes */
@@ -193,7 +193,7 @@ local void mem_high(z_stream *strm, char *prefix)
{
struct mem_zone *zone = strm->opaque;
- fprintf(stderr, "%s: %lu high water mark\n", prefix, zone->highwater);
+ fprintf(stderr, "%s: %zu high water mark\n", prefix, zone->highwater);
}
/* release the memory allocation zone -- if there are any surprises, notify */
@@ -218,7 +218,7 @@ local void mem_done(z_stream *strm, char *prefix)
/* issue alerts about anything unexpected */
if (count || zone->total)
- fprintf(stderr, "** %s: %lu bytes in %d blocks not freed\n",
+ fprintf(stderr, "** %s: %zu bytes in %d blocks not freed\n",
prefix, zone->total, count);
if (zone->notlifo)
fprintf(stderr, "** %s: %d frees not LIFO\n", prefix, zone->notlifo);
@@ -444,7 +444,7 @@ local void cover_wrap(void)
}
/* input and output functions for inflateBack() */
-local unsigned pull(void *desc, unsigned char **buf)
+local unsigned pull(void *desc, unsigned char z_const **buf)
{
static unsigned int next = 0;
static unsigned char dat[] = {0x63, 0, 2, 0};
diff --git a/test/minigzip.c b/test/minigzip.c
index 134e10e6c3e9..40da8736fbd2 100644
--- a/test/minigzip.c
+++ b/test/minigzip.c
@@ -1,5 +1,5 @@
/* minigzip.c -- simulate gzip using the zlib compression library
- * Copyright (C) 1995-2006, 2010, 2011, 2016 Jean-loup Gailly
+ * Copyright (C) 1995-2026 Jean-loup Gailly
* For conditions of distribution and use, see copyright notice in zlib.h
*/
@@ -15,6 +15,17 @@
/* @(#) $Id$ */
+#ifndef _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE 200112L
+#endif
+
+#if defined(_WIN32) && !defined(_CRT_SECURE_NO_WARNINGS)
+# define _CRT_SECURE_NO_WARNINGS
+#endif
+#if defined(_WIN32) && !defined(_CRT_NONSTDC_NO_DEPRECATE)
+# define _CRT_NONSTDC_NO_DEPRECATE
+#endif
+
#include "zlib.h"
#include <stdio.h>
@@ -40,18 +51,16 @@
# define SET_BINARY_MODE(file)
#endif
-#if defined(_MSC_VER) && _MSC_VER < 1900
-# define snprintf _snprintf
-#endif
-
#ifdef VMS
# define unlink delete
# define GZ_SUFFIX "-gz"
#endif
-#ifdef RISCOS
-# define unlink remove
-# define GZ_SUFFIX "-gz"
-# define fileno(file) file->__file
+#if defined(__riscos) && !defined(__TARGET_UNIXLIB__)
+# define GZ_SUFFIX "/gz"
+# ifndef __GNUC__
+# define unlink remove
+# define fileno(file) file->__file
+# endif
#endif
#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
# include <unix.h> /* for fileno */
@@ -109,7 +118,7 @@ static char *strwinerror (error)
LocalFree(msgbuf);
}
else {
- sprintf(buf, "unknown win32 error (%ld)", error);
+ sprintf(buf, "unknown win32 error (%lu)", error);
}
SetLastError(lasterr);
@@ -142,6 +151,25 @@ static void pwinerror (s)
# define local
#endif
+/* ===========================================================================
+ * Safe string copy. Copy up to len bytes from src to dst, if src terminates
+ * with a null by then. If not, copy len-1 bytes from src, terminating it with
+ * a null in dst[len-1], cutting src short. Return a pointer to the terminating
+ * null. If len is zero, nothing is written to *dst and NULL is returned.
+ */
+static char *string_copy(char *dst, char const *src, z_size_t len) {
+ if (len == 0)
+ return NULL;
+ while (--len) {
+ *dst = *src++;
+ if (*dst == 0)
+ return dst;
+ dst++;
+ }
+ *dst = 0;
+ return dst;
+}
+
#ifdef Z_SOLO
/* for Z_SOLO, create simplified gz* functions using deflate and inflate */
@@ -224,7 +252,7 @@ static int gzwrite(gzFile gz, const void *buf, unsigned len) {
(void)deflate(strm, Z_NO_FLUSH);
fwrite(out, 1, BUFLEN - strm->avail_out, gz->file);
} while (strm->avail_out == 0);
- return len;
+ return (int)len;
}
static int gzread(gzFile gz, void *buf, unsigned len) {
@@ -241,7 +269,7 @@ static int gzread(gzFile gz, void *buf, unsigned len) {
strm->next_out = (void *)buf;
strm->avail_out = len;
do {
- got = fread(in, 1, 1, gz->file);
+ got = (unsigned)fread(in, 1, 1, gz->file);
if (got == 0)
break;
strm->next_in = in;
@@ -255,7 +283,7 @@ static int gzread(gzFile gz, void *buf, unsigned len) {
if (ret == Z_STREAM_END)
inflateReset(strm);
} while (strm->avail_out);
- return len - strm->avail_out;
+ return (int)(len - strm->avail_out);
}
static int gzclose(gzFile gz) {
@@ -391,7 +419,7 @@ static void gz_uncompress(gzFile in, FILE *out) {
* original.
*/
static void file_compress(char *file, char *mode) {
- local char outfile[MAX_NAME_LEN];
+ local char outfile[MAX_NAME_LEN+1], *end;
FILE *in;
gzFile out;
@@ -400,12 +428,8 @@ static void file_compress(char *file, char *mode) {
exit(1);
}
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(outfile, sizeof(outfile), "%s%s", file, GZ_SUFFIX);
-#else
- strcpy(outfile, file);
- strcat(outfile, GZ_SUFFIX);
-#endif
+ end = string_copy(outfile, file, sizeof(outfile));
+ string_copy(end, GZ_SUFFIX, sizeof(outfile) - (z_size_t)(end - outfile));
in = fopen(file, "rb");
if (in == NULL) {
@@ -414,6 +438,7 @@ static void file_compress(char *file, char *mode) {
}
out = gzopen(outfile, mode);
if (out == NULL) {
+ fclose(in);
fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile);
exit(1);
}
@@ -427,7 +452,7 @@ static void file_compress(char *file, char *mode) {
* Uncompress the given file and remove the original.
*/
static void file_uncompress(char *file) {
- local char buf[MAX_NAME_LEN];
+ local char buf[MAX_NAME_LEN+1];
char *infile, *outfile;
FILE *out;
gzFile in;
@@ -438,11 +463,7 @@ static void file_uncompress(char *file) {
exit(1);
}
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(buf, sizeof(buf), "%s", file);
-#else
- strcpy(buf, file);
-#endif
+ string_copy(buf, file, sizeof(buf));
if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) {
infile = file;
@@ -451,11 +472,7 @@ static void file_uncompress(char *file) {
} else {
outfile = file;
infile = buf;
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(buf + len, sizeof(buf) - len, "%s", GZ_SUFFIX);
-#else
- strcat(infile, GZ_SUFFIX);
-#endif
+ string_copy(buf + len, GZ_SUFFIX, sizeof(buf) - len);
}
in = gzopen(infile, "rb");
if (in == NULL) {
@@ -464,6 +481,7 @@ static void file_uncompress(char *file) {
}
out = fopen(outfile, "wb");
if (out == NULL) {
+ gzclose(in);
perror(file);
exit(1);
}
@@ -488,14 +506,9 @@ int main(int argc, char *argv[]) {
int copyout = 0;
int uncompr = 0;
gzFile file;
- char *bname, outmode[20];
-
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
- snprintf(outmode, sizeof(outmode), "%s", "wb6 ");
-#else
- strcpy(outmode, "wb6 ");
-#endif
+ char *bname, outmode[5];
+ string_copy(outmode, "wb6 ", sizeof(outmode));
prog = argv[0];
bname = strrchr(argv[0], '/');
if (bname)