Commit 883c24b for zlib

commit 883c24b6a25c3e6eeebf02cc19a3e8537ac5614f
Author: Vollstrecker <werner@vollstreckernet.de>
Date:   Sat Jan 3 11:02:41 2026 +0100

    CMake: Add integration tests.

diff --git a/contrib/ada/CMakeLists.txt b/contrib/ada/CMakeLists.txt
index 85b9444..8922200 100644
--- a/contrib/ada/CMakeLists.txt
+++ b/contrib/ada/CMakeLists.txt
@@ -211,7 +211,7 @@ if(ZLIB_ADA_BUILD_STATIC)
 endif(ZLIB_ADA_BUILD_STATIC)

 if(ZLIB_ADA_BUILD_TESTING)
-    add_test(NAME zlib_Ada_cleanup COMMAND ${CMAKE_COMMAND} -E rm ${CMAKE_CURRENT_BINARY_DIR}/testzlib.in
+    add_test(NAME zlib_ada_cleanup COMMAND ${CMAKE_COMMAND} -E rm ${CMAKE_CURRENT_BINARY_DIR}/testzlib.in
         ${CMAKE_CURRENT_BINARY_DIR}/testzlib.out ${CMAKE_CURRENT_BINARY_DIR}/testzlib.zlb)
-    set_tests_properties(zlib_Ada_cleanup PROPERTIES FIXTURES_CLEANUP ada_cleanup)
+    set_tests_properties(zlib_ada_cleanup PROPERTIES FIXTURES_CLEANUP zlib_ada_cleanup)
 endif(ZLIB_ADA_BUILD_TESTING)
diff --git a/contrib/blast/CMakeLists.txt b/contrib/blast/CMakeLists.txt
index a94b362..6f3ba38 100644
--- a/contrib/blast/CMakeLists.txt
+++ b/contrib/blast/CMakeLists.txt
@@ -104,6 +104,10 @@ if(ZLIB_BLAST_BUILD_STATIC)
     endif(ZLIB_BLAST_BUILD_TESTING)
 endif(ZLIB_BLAST_BUILD_STATIC)

+if(ZLIB_BLAST_BUILD_TESTING)
+    add_subdirectory(test)
+endif(ZLIB_BLAST_BUILD_TESTING)
+
 if(ZLIB_BLAST_INSTALL)
     if(ZLIB_BLAST_BUILD_SHARED)
         install(
diff --git a/contrib/blast/blastConfig.cmake.in b/contrib/blast/blastConfig.cmake.in
new file mode 100644
index 0000000..5909ac4
--- /dev/null
+++ b/contrib/blast/blastConfig.cmake.in
@@ -0,0 +1,18 @@
+@PACKAGE_INIT@
+
+set(_blast_supported_components "shared" "static")
+
+if(blast_FIND_COMPONENTS)
+    foreach(_comp ${blast_FIND_COMPONENTS})
+        if(NOT _comp IN_LIST _blast_supported_components)
+            set(blast_FOUND False)
+            set(blast_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
+        endif(NOT _comp IN_LIST _blast_supported_components)
+
+        include("${CMAKE_CURRENT_LIST_DIR}/blast-${_comp}.cmake")
+    endforeach(_comp ${blast_FIND_COMPONENTS})
+else(blast_FIND_COMPONENTS)
+    foreach(_component_config IN LISTS _blast_supported_components)
+        include("${CMAKE_CURRENT_LIST_DIR}/blast-${_component_config}.cmake")
+    endforeach(_component_config IN LISTS _blast_supported_components)
+endif(blast_FIND_COMPONENTS)
diff --git a/contrib/blast/test/CMakeLists.txt b/contrib/blast/test/CMakeLists.txt
new file mode 100644
index 0000000..d319b82
--- /dev/null
+++ b/contrib/blast/test/CMakeLists.txt
@@ -0,0 +1,193 @@
+# if we are built from with zlib, use this path's)
+if(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${zlib_BINARY_DIR})
+    set(inst_setup zlib_blast_install)
+else(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${blast_BINARY_DIR})
+    set(inst_setup zlib_blast_install)
+    set(ZLIB_ARG "-DZLIB_DIR=${ZLIB_DIR}")
+
+    add_test(
+        NAME zlib_blast_install
+        COMMAND ${CMAKE_COMMAND} --install ${blast_BINARY_DIR} --prefix
+                ${CMAKE_CURRENT_BINARY_DIR}/test_install --config $<CONFIG>
+        WORKING_DIRECTORY ${blast_BINARY_DIR})
+
+    set_tests_properties(zlib_blast_install
+        PROPERTIES
+            FIXTURES_SETUP zlib_blast_install)
+endif(DEFINED ZLIB_BUILD_SHARED)
+
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_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}/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)
+
+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)
+
+# 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_blast_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+    NAME zlib_blast_find_package_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build)
+
+set_tests_properties(
+    zlib_blast_find_package_configure
+        PROPERTIES
+            FIXTURES_REQUIRED ${inst_setup}
+            FIXTURES_SETUP blast_fp_config)
+
+set_tests_properties(zlib_blast_find_package_build
+    PROPERTIES
+        FIXTURES_REQUIRED blast_fp_config)
+
+#
+# add_subdirectory_test
+#
+add_test(
+    NAME zlib_blast_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test)
+
+add_test(
+    NAME zlib_blast_add_subdirectory_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build)
+
+set_tests_properties(
+    zlib_blast_add_subdirectory_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP blast_as_config)
+
+set_tests_properties(zlib_blast_add_subdirectory_build
+    PROPERTIES
+        FIXTURES_REQUIRED blast_as_config)
+
+#
+# add_subdirectory_exclude_test
+#
+add_test(
+    NAME zlib_blast_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test)
+
+add_test(
+    NAME zlib_blast_add_subdirectory_exclude_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build)
+
+set_tests_properties(zlib_blast_add_subdirectory_exclude_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP blast_asx_config)
+
+set_tests_properties(zlib_blast_add_subdirectory_exclude_build
+    PROPERTIES
+        FIXTURES_REQUIRED blast_asx_config)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_blast_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test)
+
+set_tests_properties(
+    zlib_blast_find_package_no_components_configure
+        PROPERTIES
+            FIXTURES_REQUIRED ${inst_setup})
+
+if(NOT ZLIB_BLAST_BUILD_SHARED OR NOT ZLIB_BLAST_BUILD_STATIC)
+    set_tests_properties(zlib_blast_find_package_no_components_configure
+        PROPERTIES
+            WILL_FAIL TRUE)
+endif(NOT ZLIB_BLAST_BUILD_SHARED OR NOT ZLIB_BLAST_BUILD_STATIC)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_blast_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test)
+
+set_tests_properties(zlib_blast_find_package_wrong_components_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        WILL_FAIL TRUE)
+
diff --git a/contrib/blast/test/add_subdirectory_exclude_test.cmake.in b/contrib/blast/test/add_subdirectory_exclude_test.cmake.in
new file mode 100644
index 0000000..fd6b487
--- /dev/null
+++ b/contrib/blast/test/add_subdirectory_exclude_test.cmake.in
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    blast_find_package
+    LANGUAGES C
+    VERSION @blast_VERSION@)
+
+option(ZLIB_BLAST_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+option(ZLIB_BLAST_BUILD_TESTING "" @ZLIB_BLAST_BUILD_TESTING@)
+
+add_subdirectory(@blast_SOURCE_DIR@
+    ${CMAKE_CURRENT_BINARY_DIR}/blast
+    EXCLUDE_FROM_ALL)
+
+set(BLAST_SRCS
+    @blast_SOURCE_DIR@/blast-test.c)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+    add_executable(test_example ${BLAST_SRCS})
+    target_link_libraries(test_example BLAST::BLAST)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+    add_executable(test_example_static ${BLAST_SRCS})
+    target_link_libraries(test_example_static BLAST::BLASTSTATIC)
+endif(ZLIB_BLAST_BUILD_STATIC)
diff --git a/contrib/blast/test/add_subdirectory_test.cmake.in b/contrib/blast/test/add_subdirectory_test.cmake.in
new file mode 100644
index 0000000..8b9370f
--- /dev/null
+++ b/contrib/blast/test/add_subdirectory_test.cmake.in
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    blast_find_package
+    LANGUAGES C
+    VERSION @blast_VERSION@)
+
+option(ZLIB_BLAST_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+option(ZLIB_BLAST_BUILD_TESTING "" @ZLIB_BLAST_BUILD_TESTING@)
+
+add_subdirectory(@blast_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/blast)
+
+set(BLAST_SRCS
+    @blast_SOURCE_DIR@/blast-test.c)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+    add_executable(test_example ${BLAST_SRCS})
+    target_link_libraries(test_example BLAST::BLAST)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+    add_executable(test_example_static ${BLAST_SRCS})
+    target_link_libraries(test_example_static BLAST::BLASTSTATIC)
+endif(ZLIB_BLAST_BUILD_STATIC)
diff --git a/contrib/blast/test/find_package_no_components_test.cmake.in b/contrib/blast/test/find_package_no_components_test.cmake.in
new file mode 100644
index 0000000..f7054ff
--- /dev/null
+++ b/contrib/blast/test/find_package_no_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    blast_find_package
+    LANGUAGES C
+    VERSION @blast_VERSION@)
+
+option(ZLIB_BLAST_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(blast REQUIRED CONFIG)
+
+set(BLAST_SRCS
+    @blast_SOURCE_DIR@/blast-test.c)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+    add_executable(test_example ${BLAST_SRCS})
+    target_link_libraries(test_example BLAST::BLAST)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+    add_executable(test_example_static ${BLAST_SRCS})
+    target_link_libraries(test_example_static BLAST::BLASTSTATIC)
+endif(ZLIB_BLAST_BUILD_STATIC)
diff --git a/contrib/blast/test/find_package_test.cmake.in b/contrib/blast/test/find_package_test.cmake.in
new file mode 100644
index 0000000..c80e50b
--- /dev/null
+++ b/contrib/blast/test/find_package_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    blast_find_package
+    LANGUAGES C
+    VERSION @blast_VERSION@)
+
+option(ZLIB_BLAST_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+set(BLAST_SRCS
+    @blast_SOURCE_DIR@/blast-test.c)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+    find_package(blast REQUIRED COMPONENTS shared CONFIG)
+    add_executable(test_example ${BLAST_SRCS})
+    target_link_libraries(test_example BLAST::BLAST)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+    find_package(blast REQUIRED COMPONENTS static CONFIG)
+    add_executable(test_example_static ${BLAST_SRCS})
+    target_link_libraries(test_example_static BLAST::BLASTSTATIC)
+endif(ZLIB_BLAST_BUILD_STATIC)
diff --git a/contrib/blast/test/find_package_wrong_components_test.cmake.in b/contrib/blast/test/find_package_wrong_components_test.cmake.in
new file mode 100644
index 0000000..608f408
--- /dev/null
+++ b/contrib/blast/test/find_package_wrong_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    blast_find_package
+    LANGUAGES C
+    VERSION @blast_VERSION@)
+
+option(ZLIB_BLAST_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(blast REQUIRED COMPONENTS wrong CONFIG)
+
+set(BLAST_SRCS
+    @blast_SOURCE_DIR@/blast-test.c)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+    add_executable(test_example ${BLAST_SRCS})
+    target_link_libraries(test_example BLAST::BLAST)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+    add_executable(test_example_static ${BLAST_SRCS})
+    target_link_libraries(test_example_static BLAST::BLASTSTATIC)
+endif(ZLIB_BLAST_BUILD_STATIC)
diff --git a/contrib/iostream3/CMakeLists.txt b/contrib/iostream3/CMakeLists.txt
index 9c47c1c..33e5b71 100644
--- a/contrib/iostream3/CMakeLists.txt
+++ b/contrib/iostream3/CMakeLists.txt
@@ -111,6 +111,8 @@ if(ZLIB_IOSTREAM3_BUILD_TESTING)
     set_tests_properties(zlib_iostream3_cleanup
         PROPERTIES
             FIXTURES_CLEANUP zlib_iostream3_cleanup)
+
+        add_subdirectory(test)
 endif(ZLIB_IOSTREAM3_BUILD_TESTING)

 if(ZLIB_IOSTREAM3_INSTALL)
diff --git a/contrib/iostream3/iostream3Config.cmake.in b/contrib/iostream3/iostream3Config.cmake.in
new file mode 100644
index 0000000..a3db5e8
--- /dev/null
+++ b/contrib/iostream3/iostream3Config.cmake.in
@@ -0,0 +1,23 @@
+@PACKAGE_INIT@
+
+set(_iostreamv3_supported_components "shared" "static")
+include(CMakeFindDependencyMacro)
+
+if(iostreamv3_FIND_COMPONENTS)
+    find_dependency(ZLIB CONFIG COMPONENTS ${iostreamv3_FIND_COMPONENTS})
+
+    foreach(_comp ${iostreamv3_FIND_COMPONENTS})
+        if(NOT _comp IN_LIST _iostreamv3_supported_components)
+            set(iostreamv3_FOUND False)
+            set(iostreamv3_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
+        endif(NOT _comp IN_LIST _iostreamv3_supported_components)
+
+        include("${CMAKE_CURRENT_LIST_DIR}/iostreamv3-${_comp}.cmake")
+    endforeach(_comp ${iostreamv3_FIND_COMPONENTS})
+else(iostream3_FIND_COMPONENTS)
+    find_dependency(ZLIB CONFIG)
+
+    foreach(_component_config IN LISTS _iostreamv3_supported_components)
+        include("${CMAKE_CURRENT_LIST_DIR}/iostreamv3-${_component_config}.cmake")
+    endforeach(_component_config IN LISTS _iostreamv3_supported_components)
+endif(iostreamv3_FIND_COMPONENTS)
diff --git a/contrib/iostream3/test/CMakeLists.txt b/contrib/iostream3/test/CMakeLists.txt
new file mode 100644
index 0000000..f8b2b51
--- /dev/null
+++ b/contrib/iostream3/test/CMakeLists.txt
@@ -0,0 +1,191 @@
+# if we are built from with zlib, use this path's)
+if(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${zlib_BINARY_DIR})
+    set(inst_setup zlib_iostream3_install)
+else(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${iostreamV3_BINARY_DIR})
+    set(inst_setup zlib_iostream3_install)
+    set(ZLIB_ARG "-DZLIB_DIR=${ZLIB_DIR}")
+
+    add_test(
+        NAME zlib_iostream3_install
+        COMMAND ${CMAKE_COMMAND} --install ${minizip_BINARY_DIR} --prefix
+                ${CMAKE_CURRENT_BINARY_DIR}/test_install --config $<CONFIG>
+        WORKING_DIRECTORY ${iostreamV3_BINARY_DIR})
+
+    set_tests_properties(zlib_iostream3_install
+        PROPERTIES
+            FIXTURES_SETUP zlib_iostream3_install)
+endif(DEFINED ZLIB_BUILD_SHARED)
+
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_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}/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)
+
+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)
+
+# 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_iostream3_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+    NAME zlib_iostream3_find_package_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build)
+
+set_tests_properties(zlib_iostream3_find_package_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP iostream3_fp_config)
+
+set_tests_properties(zlib_iostream3_find_package_build
+    PROPERTIES
+        FIXTURES_REQUIRED iostream3_fp_config)
+
+#
+# add_subdirectory_test
+#
+add_test(
+    NAME zlib_iostream3_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=${WORK_DIR}/test/test_install
+        ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test)
+
+add_test(
+    NAME zlib_iostream3_add_subdirectory_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build)
+
+set_tests_properties(zlib_iostream3_add_subdirectory_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP iostream3as_config)
+
+set_tests_properties(zlib_iostream3_add_subdirectory_build
+    PROPERTIES
+        FIXTURES_REQUIRED iostream3_as_config)
+
+#
+# add_subdirectory_exclude_test
+#
+add_test(
+    NAME zlib_iostream3_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test)
+
+add_test(
+    NAME zlib_iostream3_add_subdirectory_exclude_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build)
+
+set_tests_properties(zlib_iostream3_add_subdirectory_exclude_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP iostream3_asx_config)
+
+set_tests_properties(zlib_iostream3_add_subdirectory_exclude_build
+    PROPERTIES
+        FIXTURES_REQUIRED iostream3_asx_config)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_iostream3_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test)
+
+set_tests_properties(zlib_iostream3_find_package_no_components_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup})
+
+if(NOT ZLIB_IOSTREAM3_BUILD_SHARED OR NOT ZLIB_IOSTREAM3_BUILD_STATIC)
+    set_tests_properties(zlib_iostream3_find_package_no_components_configure
+        PROPERTIES
+            WILL_FAIL TRUE)
+endif(NOT ZLIB_IOSTREAM3_BUILD_SHARED OR NOT ZLIB_IOSTREAM3_BUILD_STATIC)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_iostream3_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test)
+
+set_tests_properties(zlib_iostream3_find_package_wrong_components_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        WILL_FAIL TRUE)
diff --git a/contrib/iostream3/test/add_subdirectory_exclude_test.cmake.in b/contrib/iostream3/test/add_subdirectory_exclude_test.cmake.in
new file mode 100644
index 0000000..efc9cd8
--- /dev/null
+++ b/contrib/iostream3/test/add_subdirectory_exclude_test.cmake.in
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    iostream_add_subdirectory_exclude
+    LANGUAGES CXX
+    VERSION @iostreamV3_VERSION@)
+
+option(ZLIB_IOSTREAM3_BUILD_SHARED "" @ZLIB_IOSTREAM3_BUILD_SHARED@)
+option(ZLIB_IOSTREAM3_BUILD_STATIC "" @ZLIB_IOSTREAM3_BUILD_STATIC@)
+option(ZLIB_IOSTREAM3_BUILD_TESTING "" OFF)
+
+add_subdirectory(@iostreamV3_SOURCE_DIR@
+    ${CMAKE_CURRENT_BINARY_DIR}/iostream3
+    EXCLUDE_FROM_ALL)
+
+set(IOSTREAM_SRCS
+    @iostreamV3_SOURCE_DIR@/test.cc)
+
+if(ZLIB_IOSTREAM3_BUILD_SHARED)
+    add_executable(test_example ${IOSTREAM_SRCS})
+    target_link_libraries(test_example IOSTREAMV3::IOSTREAMV3)
+endif(ZLIB_IOSTREAM3_BUILD_SHARED)
+
+if(ZLIB_IOSTREAM3_BUILD_STATIC)
+    add_executable(test_example_static ${IOSTREAM_SRCS})
+    target_link_libraries(test_example_static IOSTREAMV3::IOSTREAMV3STATIC)
+endif(ZLIB_IOSTREAM3_BUILD_STATIC)
diff --git a/contrib/iostream3/test/add_subdirectory_test.cmake.in b/contrib/iostream3/test/add_subdirectory_test.cmake.in
new file mode 100644
index 0000000..5eed2cc
--- /dev/null
+++ b/contrib/iostream3/test/add_subdirectory_test.cmake.in
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    iostream_add_subdirectory
+    LANGUAGES CXX
+    VERSION @iostreamV3_VERSION@)
+
+option(ZLIB_IOSTREAM3_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_IOSTREAM3_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+option(ZLIB_IOSTREAM3_BUILD_TESTING "" OFF)
+
+add_subdirectory(@iostreamV3_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/iostream3)
+
+set(IOSTREAM_SRCS
+    @iostreamV3_SOURCE_DIR@/test.cc)
+
+if(ZLIB_IOSTREAM3_BUILD_SHARED)
+    add_executable(test_example ${IOSTREAM_SRCS})
+    target_link_libraries(test_example IOSTREAMV3::IOSTREAMV3)
+endif(ZLIB_IOSTREAM3_BUILD_SHARED)
+
+if(ZLIB_IOSTREAM3_BUILD_STATIC)
+    add_executable(test_example_static ${IOSTREAM_SRCS})
+    target_link_libraries(test_example_static IOSTREAMV3::IOSTREAMV3STATIC)
+endif(ZLIB_IOSTREAM3_BUILD_STATIC)
diff --git a/contrib/iostream3/test/find_package_no_components_test.cmake.in b/contrib/iostream3/test/find_package_no_components_test.cmake.in
new file mode 100644
index 0000000..4daf76e
--- /dev/null
+++ b/contrib/iostream3/test/find_package_no_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    iostream_find_package_no_components
+    LANGUAGES CXX
+    VERSION @iostreamV3_VERSION@)
+
+option(ZLIB_IOSTREAM3_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_IOSTREAM3_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(iostreamv3 REQUIRED CONFIG)
+
+set(IOSTREAM_SRCS
+    @iostreamV3_SOURCE_DIR@/test.cc)
+
+if(ZLIB_IOSTREAM3_BUILD_SHARED)
+    add_executable(test_example ${IOSTREAM_SRCS})
+    target_link_libraries(test_example IOSTREAMV3::IOSTREAMV3)
+endif(ZLIB_IOSTREAM3_BUILD_SHARED)
+
+if(ZLIB_IOSTREAM3_BUILD_STATIC)
+    add_executable(test_example_static ${IOSTREAM_SRCS})
+    target_link_libraries(test_example_static IOSTREAMV3::IOSTREAMV3STATIC)
+endif(ZLIB_IOSTREAM3_BUILD_STATIC)
diff --git a/contrib/iostream3/test/find_package_test.cmake.in b/contrib/iostream3/test/find_package_test.cmake.in
new file mode 100644
index 0000000..08abe56
--- /dev/null
+++ b/contrib/iostream3/test/find_package_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    iostream_find_package
+    LANGUAGES CXX
+    VERSION @iostreamV3_VERSION@)
+
+option(ZLIB_IOSTREAM_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_IOSTREAM_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+set(IOSTREAM_SRCS
+    @iostreamV3_SOURCE_DIR@/test.cc)
+
+if(ZLIB_IOSTREAM_BUILD_SHARED)
+    find_package(iostreamv3 REQUIRED COMPONENTS shared CONFIG)
+    add_executable(test_example ${IOSTREAM_SRCS})
+    target_link_libraries(test_example IOSTREAMV3::IOSTREAMV3)
+endif(ZLIB_IOSTREAM_BUILD_SHARED)
+
+if(ZLIB_IOSTREAM_BUILD_STATIC)
+    find_package(iostreamv3 REQUIRED COMPONENTS static CONFIG)
+    add_executable(test_example_static ${IOSTREAM_SRCS})
+    target_link_libraries(test_example_static IOSTREAMV3::IOSTREAMV3STATIC)
+endif(ZLIB_IOSTREAM_BUILD_STATIC)
diff --git a/contrib/iostream3/test/find_package_wrong_components_test.cmake.in b/contrib/iostream3/test/find_package_wrong_components_test.cmake.in
new file mode 100644
index 0000000..83435a8
--- /dev/null
+++ b/contrib/iostream3/test/find_package_wrong_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    iostream_find_package
+    LANGUAGES CXX
+    VERSION @iostreamV3_VERSION@)
+
+option(ZLIB_IOSTREAM_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_IOSTREAM_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(iostreamv3 REQUIRED COMPONENTS wrongCONFIG)
+
+set(IOSTREAM_SRCS
+    @iostreamV3_SOURCE_DIR@/test.cc)
+
+if(ZLIB_IOSTREAM_BUILD_SHARED)
+    add_executable(test_example ${IOSTREAM_SRCS})
+    target_link_libraries(test_example IOSTREAMV3::IOSTREAMV3)
+endif(ZLIB_IOSTREAM_BUILD_SHARED)
+
+if(ZLIB_IOSTREAM_BUILD_STATIC)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static IOSTREAMV3::IOSTREAMV3STATIC)
+endif(ZLIB_IOSTREAM_BUILD_STATIC)
diff --git a/contrib/puff/CMakeLists.txt b/contrib/puff/CMakeLists.txt
index ca95830..72a4c6d 100644
--- a/contrib/puff/CMakeLists.txt
+++ b/contrib/puff/CMakeLists.txt
@@ -59,6 +59,8 @@ if(ZLIB_PUFF_BUILD_TESTING)
         endif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
     endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR
           ${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
+
+      add_subdirectory(test)
 endif(ZLIB_PUFF_BUILD_TESTING)

 if(ZLIB_PUFF_BUILD_SHARED)
diff --git a/contrib/puff/puffConfig.cmake.in b/contrib/puff/puffConfig.cmake.in
new file mode 100644
index 0000000..227f988
--- /dev/null
+++ b/contrib/puff/puffConfig.cmake.in
@@ -0,0 +1,18 @@
+@PACKAGE_INIT@
+
+set(_puff_supported_components "shared" "static")
+
+if(puff_FIND_COMPONENTS)
+    foreach(_comp ${puff_FIND_COMPONENTS})
+        if(NOT _comp IN_LIST _puff_supported_components)
+            set(puff_FOUND False)
+            set(puff_NOT_FOUND_MESSAGE "Unsupported component: ${_comp}")
+        endif(NOT _comp IN_LIST _puff_supported_components)
+
+        include("${CMAKE_CURRENT_LIST_DIR}/puff-${_comp}.cmake")
+    endforeach(_comp ${puff_FIND_COMPONENTS})
+else(puff_FIND_COMPONENTS)
+    foreach(_component_config IN LISTS _puff_supported_components)
+        include("${CMAKE_CURRENT_LIST_DIR}/puff-${_component_config}.cmake")
+    endforeach(_component_config IN LISTS _puff_supported_components)
+endif(puff_FIND_COMPONENTS)
diff --git a/contrib/puff/test/CMakeLists.txt b/contrib/puff/test/CMakeLists.txt
new file mode 100644
index 0000000..1ed39de
--- /dev/null
+++ b/contrib/puff/test/CMakeLists.txt
@@ -0,0 +1,191 @@
+# if we are built from with zlib, use this path's)
+if(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${zlib_BINARY_DIR})
+    set(inst_setup zlib_puff_install)
+else(DEFINED ZLIB_BUILD_SHARED)
+    set(WORK_DIR ${puff_BINARY_DIR})
+    set(inst_setup zlib_puff_install)
+    set(ZLIB_ARG "-DZLIB_DIR=${ZLIB_DIR}")
+
+    add_test(
+        NAME zlib_puff_install
+        COMMAND ${CMAKE_COMMAND} --install ${puff_BINARY_DIR} --prefix
+                ${CMAKE_CURRENT_BINARY_DIR}/test_install --config $<CONFIG>
+        WORKING_DIRECTORY ${puff_BINARY_DIR})
+
+    set_tests_properties(zlib_puff_install
+        PROPERTIES
+            FIXTURES_SETUP zlib_puff_install)
+endif(DEFINED ZLIB_BUILD_SHARED)
+
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_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}/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)
+
+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)
+
+# 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_puff_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=${WORK_DIR}/test/test_install
+        ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_test)
+
+add_test(
+    NAME zlib_puff_find_package_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/findpackage_test_build)
+
+set_tests_properties(zlib_puff_find_package_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP puff_fp_config)
+
+set_tests_properties(zlib_puff_find_package_build
+    PROPERTIES
+        FIXTURES_REQUIRED puff_fp_config)
+
+#
+# add_subdirectory_test
+#
+add_test(
+    NAME zlib_puff_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test)
+
+add_test(
+    NAME zlib_puff_add_subdirectory_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_test_build)
+
+set_tests_properties(zlib_puff_add_subdirectory_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP puiff_as_config)
+
+set_tests_properties(zlib_puff_add_subdirectory_build
+    PROPERTIES
+        FIXTURES_REQUIRED puff_as_config)
+
+#
+# add_subdirectory_exclude_test
+#
+add_test(
+    NAME zlib_puff_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test)
+
+add_test(
+    NAME zlib_puff_add_subdirectory_exclude_build
+    COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+    WORKING_DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}/add_subdirectory_exclude_test_build)
+
+set_tests_properties(zlib_puff_add_subdirectory_exclude_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        FIXTURES_SETUP puff_asx_config)
+
+set_tests_properties(zlib_puff_add_subdirectory_exclude_build
+    PROPERTIES
+        FIXTURES_REQUIRED puff_asx_config)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_puff_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_no_components_test)
+
+set_tests_properties(
+    zlib_puff_find_package_no_components_configure
+        PROPERTIES
+            FIXTURES_REQUIRED ${inst_setup})
+
+if(NOT ZLIB_PUFF_BUILD_SHARED OR NOT ZLIB_PUFF_BUILD_STATIC)
+    set_tests_properties(zlib_puff_find_package_no_components_configure
+        PROPERTIES
+            WILL_FAIL TRUE)
+endif(NOT ZLIB_PUFF_BUILD_SHARED OR NOT ZLIB_PUFF_BUILD_STATIC)
+
+#
+# findpackage_no_components_test
+#
+add_test(
+    NAME zlib_puff_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=${WORK_DIR}/test/test_install ${ZLIB_ARG}
+        --fresh
+        -G "${CMAKE_GENERATOR}"
+        -S${CMAKE_CURRENT_BINARY_DIR}/findpackage_wrong_components_test)
+
+set_tests_properties(zlib_puff_find_package_wrong_components_configure
+    PROPERTIES
+        FIXTURES_REQUIRED ${inst_setup}
+        WILL_FAIL TRUE)
diff --git a/contrib/puff/test/add_subdirectory_exclude_test.cmake.in b/contrib/puff/test/add_subdirectory_exclude_test.cmake.in
new file mode 100644
index 0000000..0e24c01
--- /dev/null
+++ b/contrib/puff/test/add_subdirectory_exclude_test.cmake.in
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    zlib_puff_add_subdirectory_exclude_from_all
+    LANGUAGES C
+    VERSION @puff_VERSION@)
+
+option(ZLIB_PUFF_BUILD_TESTING "" OFF)
+option(ZLIB_PUFF_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_PUFF_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+add_subdirectory(@puff_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/puff
+                 EXCLUDE_FROM_ALL)
+
+set(PUFF_SRCS
+    @puff_SOURCE_DIR@/pufftest.c)
+
+if(ZLIB_PUFF_BUILD_SHARED)
+    add_executable(test_example ${PUFF_SRCS})
+    target_link_libraries(test_example PUFF::PUFF)
+endif(ZLIB_PUFF_BUILD_SHARED)
+
+if(ZLIB_PUFF_BUILD_STATIC)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static PUFF::PUFFSTATIC)
+endif(ZLIB_PUFF_BUILD_STATIC)
diff --git a/contrib/puff/test/add_subdirectory_test.cmake.in b/contrib/puff/test/add_subdirectory_test.cmake.in
new file mode 100644
index 0000000..8e7e47b
--- /dev/null
+++ b/contrib/puff/test/add_subdirectory_test.cmake.in
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    zlib_puff_add_subdirectory
+    LANGUAGES C
+    VERSION @puff_VERSION@)
+
+option(ZLIB_PUFF_BUILD_TESTING "" OFF)
+option(ZLIB_PUFF_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_PUFF_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+add_subdirectory(@puff_SOURCE_DIR@ ${CMAKE_CURRENT_BINARY_DIR}/puff)
+
+set(PUFF_SRCS
+    @puff_SOURCE_DIR@/pufftest.c)
+
+if(ZLIB_PUFF_BUILD_SHARED)
+    add_executable(test_example ${PUFF_SRCS})
+    target_link_libraries(test_example PUFF::PUFF)
+endif(ZLIB_PUFF_BUILD_SHARED)
+
+if(ZLIB_PUFF_BUILD_STATIC)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static PUFF::PUFFSTATIC)
+endif(ZLIB_PUFF_BUILD_STATIC)
diff --git a/contrib/puff/test/find_package_no_components_test.cmake.in b/contrib/puff/test/find_package_no_components_test.cmake.in
new file mode 100644
index 0000000..2040bfd
--- /dev/null
+++ b/contrib/puff/test/find_package_no_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    puff_find_package
+    LANGUAGES C
+    VERSION @puff_VERSION@)
+
+option(ZLIB_PUFF_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_PUFF_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(puff REQUIRED CONFIG)
+
+set(PUFF_SRCS
+    @puff_SOURCE_DIR@/pufftest.c)
+
+if(ZLIB_PUFF_BUILD_SHARED)
+    add_executable(test_example ${PUFF_SRCS})
+    target_link_libraries(test_example PUFF::PUFF)
+endif(ZLIB_PUFF_BUILD_SHARED)
+
+if(ZLIB_PUFF_BUILD_STATIC)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static PUFF::PUFFSTATIC)
+endif(ZLIB_PUFF_BUILD_STATIC)
diff --git a/contrib/puff/test/find_package_test.cmake.in b/contrib/puff/test/find_package_test.cmake.in
new file mode 100644
index 0000000..e8a0cef
--- /dev/null
+++ b/contrib/puff/test/find_package_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    puff_find_package
+    LANGUAGES C
+    VERSION @puff_VERSION@)
+
+option(ZLIB_PUFF_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_PUFF_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+set(PUFF_SRCS
+    @puff_SOURCE_DIR@/pufftest.c)
+
+if(ZLIB_PUFF_BUILD_SHARED)
+    find_package(puff REQUIRED COMPONENTS shared CONFIG)
+    add_executable(test_example ${PUFF_SRCS})
+    target_link_libraries(test_example PUFF::PUFF)
+endif(ZLIB_PUFF_BUILD_SHARED)
+
+if(ZLIB_PUFF_BUILD_STATIC)
+    find_package(puff REQUIRED COMPONENTS static CONFIG)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static PUFF::PUFFSTATIC)
+endif(ZLIB_PUFF_BUILD_STATIC)
diff --git a/contrib/puff/test/find_package_wrong_components_test.cmake.in b/contrib/puff/test/find_package_wrong_components_test.cmake.in
new file mode 100644
index 0000000..a5cd497
--- /dev/null
+++ b/contrib/puff/test/find_package_wrong_components_test.cmake.in
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+    puff_find_package
+    LANGUAGES C
+    VERSION @puff_VERSION@)
+
+option(ZLIB_PUFF_BUILD_SHARED "" @ZLIB_PUFF_BUILD_SHARED@)
+option(ZLIB_PUFF_BUILD_STATIC "" @ZLIB_PUFF_BUILD_STATIC@)
+
+find_package(puff REQUIRED COMPONENTS wrong CONFIG)
+
+set(PUFF_SRCS
+    @puff_SOURCE_DIR@/pufftest.c)
+
+if(ZLIB_PUFF_BUILD_SHARED)
+    add_executable(test_example ${PUFF_SRCS})
+    target_link_libraries(test_example PUFF::PUFF)
+endif(ZLIB_PUFF_BUILD_SHARED)
+
+if(ZLIB_PUFF_BUILD_STATIC)
+    add_executable(test_example_static ${PUFF_SRCS})
+    target_link_libraries(test_example_static PUFF::PUFFSTATIC)
+endif(ZLIB_PUFF_BUILD_STATIC)