#
# Generate list.h
#
-MACRO (GENERATE_LIST_H _listfile _cmlist __list_sources)
+MACRO (GENERATE_LIST_H _listfile _cmlist _target __list_sources)
SET(_argv ${ARGV})
- # Remove _listfile and _cmlist from _argv
- LIST(REMOVE_AT _argv 0 1)
- IF (NOT EXISTS "${_listfile}" OR
- ${_cmlist} IS_NEWER_THAN "${_listfile}")
-
- MESSAGE(STATUS "Generating ${_listfile}")
- FILE(WRITE ${_listfile} "")
- FOREACH (testfile ${_argv})
- IF (testfile MATCHES "^test_[^/]+[.]c$")
- FILE(STRINGS ${testfile} testvar REGEX "^DEFINE_TEST")
- FOREACH (deftest ${testvar})
- FILE(APPEND ${_listfile} "${deftest}\n")
- ENDFOREACH (deftest)
- ENDIF (testfile MATCHES "^test_[^/]+[.]c$")
- ENDFOREACH (testfile)
-
- ENDIF (NOT EXISTS "${_listfile}" OR
- ${_cmlist} IS_NEWER_THAN "${_listfile}")
+ # Remove _listfile, _cmlist, and _target from _argv
+ LIST(REMOVE_AT _argv 0 1 2)
+ # Convert source paths to absolute so discover_tests.cmake can find them
+ # regardless of the working directory when cmake -P runs.
+ SET(_gl_abs_sources "")
+ FOREACH(_gl_src ${_argv})
+ IF(IS_ABSOLUTE "${_gl_src}")
+ LIST(APPEND _gl_abs_sources "${_gl_src}")
+ ELSE()
+ LIST(APPEND _gl_abs_sources "${CMAKE_CURRENT_SOURCE_DIR}/${_gl_src}")
+ ENDIF()
+ ENDFOREACH()
+ # Stamp out discover_tests.cmake with source list and output path baked in.
+ SET(SOURCES "${_gl_abs_sources}")
+ SET(OUTPUT "${_listfile}")
+ CONFIGURE_FILE(
+ ${CMAKE_SOURCE_DIR}/build/cmake/discover_tests.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/discover_tests.cmake
+ @ONLY)
+ UNSET(SOURCES)
+ UNSET(OUTPUT)
+ # list.h is regenerated at build time whenever any test .c file changes.
+ ADD_CUSTOM_COMMAND(
+ OUTPUT "${_listfile}"
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/discover_tests.cmake
+ DEPENDS ${_gl_abs_sources}
+ COMMENT "Generating ${_listfile}"
+ VERBATIM)
+ # Attaching list.h to the target tells CMake to build it before compiling.
+ TARGET_SOURCES(${_target} PRIVATE "${_listfile}")
ENDMACRO (GENERATE_LIST_H)
#
# Generate installation rules for man pages.
--- /dev/null
+# Generated by CMake at configure time -- do not edit.
+# Scans test source files for DEFINE_TEST() declarations and writes list.h.
+set(_sources @SOURCES@)
+set(_output "@OUTPUT@")
+file(WRITE "${_output}" "")
+foreach(_src ${_sources})
+ if(_src MATCHES "test_[^/]+\\.c$")
+ file(STRINGS "${_src}" _lines REGEX "^DEFINE_TEST")
+ foreach(_line ${_lines})
+ file(APPEND "${_output}" "${_line}\n")
+ endforeach()
+ endif()
+endforeach()
# Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
#
GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
- ${CMAKE_CURRENT_LIST_FILE} ${bsdcat_test_SOURCES})
+ ${CMAKE_CURRENT_LIST_FILE} bsdcat_test ${bsdcat_test_SOURCES})
SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR})
SET_TESTS_PROPERTIES(bsdcat_${_testname} PROPERTIES SKIP_RETURN_CODE 2)
ENDMACRO (DEFINE_TEST _testname)
- INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h OPTIONAL)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/cat/test)
# Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
#
GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
- ${CMAKE_CURRENT_LIST_FILE} ${bsdcpio_test_SOURCES})
+ ${CMAKE_CURRENT_LIST_FILE} bsdcpio_test ${bsdcpio_test_SOURCES})
SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR})
SET_TESTS_PROPERTIES(bsdcpio_${_testname} PROPERTIES SKIP_RETURN_CODE 2)
ENDMACRO (DEFINE_TEST _testname)
- INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h OPTIONAL)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/cpio/test)
# Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
#
GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
- ${CMAKE_CURRENT_LIST_FILE} ${libarchive_test_SOURCES})
+ ${CMAKE_CURRENT_LIST_FILE} libarchive_test ${libarchive_test_SOURCES})
SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR})
SET_TESTS_PROPERTIES(libarchive_${_testname} PROPERTIES SKIP_RETURN_CODE 2)
ENDMACRO (DEFINE_TEST _testname)
- INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h OPTIONAL)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/libarchive/test)
# Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
#
GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
- ${CMAKE_CURRENT_LIST_FILE} ${bsdtar_test_SOURCES})
+ ${CMAKE_CURRENT_LIST_FILE} bsdtar_test ${bsdtar_test_SOURCES})
SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR})
SET_TESTS_PROPERTIES(bsdtar_${_testname} PROPERTIES SKIP_RETURN_CODE 2)
ENDMACRO (DEFINE_TEST _testname)
- INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h OPTIONAL)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/tar/test)
# Generate list.h by grepping DEFINE_TEST() lines out of the C sources.
#
GENERATE_LIST_H(${CMAKE_CURRENT_BINARY_DIR}/list.h
- ${CMAKE_CURRENT_LIST_FILE} ${bsdunzip_test_SOURCES})
+ ${CMAKE_CURRENT_LIST_FILE} bsdunzip_test ${bsdunzip_test_SOURCES})
SET_PROPERTY(DIRECTORY APPEND PROPERTY INCLUDE_DIRECTORIES
${CMAKE_CURRENT_BINARY_DIR})
SET_TESTS_PROPERTIES(bsdunzip_${_testname} PROPERTIES SKIP_RETURN_CODE 2)
ENDMACRO (DEFINE_TEST _testname)
- INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/list.h OPTIONAL)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/test_utils)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/unzip/test)