mirror of
https://git.tukaani.org/xz.git
synced 2025-12-24 06:18:44 +00:00
Now "crc32" is in the list too for completeness but it doesn't actually have any effect. The description of the cache variable says that "crc32 is always built" so it should be clear enough.
198 lines
6.9 KiB
CMake
198 lines
6.9 KiB
CMake
# SPDX-License-Identifier: 0BSD
|
|
|
|
#############################################################################
|
|
#
|
|
# Optional file to be included by the top-level CMakeLists.txt to run tests
|
|
#
|
|
# The CMake rules for the tests are in this separate optional file so
|
|
# that it's trivial to just delete the whole "tests" directory and still
|
|
# get an otherwise normal CMake-based build. This way it's easy to ensure
|
|
# that nothing in the "tests" directory can affect the build process.
|
|
#
|
|
# Author: Lasse Collin
|
|
#
|
|
#############################################################################
|
|
|
|
include(CTest)
|
|
|
|
if(BUILD_TESTING)
|
|
#################
|
|
# liblzma tests #
|
|
#################
|
|
|
|
set(LIBLZMA_TESTS
|
|
test_bcj_exact_size
|
|
test_block_header
|
|
test_check
|
|
test_filter_flags
|
|
test_filter_str
|
|
test_hardware
|
|
test_index
|
|
test_index_hash
|
|
test_lzip_decoder
|
|
test_memlimit
|
|
test_stream_flags
|
|
test_vli
|
|
)
|
|
|
|
# MicroLZMA encoder is needed for both encoder and decoder tests.
|
|
# If MicroLZMA decoder is not configured but LZMA1 decoder is, then
|
|
# test_microlzma will fail to compile because this configuration is
|
|
# not possible in the Autotools build, so the test was not made to
|
|
# support it since it would have required additional changes.
|
|
if (XZ_MICROLZMA_ENCODER AND (XZ_MICROLZMA_DECODER
|
|
OR NOT "lzma1" IN_LIST DECODERS))
|
|
list(APPEND LIBLZMA_TESTS test_microlzma)
|
|
endif()
|
|
|
|
foreach(TEST IN LISTS LIBLZMA_TESTS)
|
|
add_executable("${TEST}" "tests/${TEST}.c")
|
|
|
|
target_include_directories("${TEST}" PRIVATE
|
|
src/common
|
|
src/liblzma/api
|
|
src/liblzma
|
|
)
|
|
|
|
target_link_libraries("${TEST}" PRIVATE liblzma)
|
|
|
|
# Put the test programs into their own subdirectory so they don't
|
|
# pollute the top-level dir which might contain xz and xzdec.
|
|
set_target_properties("${TEST}" PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tests_bin"
|
|
)
|
|
|
|
add_test(NAME "${TEST}"
|
|
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/tests_bin/${TEST}"
|
|
)
|
|
|
|
# Set srcdir environment variable so that the tests find their
|
|
# input files from the source tree.
|
|
#
|
|
# Set the return code for skipped tests to match Automake convention.
|
|
set_tests_properties("${TEST}" PROPERTIES
|
|
ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}/tests"
|
|
SKIP_RETURN_CODE 77
|
|
)
|
|
endforeach()
|
|
|
|
|
|
###########################
|
|
# Command line tool tests #
|
|
###########################
|
|
|
|
# Since the CMake-based build doesn't use config.h, the test scripts
|
|
# cannot grep the contents of config.h to know which features have
|
|
# been disabled. When config.h is missing, they assume that all
|
|
# features are enabled. Thus, check if certain groups of features have
|
|
# been disabled and then possibly skip some of the tests entirely instead
|
|
# of letting them fail.
|
|
set(SUPPORTED_FILTERS_SORTED "${SUPPORTED_FILTERS}")
|
|
list(SORT SUPPORTED_FILTERS_SORTED)
|
|
|
|
set(ENCODERS_SORTED "${XZ_ENCODERS}")
|
|
list(SORT ENCODERS_SORTED)
|
|
|
|
if("${ENCODERS_SORTED}" STREQUAL "${SUPPORTED_FILTERS_SORTED}")
|
|
set(HAVE_ALL_ENCODERS ON)
|
|
else()
|
|
set(HAVE_ALL_ENCODERS OFF)
|
|
endif()
|
|
|
|
set(DECODERS_SORTED "${XZ_DECODERS}")
|
|
list(SORT DECODERS_SORTED)
|
|
|
|
if("${DECODERS_SORTED}" STREQUAL "${SUPPORTED_FILTERS_SORTED}")
|
|
set(HAVE_ALL_DECODERS ON)
|
|
else()
|
|
set(HAVE_ALL_DECODERS OFF)
|
|
endif()
|
|
|
|
set(SUPPORTED_CHECKS_SORTED "${SUPPORTED_CHECKS}")
|
|
list(SORT SUPPORTED_CHECKS_SORTED)
|
|
|
|
set(XZ_CHECKS_SORTED "${XZ_CHECKS}")
|
|
list(SORT XZ_CHECKS_SORTED)
|
|
|
|
if("${SUPPORTED_CHECKS_SORTED}" STREQUAL "${XZ_CHECKS_SORTED}")
|
|
set(HAVE_ALL_CHECKS ON)
|
|
else()
|
|
set(HAVE_ALL_CHECKS OFF)
|
|
endif()
|
|
|
|
# test_scripts.sh only needs LZMA2 decoder and CRC32.
|
|
if(UNIX AND HAVE_DECODERS)
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_scripts")
|
|
|
|
add_test(NAME test_scripts.sh
|
|
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_scripts.sh" ".."
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_scripts"
|
|
)
|
|
|
|
set_tests_properties(test_scripts.sh PROPERTIES
|
|
ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}/tests"
|
|
SKIP_RETURN_CODE 77
|
|
)
|
|
endif()
|
|
|
|
# test_suffix.sh only needs LZMA2 encoder and decoder.
|
|
if(UNIX AND HAVE_ENCODERS AND HAVE_DECODERS)
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_suffix")
|
|
|
|
add_test(NAME test_suffix.sh
|
|
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_suffix.sh" ".."
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_suffix"
|
|
)
|
|
|
|
set_tests_properties(test_suffix.sh PROPERTIES
|
|
SKIP_RETURN_CODE 77
|
|
)
|
|
endif()
|
|
|
|
# The test_compress.sh based tests compress and decompress using different
|
|
# filters so run it only if all encoders and decoders have been enabled.
|
|
if(UNIX AND HAVE_ALL_ENCODERS AND HAVE_ALL_DECODERS)
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_compress")
|
|
|
|
add_executable(create_compress_files tests/create_compress_files.c)
|
|
target_include_directories(create_compress_files PRIVATE src/common)
|
|
set_target_properties(create_compress_files PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY test_compress)
|
|
|
|
foreach(T compress_generated_abc
|
|
compress_generated_text
|
|
compress_generated_random)
|
|
add_test(NAME "test_${T}"
|
|
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_compress.sh"
|
|
"${T}" ".."
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_compress"
|
|
)
|
|
|
|
set_tests_properties("test_${T}" PROPERTIES
|
|
ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}/tests"
|
|
SKIP_RETURN_CODE 77
|
|
)
|
|
endforeach()
|
|
endif()
|
|
|
|
# test_files.sh decompresses files that use different filters and
|
|
# check types so run it only if support for all of them has been enabled.
|
|
if(UNIX AND HAVE_ALL_DECODERS AND HAVE_ALL_CHECKS AND XZ_LZIP_DECODER)
|
|
# test_files.sh doesn't make any temporary files but it
|
|
# must not be run at the top-level build directory because
|
|
# it checks if ../config.h exists. We don't want to read
|
|
# files outside the build directory!
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_files")
|
|
|
|
add_test(NAME test_files.sh
|
|
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_files.sh" ".."
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test_files"
|
|
)
|
|
|
|
set_tests_properties(test_files.sh PROPERTIES
|
|
ENVIRONMENT "srcdir=${CMAKE_CURRENT_SOURCE_DIR}/tests"
|
|
SKIP_RETURN_CODE 77
|
|
)
|
|
endif()
|
|
endif()
|