Commit 5ba29ae for zlib
commit 5ba29aea46bc135dcde7bcf88314b816d77a1cf6
Author: Vollstrecker <werner@vollstreckernet.de>
Date: Tue Dec 30 17:42:52 2025 +0100
CMake: Added contrib/blast.
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
index cc4b331..63a838d 100644
--- a/contrib/CMakeLists.txt
+++ b/contrib/CMakeLists.txt
@@ -1,4 +1,5 @@
option(ZLIB_BUILD_ADA "Enable building of Ada bindings" OFF)
+option(ZLIB_BUILD_BLAST "Enable building of blast binary" OFF)
option(ZLIB_BUILD_MINIZIP "Enable building libminizip contrib library" OFF)
if(ZLIB_BUILD_ADA)
@@ -8,6 +9,13 @@ if(ZLIB_BUILD_ADA)
add_subdirectory(ada/)
endif(ZLIB_BUILD_ADA)
+if(ZLIB_BUILD_BLAST)
+ set(ZLIBBLAST_BUILD_SHARED ${ZLIB_BUILD_SHARED})
+ set(ZLIBBLAST_BUILD_STATIC ${ZLIB_BUILD_STATIC})
+ set(ZLIBBLAST_BUILD_TESTING ${ZLIB_BUILD_TESTING})
+ add_subdirectory(blast/)
+endif(ZLIB_BUILD_BLAST)
+
if(ZLIB_BUILD_MINIZIP)
set(MINIZIP_BUILD_SHARED ${ZLIB_BUILD_SHARED})
set(MINIZIP_BUILD_STATIC ${ZLIB_BUILD_STATIC})
diff --git a/contrib/blast/CMakeLists.txt b/contrib/blast/CMakeLists.txt
new file mode 100644
index 0000000..6357fcb
--- /dev/null
+++ b/contrib/blast/CMakeLists.txt
@@ -0,0 +1,81 @@
+cmake_minimum_required(VERSION 3.12...3.31)
+
+set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
+
+project(
+ blast
+ VERSION 1.3.0
+ LANGUAGES C
+ DESCRIPTION "A library for creating zipfiles based in zlib"
+ HOMEPAGE_URL "https://www.zlib.net")
+
+if(WIN32 OR CYGWIN)
+ set(zlibAda_static_suffix "s")
+ set(CMAKE_DEBUG_POSTFIX "d")
+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:ZLIB::ZLIB>${separator}")
+ string(APPEND testEnv "$ENV{PATH}")
+
+ set_tests_properties(${testName} PROPERTIES ENVIRONMENT "${testEnv}")
+endfunction(blast_findTestEnv testName)
+
+if(ZLIBBLAST_BUILD_SHARED)
+ add_library(blast SHARED
+ blast.c
+ blast.h)
+
+ if(ZLIBBLAST_BUILD_TESTING)
+ enable_testing()
+ add_executable(blast-test blast-test.c)
+ target_link_libraries(blast-test blast)
+
+ add_test(NAME blast_blast-test
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
+ "$<TARGET_FILE:blast-test>"
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
+
+ if(MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ blast_findtestenv(blast-test)
+ endif(
+ MSVC
+ OR MSYS
+ OR MINGW
+ OR CYGWIN)
+ endif(ZLIBBLAST_BUILD_TESTING)
+endif(ZLIBBLAST_BUILD_SHARED)
+
+if(ZLIBBLAST_BUILD_STATIC)
+ add_library(blastStatic STATIC
+ blast.c
+ blast.h)
+
+ set_target_properties(blastStatic
+ PROPERTIES
+ OUTPUT_NAME blast${minizip_static_suffix})
+
+ if(ZLIBBLAST_BUILD_TESTING)
+ enable_testing()
+ add_executable(blast-testStatic blast-test.c)
+ target_link_libraries(blast-testStatic blastStatic)
+
+ add_test(NAME blast_testStatic
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
+ "$<TARGET_FILE:blast-testStatic>"
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ "${CMAKE_CURRENT_BINARY_DIR}")
+ endif(ZLIBBLAST_BUILD_TESTING)
+endif(ZLIBBLAST_BUILD_STATIC)
diff --git a/contrib/blast/Makefile b/contrib/blast/Makefile
index 9be80ba..f64848b 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 0000000..471dfd6
--- /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 e6e6590..3f6963f 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 ef8544c..c5ef7ab 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/tester.cmake b/contrib/blast/tester.cmake
new file mode 100644
index 0000000..14e69fc
--- /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)