diff options
| author | Xin LI <delphij@FreeBSD.org> | 2026-03-13 23:48:36 +0000 |
|---|---|---|
| committer | Xin LI <delphij@FreeBSD.org> | 2026-03-13 23:48:36 +0000 |
| commit | 280d433d4c13f3b31722d446ec868053887caf06 (patch) | |
| tree | 7ba0c0678315c114dcef41857e7710f6b3e31bc5 /test | |
| parent | f4695a30267c5d31987c7bc3eda906f55a8761be (diff) | |
Diffstat (limited to 'test')
| -rw-r--r-- | test/CMakeLists.txt | 318 | ||||
| -rw-r--r-- | test/add_subdirectory_exclude_test.cmake.in | 29 | ||||
| -rw-r--r-- | test/add_subdirectory_test.cmake.in | 28 | ||||
| -rw-r--r-- | test/example.c | 14 | ||||
| -rw-r--r-- | test/find_package_no_components_test.cmake.in | 27 | ||||
| -rw-r--r-- | test/find_package_test.cmake.in | 27 | ||||
| -rw-r--r-- | test/find_package_wrong_components_test.cmake.in | 27 | ||||
| -rw-r--r-- | test/infcover.c | 10 | ||||
| -rw-r--r-- | test/minigzip.c | 89 |
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) |
