summaryrefslogtreecommitdiff
path: root/neozip/test/pigz/CMakeLists.txt
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 19:56:09 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 19:56:09 +0300
commit7fb132859fda54aa96bc9dd46d302b343eeb5a02 (patch)
treeb43ae77d7451fb470a260c03349a1caf2846c5e5 /neozip/test/pigz/CMakeLists.txt
parentb1e34e861b5d732afe828d58aad2c638135061fd (diff)
parentc2712b8a345191f6ed79558c089777df94590087 (diff)
downloadProject-Tick-7fb132859fda54aa96bc9dd46d302b343eeb5a02.tar.gz
Project-Tick-7fb132859fda54aa96bc9dd46d302b343eeb5a02.zip
Add 'neozip/' from commit 'c2712b8a345191f6ed79558c089777df94590087'
git-subtree-dir: neozip git-subtree-mainline: b1e34e861b5d732afe828d58aad2c638135061fd git-subtree-split: c2712b8a345191f6ed79558c089777df94590087
Diffstat (limited to 'neozip/test/pigz/CMakeLists.txt')
-rw-r--r--neozip/test/pigz/CMakeLists.txt209
1 files changed, 209 insertions, 0 deletions
diff --git a/neozip/test/pigz/CMakeLists.txt b/neozip/test/pigz/CMakeLists.txt
new file mode 100644
index 0000000000..42f1f43d47
--- /dev/null
+++ b/neozip/test/pigz/CMakeLists.txt
@@ -0,0 +1,209 @@
+# CMakeLists.txt -- Build madler/pigz against zlib variant
+
+# Copyright (C) 2021 Nathan Moinvaziri
+# Licensed under the Zlib license, see LICENSE.md for details
+
+# By default pigz will be linked against the system zlib and
+# pthread libraries if installed.
+
+# For compilation on Windows download and use shim:
+# https://github.com/zlib-ng/pigzbench/tree/master/pigz/win
+
+# Optional Variables
+# WITH_CODE_COVERAGE - Enable code coverage reporting
+# WITH_THREADS - Enable threading support
+# PIGZ_ENABLE_TESTS - Enable adding unit tests
+# PIGZ_VERSION - Set the version of pigz to build
+# ZLIB_ROOT - Path to the zlib source directory
+# PTHREADS4W_ROOT - Path to pthreads4w source directory on Windows.
+# If not specified then threading will be disabled.
+
+cmake_minimum_required(VERSION 3.14...4.2.1)
+
+include(CheckCCompilerFlag)
+include(FeatureSummary)
+include(FetchContent)
+
+include(../../cmake/detect-coverage.cmake)
+
+option(WITH_CODE_COVERAGE "Enable code coverage reporting" OFF)
+option(WITH_THREADS "Enable threading support" ON)
+option(PIGZ_ENABLE_TESTS "Build unit tests" ON)
+option(PIGZ_VERSION "Set the version of pigz to build" "")
+
+project(pigz LANGUAGES C)
+
+# Set code coverage compiler flags
+if(WITH_CODE_COVERAGE)
+ add_code_coverage()
+endif()
+
+# Compiler definitions
+if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
+ add_definitions(-fno-caret-diagnostics)
+elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5.0)
+ add_definitions(-Wno-unused-result)
+ endif()
+ if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8.0)
+ add_definitions(-fno-diagnostics-show-caret)
+ endif()
+elseif(WIN32)
+ add_definitions(-D_TIMESPEC_DEFINED)
+ if(MSVC)
+ add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
+ endif()
+endif()
+
+# Fetch pigz source code from official repository
+if(PIGZ_VERSION STREQUAL "")
+ set(PIGZ_TAG master)
+else()
+ set(PIGZ_TAG ${PIGZ_VERSION})
+endif()
+FetchContent_Declare(pigz
+ GIT_REPOSITORY https://github.com/madler/pigz.git
+ GIT_TAG ${PIGZ_TAG})
+
+FetchContent_MakeAvailable(pigz)
+
+set(PIGZ_SRCS
+ ${pigz_SOURCE_DIR}/pigz.c
+ ${pigz_SOURCE_DIR}/try.c)
+
+set(PIGZ_HDRS
+ ${pigz_SOURCE_DIR}/try.h)
+
+add_executable(${PROJECT_NAME} ${PIGZ_SRCS} ${PIGZ_HDRS})
+add_definitions(-DNOZOPFLI)
+if(WIN32)
+ target_include_directories(${PROJECT_NAME} PRIVATE win)
+endif()
+
+# Find and link against pthreads or pthreads4w
+if(WITH_THREADS)
+ if(WIN32)
+ if(DEFINED PTHREADS4W_ROOT)
+ set(CLEANUP_STYLE VC)
+ set(PTHREADS4W_VERSION 3)
+
+ add_subdirectory(${PTHREADS4W_ROOT} ${PTHREADS4W_ROOT} EXCLUDE_FROM_ALL)
+ target_link_libraries(${PROJECT_NAME} pthreadVC3)
+ target_include_directories(${PROJECT_NAME} PRIVATE ${PTHREADS4W_ROOT})
+ else()
+ message(WARNING "Missing pthreads4w root directory")
+ set(WITH_THREADS OFF)
+ endif()
+ else()
+ find_package(Threads REQUIRED)
+ target_link_libraries(${PROJECT_NAME} Threads::Threads)
+ if(NOT APPLE)
+ target_link_libraries(${PROJECT_NAME} m)
+ endif()
+ endif()
+endif()
+
+# Disable threading support
+if(NOT WITH_THREADS)
+ add_definitions(-DNOTHREAD)
+else()
+ set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY SOURCES
+ ${pigz_SOURCE_DIR}/yarn.c
+ ${pigz_SOURCE_DIR}/yarn.h)
+endif()
+
+# Find and link against zlib
+if(NOT DEFINED ZLIB_ROOT)
+ find_package(Zlib REQUIRED)
+endif()
+
+set(ZLIB_ALIASES ON)
+set(ZLIB_COMPAT ON)
+set(ZLIB_ENABLE_TESTS OFF)
+
+add_subdirectory(${ZLIB_ROOT} ${CMAKE_CURRENT_BINARY_DIR}/zlib EXCLUDE_FROM_ALL)
+
+if(NOT DEFINED BUILD_SHARED_LIBS OR NOT BUILD_SHARED_LIBS)
+ set(ZLIB_TARGET zlibstatic)
+else()
+ set(ZLIB_TARGET zlib)
+endif()
+
+target_include_directories(${PROJECT_NAME} PRIVATE ${ZLIB_ROOT} ${CMAKE_CURRENT_BINARY_DIR}/zlib)
+target_link_libraries(${PROJECT_NAME} ${ZLIB_TARGET})
+
+if(NOT SKIP_INSTALL_BINARIES AND NOT SKIP_INSTALL_ALL)
+ install(TARGETS ${PROJECT_NAME} DESTINATION "bin")
+endif()
+
+# Add unit tests
+if(PIGZ_ENABLE_TESTS)
+ enable_testing()
+
+ set(PIGZ_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:pigz>)
+
+ macro(test_pigz name path)
+ # Construct compression arguments for pigz
+ set(compress_args -k -c)
+ foreach(extra_arg IN ITEMS "${ARGN}")
+ list(APPEND compress_args ${extra_arg})
+ endforeach()
+
+ # Create unique friendly string for test
+ string(REPLACE ";" "" arg_list "${ARGN}")
+ string(REPLACE " " "" arg_list "${arg_list}")
+ string(REPLACE "-" "" arg_list "${arg_list}")
+
+ set(test_id pigz-${name}-${arg_list})
+
+ if(NOT TEST ${test_id})
+ add_test(NAME ${test_id}
+ COMMAND ${CMAKE_COMMAND}
+ "-DTARGET=${PIGZ_COMMAND}"
+ "-DCOMPRESS_ARGS=${compress_args}"
+ "-DDECOMPRESS_ARGS=-d;-c"
+ -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}
+ -DTEST_NAME=${test_id}
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/compress-and-verify.cmake)
+ endif()
+ endmacro()
+
+ set(TEST_CONFIGS
+ -U # RLE compression
+ #-H # Z_HUFFMAN_ONLY (broken in 2.6)
+ -0 # No compression
+ -1 # Deflate quick
+ -4 # Deflate medium (lazy matches)
+ -6 # Deflate medium
+ -9 # Deflate slow
+ )
+
+ file(GLOB_RECURSE TEST_FILE_PATHS
+ LIST_DIRECTORIES false
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../data/*)
+
+ foreach(TEST_FILE_PATH ${TEST_FILE_PATHS})
+ if("${TEST_FILE_PATH}" MATCHES ".gz$" OR "${TEST_FILE_PATH}" MATCHES ".out$" OR
+ "${TEST_FILE_PATH}" MATCHES "/.git/" OR "${TEST_FILE_PATH}" MATCHES ".md$")
+ continue()
+ endif()
+ foreach(TEST_CONFIG ${TEST_CONFIGS})
+ get_filename_component(TEST_NAME ${TEST_FILE_PATH} NAME)
+ if (TEST_NAME STREQUAL "")
+ continue()
+ endif()
+ test_pigz(${TEST_NAME} ${TEST_FILE_PATH} ${TEST_CONFIG})
+ endforeach()
+ endforeach()
+
+ set(GH979_COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:pigz>
+ -d -k -f ${CMAKE_CURRENT_SOURCE_DIR}/../GH-979/pigz-2.6.tar.gz)
+ add_test(NAME GH-979 COMMAND ${GH979_COMMAND})
+endif()
+
+add_feature_info(WITH_CODE_COVERAGE WITH_CODE_COVERAGE "Enable code coverage reporting")
+add_feature_info(WITH_THREADS WITH_THREADS "Enable threading support")
+add_feature_info(PIGZ_ENABLE_TESTS PIGZ_ENABLE_TESTS "Build unit tests")
+
+FEATURE_SUMMARY(WHAT ALL INCLUDE_QUIET_PACKAGES)