aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/CMakeLists.txt1
-rw-r--r--contrib/puff/CMakeLists.txt137
-rw-r--r--contrib/puff/bin-writer.c26
-rw-r--r--contrib/puff/tester-cov.cmake56
-rw-r--r--contrib/puff/tester.cmake15
5 files changed, 235 insertions, 0 deletions
diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
index 18f86c4..fab97ac 100644
--- a/contrib/CMakeLists.txt
+++ b/contrib/CMakeLists.txt
@@ -37,3 +37,4 @@ zlib_add_contrib_lib(ADA "Ada bindings" ada)
37zlib_add_contrib_lib(BLAST "blast binary" blast) 37zlib_add_contrib_lib(BLAST "blast binary" blast)
38zlib_add_contrib_lib(IOSTREAM3 "IOStream C++ bindings V3" iostream3) 38zlib_add_contrib_lib(IOSTREAM3 "IOStream C++ bindings V3" iostream3)
39zlib_add_contrib_lib(MINIZIP "minizip library" minizip) 39zlib_add_contrib_lib(MINIZIP "minizip library" minizip)
40zlib_add_contrib_lib(PUFF "puff decompress library" puff)
diff --git a/contrib/puff/CMakeLists.txt b/contrib/puff/CMakeLists.txt
new file mode 100644
index 0000000..f7418fd
--- /dev/null
+++ b/contrib/puff/CMakeLists.txt
@@ -0,0 +1,137 @@
1cmake_minimum_required(VERSION 3.12...3.31)
2
3project(
4 iostreamsV3
5 VERSION 1.0.0
6 LANGUAGES C
7 DESCRIPTION "A library for decompressing deflate with very little footprint"
8 HOMEPAGE_URL "https://www.zlib.net")
9
10option(ZLIB_PUFF_BUILD_SHARED "Enable building blast shared library" ON)
11option(ZLIB_PUFF_BUILD_STATIC "Enable building blast static library" ON)
12option(ZLIB_PUFF_BUILD_TESTING "Enable building tests for blast" ON)
13
14if(NOT DEFINED ZLIB_BUILD_PUFF)
15 if(ZLIB_PUFF_BUILD_SHARED)
16 list(APPEND REQUIRED_COMPONENTS "shared")
17 endif(ZLIB_PUFF_BUILD_SHARED)
18
19 if(ZLIB_PUFF_BUILD_STATIC)
20 list(APPEND REQUIRED_COMPONENTS "static")
21 endif(ZLIB_PUFF_BUILD_STATIC)
22
23 find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG)
24endif(NOT DEFINED ZLIB_BUILD_PUFF)
25
26if(WIN32 OR CYGWIN)
27 set(zlibpuff_static_suffix "s")
28 set(CMAKE_DEBUG_POSTFIX "d")
29endif(WIN32 OR CYGWIN)
30
31if(ZLIB_PUFF_BUILD_TESTING)
32 add_executable(bin-writer bin-writer.c)
33
34 if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR
35 ${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
36 set(CFLAGS_OLD ${CMAKE_C_FLAGS})
37 set(CMAKE_C_FLAGS
38 ""
39 CACHE STRING "" FORCE)
40
41 if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
42 find_program(GCOV_EXECUTABLE gcov)
43 endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
44
45 if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
46 set(llvm_names llvm_cov)
47 list(APPEND llvm_names llvm-cov)
48
49 foreach(ver RANGE 11 99)
50 list(APPEND llvm_names llvm-cov-${ver})
51 endforeach(ver RANGE 11 99)
52
53 find_program(GCOV_EXECUTABLE NAMES ${llvm_names})
54 set(llvm_option "gcov")
55 endif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
56 endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR
57 ${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
58endif(ZLIB_PUFF_BUILD_TESTING)
59
60if(ZLIB_PUFF_BUILD_SHARED)
61 add_library(zlib-puff SHARED
62 puff.c
63 puff.h)
64
65 if(ZLIB_PUFF_BUILD_TESTING)
66 enable_testing()
67
68 add_executable(puff-test pufftest.c)
69
70 target_link_libraries(puff-test
71 PRIVATE zlib-puff)
72
73 add_test(NAME zlib_puff_test
74 COMMAND ${CMAKE_COMMAND} -P
75 ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
76 "$<TARGET_FILE:puff-test>"
77 "${CMAKE_CURRENT_SOURCE_DIR}")
78
79 if(GCOV_EXECUTABLE)
80 add_executable(puff-test-coverage pufftest.c puff.c)
81
82 target_compile_options(puff-test-coverage PRIVATE -coverage)
83
84 target_link_options(puff-test-coverage PRIVATE -coverage)
85
86 add_test(NAME zlib_puff_test_coverage
87 COMMAND ${CMAKE_COMMAND} -P
88 ${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
89 "$<TARGET_FILE:puff-test-coverage>"
90 "${CMAKE_CURRENT_SOURCE_DIR}"
91 "${CMAKE_CURRENT_BINARY_DIR}"
92 ${GCOV_EXECUTABLE}
93 ${llvm_option})
94 endif(GCOV_EXECUTABLE)
95 endif(ZLIB_PUFF_BUILD_TESTING)
96endif(ZLIB_PUFF_BUILD_SHARED)
97
98if(ZLIB_PUFF_BUILD_STATIC)
99 add_library(zlib-puffStatic STATIC
100 puff.c
101 puff.h)
102
103 set_target_properties(zlib-puffStatic
104 PROPERTIES
105 OUTPUT_NAME zlib-puff${zlib_puff_static_suffix})
106
107 if(ZLIB_PUFF_BUILD_TESTING)
108 enable_testing()
109
110 add_executable(puff-testStatic pufftest.c)
111
112 target_link_libraries(puff-testStatic
113 PRIVATE zlib-puffStatic)
114 add_test(NAME zlib_puff_testStatic
115 COMMAND ${CMAKE_COMMAND} -P
116 ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
117 "$<TARGET_FILE:puff-testStatic>"
118 "${CMAKE_CURRENT_SOURCE_DIR}")
119
120 if(GCOV_EXECUTABLE)
121 add_executable(puff-testStatic-coverage pufftest.c puff.c)
122
123 target_compile_options(puff-testStatic-coverage PRIVATE -coverage)
124
125 target_link_options(puff-testStatic-coverage PRIVATE -coverage)
126
127 add_test(NAME zlib_puff_testStatic_coverage
128 COMMAND ${CMAKE_COMMAND} -P
129 ${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
130 "$<TARGET_FILE:puff-testStatic-coverage>"
131 "${CMAKE_CURRENT_SOURCE_DIR}"
132 "${CMAKE_CURRENT_BINARY_DIR}"
133 ${GCOV_EXECUTABLE}
134 ${llvm_option})
135 endif(GCOV_EXECUTABLE)
136 endif(ZLIB_PUFF_BUILD_TESTING)
137endif(ZLIB_PUFF_BUILD_STATIC)
diff --git a/contrib/puff/bin-writer.c b/contrib/puff/bin-writer.c
new file mode 100644
index 0000000..cfd8306
--- /dev/null
+++ b/contrib/puff/bin-writer.c
@@ -0,0 +1,26 @@
1#include "stdio.h"
2#include "stdlib.h"
3
4/**
5 * Reads hexadecimal values from stdin and writes binary bytes to stdout.
6 * Accepts hex values separated by spaces, newlines, commas, etc.
7 * Handles both uppercase and lowercase hex digits.
8 */
9int main(void) {
10 char hexStr[3]; // Two hex digits + null terminator
11 int ch;
12
13 // Read characters until EOF
14 while((ch = getchar()) != EOF) {
15 hexStr[0] = (char)ch;
16 hexStr[1] = (char)getchar();
17 hexStr[2] = '\0'; // Null-terminate string
18 char *endptr;
19 unsigned char byte = (unsigned char)strtol(hexStr, &endptr, 16);
20 fwrite(&byte, 1, 1, stdout);
21 if((ch = getchar()) == EOF) // Read seaparating space
22 break;
23 }
24
25 return 0;
26}
diff --git a/contrib/puff/tester-cov.cmake b/contrib/puff/tester-cov.cmake
new file mode 100644
index 0000000..5dc9662
--- /dev/null
+++ b/contrib/puff/tester-cov.cmake
@@ -0,0 +1,56 @@
1cmake_minimum_required(VERSION 3.12...3.31)
2
3#CMAKE_ARGV0 = ${CMAKE_COMMAND}
4#CMAKE_ARGV1 = -P
5#CMAKE_ARGV2 = ${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
6#CMAKE_ARGV3 = "$<TARGET_FILE:puff-test-cov>"
7#CMAKE_ARGV4 = "${CMAKE_CURRENT_SOURCE_DIR}"
8#CMAKE_ARGV5 = "${CMAKE_CURRENT_BINARY_DIR}"
9#CMAKE_ARGV6 = GCOV_EXECUTABLE
10#CMAKE_ARGV7 = GCOV_EXECUTABLE
11
12function(puff_cov_test test_string expected_result)
13 execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append ${test_string}
14 COMMAND ${CMAKE_ARGV5}/bin-writer
15 COMMAND ${CMAKE_ARGV3}
16 RESULT_VARIABLE RESULT)
17
18 if(NOT RESULT EQUAL expected_result)
19 message(FATAL_ERROR "${RESULT} not matching ${expected_result}")
20 endif(NOT RESULT EQUAL expected_result)
21endfunction(puff_cov_test test_string expected_result)
22
23execute_process(COMMAND ${CMAKE_ARGV3} -w ${CMAKE_ARGV4}/zeros.raw)
24
25puff_cov_test("04" "2")
26puff_cov_test("00" "2")
27puff_cov_test("00 00 00 00 00" "254")
28puff_cov_test("00 01 00 fe ff" "2")
29
30execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append "01 01 00 fe ff 0a"
31 COMMAND ${CMAKE_ARGV5}/bin-writer
32 COMMAND ${CMAKE_ARGV3})
33
34puff_cov_test("02 7e ff ff" "246")
35puff_cov_test("02" "2")
36puff_cov_test("04 80 49 92 24 49 92 24 0f b4 ff ff c3 04" "2")
37puff_cov_test("04 80 49 92 24 49 92 24 71 ff ff 93 11 00" "249")
38puff_cov_test("04 c0 81 08 00 00 00 00 20 7f eb 0b 00 00" "246")
39
40execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append "0b 00 00"
41 COMMAND ${CMAKE_ARGV5}/bin-writer
42 COMMAND ${CMAKE_ARGV3})
43
44puff_cov_test("1a 07" "246")
45puff_cov_test("0c c0 81 00 00 00 00 00 90 ff 6b 04" "245")
46
47execute_process(COMMAND ${CMAKE_ARGV3} -f ${CMAKE_ARGV4}/zeros.raw)
48
49puff_cov_test("fc 00 00" "253")
50puff_cov_test("04 00 fe ff" "252")
51puff_cov_test("04 00 24 49" "251")
52puff_cov_test("04 80 49 92 24 49 92 24 0f b4 ff ff c3 84" "248")
53puff_cov_test("04 00 24 e9 ff ff" "250")
54puff_cov_test("04 00 24 e9 ff 6d" "247")
55
56execute_process(COMMAND ${CMAKE_ARGV6} ${CMAKE_ARGV7} -n puff.c.gcno)
diff --git a/contrib/puff/tester.cmake b/contrib/puff/tester.cmake
new file mode 100644
index 0000000..d29dc5c
--- /dev/null
+++ b/contrib/puff/tester.cmake
@@ -0,0 +1,15 @@
1cmake_minimum_required(VERSION 3.12...3.31)
2
3#CMAKE_ARGV0 = ${CMAKE_COMMAND}
4#CMAKE_ARGV1 = -P
5#CMAKE_ARGV2 = ${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
6#CMAKE_ARGV3 = "$<TARGET_FILE:puf-test>"
7#CMAKE_ARGV4 = "${CMAKE_CURRENT_SOURCE_DIR}"
8
9execute_process(COMMAND ${CMAKE_ARGV3}
10 INPUT_FILE "${CMAKE_ARGV4}/zeros.raw"
11 RESULT_VARIABLE RESULT)
12
13if(RESULT)
14 message(FATAL_ERROR "Command exitited with: ${RESULT}")
15endif(RESULT)