blob: 8f0bd29f04187059bf03a86ddca0a5cb7dfc2bfc [file] [log] [blame]
check_function_exists(getopt HAVE_GETOPT)
set(TEST_PROGRAMS
add_from_filep
can_clone_file
fopen_unchanged
fseek
fuzz_main
nonrandomopentest
liboverride-test
)
set(GETOPT_USERS
fread
tryopen
)
set(HOLE_USERS
hole
ziptool_regress
)
set(ZIP_PROGRAMS ${TEST_PROGRAMS} ${GETOPT_USERS} ${HOLE_USERS})
foreach(PROGRAM IN LISTS ZIP_PROGRAMS)
add_executable(${PROGRAM} ${PROGRAM}.c)
target_include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR})
target_link_libraries(${PROGRAM} zip)
endforeach()
# both programs using source_hole.c also use getopt
if(NOT HAVE_GETOPT)
foreach(PROGRAM IN LISTS GETOPT_USERS HOLE_USERS)
target_sources(${PROGRAM} PRIVATE ../src/getopt.c)
target_include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/src)
endforeach()
endif(NOT HAVE_GETOPT)
foreach(PROGRAM IN LISTS HOLE_USERS)
target_sources(${PROGRAM} PRIVATE source_hole.c)
endforeach()
# for including ziptool.c
target_include_directories(ziptool_regress PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/src)
set(DL_USERS
# malloc
nonrandomopen
liboverride
)
foreach(PROGRAM IN LISTS DL_USERS)
add_library(${PROGRAM} MODULE ${PROGRAM}.c)
target_include_directories(${PROGRAM} PRIVATE BEFORE ${PROJECT_SOURCE_DIR}/lib ${PROJECT_BINARY_DIR})
endforeach()
add_custom_target(cleanup
COMMAND ${CMAKE_COMMAND} -DDIR=${PROJECT_BINARY_DIR}/regress -P ${PROJECT_SOURCE_DIR}/regress/cleanup.cmake
)
add_custom_target(testinput
ALL
VERBATIM
COMMAND ${CMAKE_COMMAND} -E tar x ${PROJECT_SOURCE_DIR}/regress/manyfiles-zip.zip
COMMAND ${CMAKE_COMMAND} -E tar x ${PROJECT_SOURCE_DIR}/regress/bigzero-zip.zip
DEPENDS ${PROJECT_SOURCE_DIR}/regress/manyfiles-zip.zip ${PROJECT_SOURCE_DIR}/regress/bigzero-zip.zip
)
set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
bigzero.zip
manyfiles-133000.zip
manyfiles-65536.zip
manyfiles-fewer.zip
manyfiles-more.zip
manyfiles-zip64-modulo.zip
manyfiles-zip64.zip
manyfiles.zip
)
set(path "$<TARGET_FILE_DIR:zip>;$ENV{PATH}")
if (TARGET zlib)
set(path "$<TARGET_FILE_DIR:zlib>;${path}")
endif()
string(REPLACE ";" "\\;" path "${path}")
set(ENV{srcdir} ${PROJECT_SOURCE_DIR}/regress)
file(GLOB EXTRA_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/*.test)
foreach(FULL_CASE IN LISTS EXTRA_TESTS)
get_filename_component(CASE ${FULL_CASE} NAME)
add_test(NAME ${CASE} COMMAND ${PERL_EXECUTABLE} ${PROJECT_BINARY_DIR}/regress/runtest -v --bin-sub-directory $<CONFIG> ${PROJECT_SOURCE_DIR}/regress/${CASE})
set_tests_properties(${CASE} PROPERTIES SKIP_RETURN_CODE 77)
set_tests_properties(${CASE} PROPERTIES ENVIRONMENT "PATH=${path}")
endforeach()
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})