From 5ba29aea46bc135dcde7bcf88314b816d77a1cf6 Mon Sep 17 00:00:00 2001 From: Vollstrecker Date: Tue, 30 Dec 2025 17:42:52 +0100 Subject: CMake: Added contrib/blast. --- contrib/CMakeLists.txt | 8 +++++ contrib/blast/CMakeLists.txt | 81 ++++++++++++++++++++++++++++++++++++++++++++ contrib/blast/Makefile | 16 ++++++--- contrib/blast/blast-test.c | 42 +++++++++++++++++++++++ contrib/blast/blast.c | 44 ------------------------ contrib/blast/blast.h | 1 + contrib/blast/tester.cmake | 28 +++++++++++++++ 7 files changed, 171 insertions(+), 49 deletions(-) create mode 100644 contrib/blast/CMakeLists.txt create mode 100644 contrib/blast/blast-test.c create mode 100644 contrib/blast/tester.cmake diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index cc4b3310..63a838dc 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 00000000..6357fcbb --- /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 "$${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 + "$" + "${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 + "$" + "${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 9be80baf..f64848b3 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 00000000..471dfd6d --- /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 +#include + +#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 e6e65907..3f6963f8 100644 --- a/contrib/blast/blast.c +++ b/contrib/blast/blast.c @@ -33,7 +33,6 @@ #include /* 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 -#include - -#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 ef8544c5..c5ef7ab5 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 00000000..14e69fca --- /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 = "$" +#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) -- cgit v1.2.3-55-g6feb