mirror of
https://github.com/madler/zlib.git
synced 2026-01-26 16:19:09 +00:00
CMake: Added contrib/puff.
This commit is contained in:
parent
89889debe3
commit
fb0479a8bd
@ -37,3 +37,4 @@ zlib_add_contrib_lib(ADA "Ada bindings" ada)
|
||||
zlib_add_contrib_lib(BLAST "blast binary" blast)
|
||||
zlib_add_contrib_lib(IOSTREAM3 "IOStream C++ bindings V3" iostream3)
|
||||
zlib_add_contrib_lib(MINIZIP "minizip library" minizip)
|
||||
zlib_add_contrib_lib(PUFF "puff decompress library" puff)
|
||||
|
||||
137
contrib/puff/CMakeLists.txt
Normal file
137
contrib/puff/CMakeLists.txt
Normal file
@ -0,0 +1,137 @@
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
|
||||
project(
|
||||
iostreamsV3
|
||||
VERSION 1.0.0
|
||||
LANGUAGES C
|
||||
DESCRIPTION "A library for decompressing deflate with very little footprint"
|
||||
HOMEPAGE_URL "https://www.zlib.net")
|
||||
|
||||
option(ZLIB_PUFF_BUILD_SHARED "Enable building blast shared library" ON)
|
||||
option(ZLIB_PUFF_BUILD_STATIC "Enable building blast static library" ON)
|
||||
option(ZLIB_PUFF_BUILD_TESTING "Enable building tests for blast" ON)
|
||||
|
||||
if(NOT DEFINED ZLIB_BUILD_PUFF)
|
||||
if(ZLIB_PUFF_BUILD_SHARED)
|
||||
list(APPEND REQUIRED_COMPONENTS "shared")
|
||||
endif(ZLIB_PUFF_BUILD_SHARED)
|
||||
|
||||
if(ZLIB_PUFF_BUILD_STATIC)
|
||||
list(APPEND REQUIRED_COMPONENTS "static")
|
||||
endif(ZLIB_PUFF_BUILD_STATIC)
|
||||
|
||||
find_package(ZLIB REQUIRED COMPONENTS ${REQUIRED_COMPONENTS} CONFIG)
|
||||
endif(NOT DEFINED ZLIB_BUILD_PUFF)
|
||||
|
||||
if(WIN32 OR CYGWIN)
|
||||
set(zlibpuff_static_suffix "s")
|
||||
set(CMAKE_DEBUG_POSTFIX "d")
|
||||
endif(WIN32 OR CYGWIN)
|
||||
|
||||
if(ZLIB_PUFF_BUILD_TESTING)
|
||||
add_executable(bin-writer bin-writer.c)
|
||||
|
||||
if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR
|
||||
${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||
set(CFLAGS_OLD ${CMAKE_C_FLAGS})
|
||||
set(CMAKE_C_FLAGS
|
||||
""
|
||||
CACHE STRING "" FORCE)
|
||||
|
||||
if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
|
||||
find_program(GCOV_EXECUTABLE gcov)
|
||||
endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
|
||||
|
||||
if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||
set(llvm_names llvm_cov)
|
||||
list(APPEND llvm_names llvm-cov)
|
||||
|
||||
foreach(ver RANGE 11 99)
|
||||
list(APPEND llvm_names llvm-cov-${ver})
|
||||
endforeach(ver RANGE 11 99)
|
||||
|
||||
find_program(GCOV_EXECUTABLE NAMES ${llvm_names})
|
||||
set(llvm_option "gcov")
|
||||
endif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||
endif(${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR
|
||||
${CMAKE_C_COMPILER_ID} STREQUAL "Clang")
|
||||
endif(ZLIB_PUFF_BUILD_TESTING)
|
||||
|
||||
if(ZLIB_PUFF_BUILD_SHARED)
|
||||
add_library(zlib-puff SHARED
|
||||
puff.c
|
||||
puff.h)
|
||||
|
||||
if(ZLIB_PUFF_BUILD_TESTING)
|
||||
enable_testing()
|
||||
|
||||
add_executable(puff-test pufftest.c)
|
||||
|
||||
target_link_libraries(puff-test
|
||||
PRIVATE zlib-puff)
|
||||
|
||||
add_test(NAME zlib_puff_test
|
||||
COMMAND ${CMAKE_COMMAND} -P
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
|
||||
"$<TARGET_FILE:puff-test>"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
if(GCOV_EXECUTABLE)
|
||||
add_executable(puff-test-coverage pufftest.c puff.c)
|
||||
|
||||
target_compile_options(puff-test-coverage PRIVATE -coverage)
|
||||
|
||||
target_link_options(puff-test-coverage PRIVATE -coverage)
|
||||
|
||||
add_test(NAME zlib_puff_test_coverage
|
||||
COMMAND ${CMAKE_COMMAND} -P
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
|
||||
"$<TARGET_FILE:puff-test-coverage>"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
${GCOV_EXECUTABLE}
|
||||
${llvm_option})
|
||||
endif(GCOV_EXECUTABLE)
|
||||
endif(ZLIB_PUFF_BUILD_TESTING)
|
||||
endif(ZLIB_PUFF_BUILD_SHARED)
|
||||
|
||||
if(ZLIB_PUFF_BUILD_STATIC)
|
||||
add_library(zlib-puffStatic STATIC
|
||||
puff.c
|
||||
puff.h)
|
||||
|
||||
set_target_properties(zlib-puffStatic
|
||||
PROPERTIES
|
||||
OUTPUT_NAME zlib-puff${zlib_puff_static_suffix})
|
||||
|
||||
if(ZLIB_PUFF_BUILD_TESTING)
|
||||
enable_testing()
|
||||
|
||||
add_executable(puff-testStatic pufftest.c)
|
||||
|
||||
target_link_libraries(puff-testStatic
|
||||
PRIVATE zlib-puffStatic)
|
||||
add_test(NAME zlib_puff_testStatic
|
||||
COMMAND ${CMAKE_COMMAND} -P
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tester.cmake
|
||||
"$<TARGET_FILE:puff-testStatic>"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
if(GCOV_EXECUTABLE)
|
||||
add_executable(puff-testStatic-coverage pufftest.c puff.c)
|
||||
|
||||
target_compile_options(puff-testStatic-coverage PRIVATE -coverage)
|
||||
|
||||
target_link_options(puff-testStatic-coverage PRIVATE -coverage)
|
||||
|
||||
add_test(NAME zlib_puff_testStatic_coverage
|
||||
COMMAND ${CMAKE_COMMAND} -P
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
|
||||
"$<TARGET_FILE:puff-testStatic-coverage>"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}"
|
||||
${GCOV_EXECUTABLE}
|
||||
${llvm_option})
|
||||
endif(GCOV_EXECUTABLE)
|
||||
endif(ZLIB_PUFF_BUILD_TESTING)
|
||||
endif(ZLIB_PUFF_BUILD_STATIC)
|
||||
26
contrib/puff/bin-writer.c
Normal file
26
contrib/puff/bin-writer.c
Normal file
@ -0,0 +1,26 @@
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
/**
|
||||
* Reads hexadecimal values from stdin and writes binary bytes to stdout.
|
||||
* Accepts hex values separated by spaces, newlines, commas, etc.
|
||||
* Handles both uppercase and lowercase hex digits.
|
||||
*/
|
||||
int main(void) {
|
||||
char hexStr[3]; // Two hex digits + null terminator
|
||||
int ch;
|
||||
|
||||
// Read characters until EOF
|
||||
while((ch = getchar()) != EOF) {
|
||||
hexStr[0] = (char)ch;
|
||||
hexStr[1] = (char)getchar();
|
||||
hexStr[2] = '\0'; // Null-terminate string
|
||||
char *endptr;
|
||||
unsigned char byte = (unsigned char)strtol(hexStr, &endptr, 16);
|
||||
fwrite(&byte, 1, 1, stdout);
|
||||
if((ch = getchar()) == EOF) // Read seaparating space
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
56
contrib/puff/tester-cov.cmake
Normal file
56
contrib/puff/tester-cov.cmake
Normal file
@ -0,0 +1,56 @@
|
||||
cmake_minimum_required(VERSION 3.12...3.31)
|
||||
|
||||
#CMAKE_ARGV0 = ${CMAKE_COMMAND}
|
||||
#CMAKE_ARGV1 = -P
|
||||
#CMAKE_ARGV2 = ${CMAKE_CURRENT_SOURCE_DIR}/tester-cov.cmake
|
||||
#CMAKE_ARGV3 = "$<TARGET_FILE:puff-test-cov>"
|
||||
#CMAKE_ARGV4 = "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
#CMAKE_ARGV5 = "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
#CMAKE_ARGV6 = GCOV_EXECUTABLE
|
||||
#CMAKE_ARGV7 = GCOV_EXECUTABLE
|
||||
|
||||
function(puff_cov_test test_string expected_result)
|
||||
execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append ${test_string}
|
||||
COMMAND ${CMAKE_ARGV5}/bin-writer
|
||||
COMMAND ${CMAKE_ARGV3}
|
||||
RESULT_VARIABLE RESULT)
|
||||
|
||||
if(NOT RESULT EQUAL expected_result)
|
||||
message(FATAL_ERROR "${RESULT} not matching ${expected_result}")
|
||||
endif(NOT RESULT EQUAL expected_result)
|
||||
endfunction(puff_cov_test test_string expected_result)
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV3} -w ${CMAKE_ARGV4}/zeros.raw)
|
||||
|
||||
puff_cov_test("04" "2")
|
||||
puff_cov_test("00" "2")
|
||||
puff_cov_test("00 00 00 00 00" "254")
|
||||
puff_cov_test("00 01 00 fe ff" "2")
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append "01 01 00 fe ff 0a"
|
||||
COMMAND ${CMAKE_ARGV5}/bin-writer
|
||||
COMMAND ${CMAKE_ARGV3})
|
||||
|
||||
puff_cov_test("02 7e ff ff" "246")
|
||||
puff_cov_test("02" "2")
|
||||
puff_cov_test("04 80 49 92 24 49 92 24 0f b4 ff ff c3 04" "2")
|
||||
puff_cov_test("04 80 49 92 24 49 92 24 71 ff ff 93 11 00" "249")
|
||||
puff_cov_test("04 c0 81 08 00 00 00 00 20 7f eb 0b 00 00" "246")
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV0} -E echo_append "0b 00 00"
|
||||
COMMAND ${CMAKE_ARGV5}/bin-writer
|
||||
COMMAND ${CMAKE_ARGV3})
|
||||
|
||||
puff_cov_test("1a 07" "246")
|
||||
puff_cov_test("0c c0 81 00 00 00 00 00 90 ff 6b 04" "245")
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV3} -f ${CMAKE_ARGV4}/zeros.raw)
|
||||
|
||||
puff_cov_test("fc 00 00" "253")
|
||||
puff_cov_test("04 00 fe ff" "252")
|
||||
puff_cov_test("04 00 24 49" "251")
|
||||
puff_cov_test("04 80 49 92 24 49 92 24 0f b4 ff ff c3 84" "248")
|
||||
puff_cov_test("04 00 24 e9 ff ff" "250")
|
||||
puff_cov_test("04 00 24 e9 ff 6d" "247")
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV6} ${CMAKE_ARGV7} -n puff.c.gcno)
|
||||
15
contrib/puff/tester.cmake
Normal file
15
contrib/puff/tester.cmake
Normal file
@ -0,0 +1,15 @@
|
||||
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:puf-test>"
|
||||
#CMAKE_ARGV4 = "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
|
||||
execute_process(COMMAND ${CMAKE_ARGV3}
|
||||
INPUT_FILE "${CMAKE_ARGV4}/zeros.raw"
|
||||
RESULT_VARIABLE RESULT)
|
||||
|
||||
if(RESULT)
|
||||
message(FATAL_ERROR "Command exitited with: ${RESULT}")
|
||||
endif(RESULT)
|
||||
Loading…
x
Reference in New Issue
Block a user