aboutsummaryrefslogtreecommitdiff
path: root/contrib/blast
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/blast')
-rw-r--r--contrib/blast/CMakeLists.txt166
-rw-r--r--contrib/blast/Makefile16
-rw-r--r--contrib/blast/blast-test.c42
-rw-r--r--contrib/blast/blast.c44
-rw-r--r--contrib/blast/blast.h1
-rw-r--r--contrib/blast/blastConfig.cmake.in18
-rw-r--r--contrib/blast/test/CMakeLists.txt193
-rw-r--r--contrib/blast/test/add_subdirectory_exclude_test.cmake.in27
-rw-r--r--contrib/blast/test/add_subdirectory_test.cmake.in25
-rw-r--r--contrib/blast/test/find_package_no_components_test.cmake.in24
-rw-r--r--contrib/blast/test/find_package_test.cmake.in24
-rw-r--r--contrib/blast/test/find_package_wrong_components_test.cmake.in24
-rw-r--r--contrib/blast/tester.cmake28
13 files changed, 583 insertions, 49 deletions
diff --git a/contrib/blast/CMakeLists.txt b/contrib/blast/CMakeLists.txt
new file mode 100644
index 000000000000..9b20fdada849
--- /dev/null
+++ b/contrib/blast/CMakeLists.txt
@@ -0,0 +1,166 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+project(
+ blast
+ VERSION 1.3.0
+ LANGUAGES C
+ DESCRIPTION "A library for creating zipfiles based in zlib"
+ HOMEPAGE_URL "https://www.zlib.net")
+
+option(ZLIB_BLAST_BUILD_SHARED "Enable building blast shared library" ON)
+option(ZLIB_BLAST_BUILD_STATIC "Enable building blast static library" ON)
+option(ZLIB_BLAST_BUILD_TESTING "Enable building tests for blast" ON)
+option(ZLIB_BLAST_INSTALL "Enable installation of blast" ON)
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+if(WIN32 OR CYGWIN)
+ set(zlibblast_static_suffix "s")
+ set(CMAKE_DEBUG_POSTFIX "d")
+ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+endif(WIN32 OR CYGWIN)
+
+function(blast_findTestEnv testName)
+ set(testEnv "PATH=")
+
+ if(MSVC OR MINGW)
+ set(separator "\\\;")
+ else()
+ set(separator ":")
+ endif()
+
+ string(APPEND testEnv "$<TARGET_FILE_DIR:BLAST::BLAST>${separator}")
+ string(APPEND testEnv "$ENV{PATH}")
+
+ set_tests_properties(${testName} PROPERTIES ENVIRONMENT "${testEnv}")
+endfunction(blast_findTestEnv testName)
+
+if(ZLIB_BLAST_BUILD_SHARED)
+ add_library(zlib_blast_blast SHARED
+ blast.c
+ blast.h)
+
+ add_library(BLAST::BLAST ALIAS zlib_blast_blast)
+
+ if(NOT CYGWIN)
+ set_target_properties(zlib_blast_blast
+ PROPERTIES
+ SOVERSION ${blast_VERSION_MAJOR}
+ VERSION ${blast_VERSION})
+ endif(NOT CYGWIN)
+
+ set_target_properties(zlib_blast_blast
+ PROPERTIES
+ EXPORT_NAME BLAST
+ OUTPUT_NAME blast)
+
+ if(ZLIB_BLAST_BUILD_TESTING)
+ enable_testing()
+ add_executable(zlib_blast_blast-test blast-test.c)
+ target_link_libraries(zlib_blast_blast-test PRIVATE zlib_blast_blast)
+
+ add_test(NAME zlib_blast_blast-test
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
+ "$<TARGET_FILE:zlib_blast_blast-test>"
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
+
+ if(MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ blast_findtestenv(zlib_blast_blast-test)
+ endif(
+ MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ endif(ZLIB_BLAST_BUILD_TESTING)
+endif(ZLIB_BLAST_BUILD_SHARED)
+
+if(ZLIB_BLAST_BUILD_STATIC)
+ add_library(zlib_blast_blastStatic STATIC
+ blast.c
+ blast.h)
+
+ add_library(BLAST::BLASTSTATIC ALIAS zlib_blast_blastStatic)
+
+ set_target_properties(zlib_blast_blastStatic
+ PROPERTIES
+ EXPORT_NAME BLASTSTATIC
+ OUTPUT_NAME blast${zlibblast_static_suffix})
+
+ if(ZLIB_BLAST_BUILD_TESTING)
+ enable_testing()
+ add_executable(zlib_blast_testStatic blast-test.c)
+ target_link_libraries(zlib_blast_testStatic
+ PRIVATE zlib_blast_blastStatic)
+
+ add_test(NAME zlib_blast_testStatic
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
+ "$<TARGET_FILE:zlib_blast_testStatic>"
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
+ 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(
+ TARGETS zlib_blast_blast
+ COMPONENT Runtime
+ EXPORT zlibBlastSharedExport
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+ install(
+ EXPORT zlibBlastSharedExport
+ FILE blast-shared.cmake
+ NAMESPACE BLAST::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/blast)
+
+ if(MSVC)
+ install(
+ FILES $<TARGET_PDB_FILE:zlib_blast_blast>
+ COMPONENT Development
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ CONFIGURATIONS Debug OR RelWithDebInfo
+ OPTIONAL)
+ endif(MSVC)
+ endif(ZLIB_BLAST_BUILD_SHARED)
+
+ if(ZLIB_BLAST_BUILD_STATIC)
+ install(
+ TARGETS zlib_blast_blastStatic
+ COMPONENT Development
+ EXPORT zlibBlastStaticExport
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
+ install(
+ EXPORT zlibBlastStaticExport
+ FILE blast-static.cmake
+ NAMESPACE BLAST::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/blast)
+ endif(ZLIB_BLAST_BUILD_STATIC)
+
+ configure_package_config_file(
+ ${blast_SOURCE_DIR}/blastConfig.cmake.in
+ ${blast_BINARY_DIR}/blastConfig.cmake
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/blast)
+
+ write_basic_package_version_file(
+ "${blast_BINARY_DIR}/blastConfigVersion.cmake"
+ VERSION "${blast_VERSION}"
+ COMPATIBILITY AnyNewerVersion)
+
+ install(FILES ${blast_BINARY_DIR}/blastConfig.cmake
+ ${blast_BINARY_DIR}/blastConfigVersion.cmake
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/blast)
+ install(
+ FILES blast.h
+ COMPONENT Development
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
+endif(ZLIB_BLAST_INSTALL)
diff --git a/contrib/blast/Makefile b/contrib/blast/Makefile
index 9be80bafe050..f64848b36d0c 100644
--- a/contrib/blast/Makefile
+++ b/contrib/blast/Makefile
@@ -1,8 +1,14 @@
-blast: blast.c blast.h
- cc -DTEST -o blast blast.c
+all: test
-test: blast
- blast < test.pk | cmp - test.txt
+libblast.so: blast.c blast.h
+ cc -o libblast.so -shared blast.c
+
+blast-test: libblast.so
+ cc -o blast-test.o -c blast-test.c
+ cc -o blast-test blast-test.o libblast.so
+
+test: blast-test
+ LD_LIBRARY_PATH=./ ./blast-test < test.pk | cmp - test.txt
clean:
- rm -f blast blast.o
+ rm -f libblast.so blast-test blast-test.o
diff --git a/contrib/blast/blast-test.c b/contrib/blast/blast-test.c
new file mode 100644
index 000000000000..471dfd6d82d9
--- /dev/null
+++ b/contrib/blast/blast-test.c
@@ -0,0 +1,42 @@
+#include "blast.h" /* prototype for blast() */
+
+/* Example of how to use blast() */
+#include <stdio.h>
+#include <stdlib.h>
+
+#define CHUNK 16384
+
+local unsigned inf(void *how, unsigned char **buf)
+{
+ static unsigned char hold[CHUNK];
+
+ *buf = hold;
+ return fread(hold, 1, CHUNK, (FILE *)how);
+}
+
+local int outf(void *how, unsigned char *buf, unsigned len)
+{
+ return fwrite(buf, 1, len, (FILE *)how) != len;
+}
+
+/* Decompress a PKWare Compression Library stream from stdin to stdout */
+int main(void)
+{
+ int ret;
+ unsigned left;
+
+ /* decompress to stdout */
+ left = 0;
+ ret = blast(inf, stdin, outf, stdout, &left, NULL);
+ if (ret != 0)
+ fprintf(stderr, "blast error: %d\n", ret);
+
+ /* count any leftover bytes */
+ while (getchar() != EOF)
+ left++;
+ if (left)
+ fprintf(stderr, "blast warning: %u unused bytes of input\n", left);
+
+ /* return blast() error code */
+ return ret;
+}
diff --git a/contrib/blast/blast.c b/contrib/blast/blast.c
index e6e659073c63..3f6963f89e35 100644
--- a/contrib/blast/blast.c
+++ b/contrib/blast/blast.c
@@ -33,7 +33,6 @@
#include <setjmp.h> /* for setjmp(), longjmp(), and jmp_buf */
#include "blast.h" /* prototype for blast() */
-#define local static /* for local function definitions */
#define MAXBITS 13 /* maximum code length */
#define MAXWIN 4096 /* maximum window size */
@@ -421,46 +420,3 @@ int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow,
err = 1;
return err;
}
-
-#ifdef TEST
-/* Example of how to use blast() */
-#include <stdio.h>
-#include <stdlib.h>
-
-#define CHUNK 16384
-
-local unsigned inf(void *how, unsigned char **buf)
-{
- static unsigned char hold[CHUNK];
-
- *buf = hold;
- return fread(hold, 1, CHUNK, (FILE *)how);
-}
-
-local int outf(void *how, unsigned char *buf, unsigned len)
-{
- return fwrite(buf, 1, len, (FILE *)how) != len;
-}
-
-/* Decompress a PKWare Compression Library stream from stdin to stdout */
-int main(void)
-{
- int ret;
- unsigned left;
-
- /* decompress to stdout */
- left = 0;
- ret = blast(inf, stdin, outf, stdout, &left, NULL);
- if (ret != 0)
- fprintf(stderr, "blast error: %d\n", ret);
-
- /* count any leftover bytes */
- while (getchar() != EOF)
- left++;
- if (left)
- fprintf(stderr, "blast warning: %u unused bytes of input\n", left);
-
- /* return blast() error code */
- return ret;
-}
-#endif
diff --git a/contrib/blast/blast.h b/contrib/blast/blast.h
index ef8544c53b64..c5ef7ab5e667 100644
--- a/contrib/blast/blast.h
+++ b/contrib/blast/blast.h
@@ -21,6 +21,7 @@
Mark Adler madler@alumni.caltech.edu
*/
+#define local static /* for local function definitions */
/*
* blast() decompresses the PKWare Data Compression Library (DCL) compressed
diff --git a/contrib/blast/blastConfig.cmake.in b/contrib/blast/blastConfig.cmake.in
new file mode 100644
index 000000000000..5909ac4f58ee
--- /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 000000000000..eb58681647b8
--- /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_BLAST)
+ set(WORK_DIR ${zlib_BINARY_DIR})
+ set(inst_setup zlib_install)
+else(DEFINED ZLIB_BUILD_BLAST)
+ 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_BLAST)
+
+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_wrong_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 000000000000..9f503b496e2c
--- /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_BLAST_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_BLAST_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 000000000000..1268b7c9be80
--- /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_BLAST_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_BLAST_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 000000000000..69739d395a06
--- /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_BLAST_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_BLAST_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 000000000000..5568c3a0e8de
--- /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_BLAST_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_BLAST_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 000000000000..84744ca942cd
--- /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_BLAST_BUILD_SHARED@)
+option(ZLIB_BLAST_BUILD_STATIC "" @ZLIB_BLAST_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/blast/tester.cmake b/contrib/blast/tester.cmake
new file mode 100644
index 000000000000..14e69fca5086
--- /dev/null
+++ b/contrib/blast/tester.cmake
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+#CMAKE_ARGV0 = ${CMAKE_COMMAND}
+#CMAKE_ARGV1 = -P
+#CMAKE_ARGV2 = ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
+#CMAKE_ARGV3 = "$<TARGET_FILE:blast-test>"
+#CMAKE_ARGV4 = "${CMAKE_CURRENT_SOURCE_DIR}"
+#CMAKE_ARGV5 = "${CMAKE_CURRENT_BINARY_DIR}")
+
+execute_process(COMMAND ${CMAKE_ARGV3}
+ INPUT_FILE "${CMAKE_ARGV4}/test.pk"
+ OUTPUT_FILE "${CMAKE_ARGV5}/output.txt"
+ RESULT_VARIABLE RESULT)
+
+if(RESULT)
+ message(FATAL_ERROR "Command exitited with: ${RESULT}")
+endif(RESULT)
+
+execute_process(COMMAND ${CMAKE_ARGV0} -E compare_files
+ "${CMAKE_ARGV4}/test.txt"
+ "${CMAKE_ARGV5}/output.txt"
+ RESULT_VARIABLE RESULT)
+
+file(REMOVE "${CMAKE_ARGV5}/output.txt")
+
+if(RESULT)
+ message(FATAL_ERROR "Files differ")
+endif(RESULT)