mirror of
https://github.com/git/git.git
synced 2024-11-27 12:03:55 +08:00
cmake: set up proper dependencies for generated clar headers
The auto-generated headers used by clar are written at configure time and thus do not get regenerated automatically. Refactor the build recipes such that we use custom commands instead, which also has the benefit that we can reuse the same infrastructure as our Makefile. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
parent
a4f8a59ddc
commit
30bf9f0aaa
@ -1002,46 +1002,20 @@ foreach(unit_test ${unit_test_PROGRAMS})
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
parse_makefile_for_scripts(clar_test_SUITES "CLAR_TEST_SUITES" "")
|
parse_makefile_for_scripts(clar_test_SUITES "CLAR_TEST_SUITES" "")
|
||||||
|
|
||||||
set(clar_decls "")
|
|
||||||
set(clar_cbs "")
|
|
||||||
set(clar_cbs_count 0)
|
|
||||||
set(clar_suites "static struct clar_suite _clar_suites[] = {\n")
|
|
||||||
list(LENGTH clar_test_SUITES clar_suites_count)
|
|
||||||
foreach(suite ${clar_test_SUITES})
|
|
||||||
file(STRINGS "${CMAKE_SOURCE_DIR}/t/unit-tests/${suite}.c" decls
|
|
||||||
REGEX "^void test_${suite}__[a-zA-Z_0-9][a-zA-Z_0-9]*\\(void\\)$")
|
|
||||||
|
|
||||||
list(LENGTH decls decls_count)
|
|
||||||
string(REGEX REPLACE "void (test_${suite}__([a-zA-Z_0-9]*))\\(void\\)" " { \"\\2\", &\\1 },\n" cbs ${decls})
|
|
||||||
string(JOIN "" cbs ${cbs})
|
|
||||||
list(TRANSFORM decls PREPEND "extern ")
|
|
||||||
string(JOIN ";\n" decls ${decls})
|
|
||||||
|
|
||||||
string(APPEND clar_decls "${decls};\n")
|
|
||||||
string(APPEND clar_cbs
|
|
||||||
"static const struct clar_func _clar_cb_${suite}[] = {\n"
|
|
||||||
${cbs}
|
|
||||||
"};\n")
|
|
||||||
string(APPEND clar_suites
|
|
||||||
" {\n"
|
|
||||||
" \"${suite}\",\n"
|
|
||||||
" { NULL, NULL },\n"
|
|
||||||
" { NULL, NULL },\n"
|
|
||||||
" _clar_cb_${suite}, ${decls_count}, 1\n"
|
|
||||||
" },\n")
|
|
||||||
math(EXPR clar_cbs_count "${clar_cbs_count}+${decls_count}")
|
|
||||||
endforeach()
|
|
||||||
string(APPEND clar_suites
|
|
||||||
"};\n"
|
|
||||||
"static const size_t _clar_suite_count = ${clar_suites_count};\n"
|
|
||||||
"static const size_t _clar_callback_count = ${clar_cbs_count};\n")
|
|
||||||
file(WRITE "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" "${clar_decls}")
|
|
||||||
file(WRITE "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite" "${clar_decls}" "${clar_cbs}" "${clar_suites}")
|
|
||||||
|
|
||||||
list(TRANSFORM clar_test_SUITES PREPEND "${CMAKE_SOURCE_DIR}/t/unit-tests/")
|
list(TRANSFORM clar_test_SUITES PREPEND "${CMAKE_SOURCE_DIR}/t/unit-tests/")
|
||||||
list(TRANSFORM clar_test_SUITES APPEND ".c")
|
list(TRANSFORM clar_test_SUITES APPEND ".c")
|
||||||
add_library(unit-tests-lib ${clar_test_SUITES} "${CMAKE_SOURCE_DIR}/t/unit-tests/clar/clar.c")
|
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
|
||||||
|
COMMAND ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" ${clar_test_SUITES}
|
||||||
|
DEPENDS ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh ${clar_test_SUITES})
|
||||||
|
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
|
||||||
|
COMMAND awk -f "${CMAKE_SOURCE_DIR}/t/unit-tests/clar-generate.awk" "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" > "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
|
||||||
|
DEPENDS "${CMAKE_SOURCE_DIR}/t/unit-tests/clar-generate.awk" "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h")
|
||||||
|
|
||||||
|
add_library(unit-tests-lib ${clar_test_SUITES}
|
||||||
|
"${CMAKE_SOURCE_DIR}/t/unit-tests/clar/clar.c"
|
||||||
|
"${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
|
||||||
|
"${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
|
||||||
|
)
|
||||||
target_include_directories(unit-tests-lib PUBLIC "${CMAKE_BINARY_DIR}/t/unit-tests")
|
target_include_directories(unit-tests-lib PUBLIC "${CMAKE_BINARY_DIR}/t/unit-tests")
|
||||||
add_executable(unit-tests "${CMAKE_SOURCE_DIR}/t/unit-tests/unit-test.c")
|
add_executable(unit-tests "${CMAKE_SOURCE_DIR}/t/unit-tests/unit-test.c")
|
||||||
target_link_libraries(unit-tests unit-tests-lib common-main)
|
target_link_libraries(unit-tests unit-tests-lib common-main)
|
||||||
|
Loading…
Reference in New Issue
Block a user