0005-cmake-set-up-proper-dependencies-for-generated-clar-.patch 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. From 65d840b397f23ccbc578c15ee7a2dae1a7d1bfc8 Mon Sep 17 00:00:00 2001
  2. From: Patrick Steinhardt <ps@pks.im>
  3. Date: Mon, 21 Oct 2024 12:56:44 +0200
  4. Subject: [PATCH] cmake: set up proper dependencies for generated clar
  5. headers
  6. The auto-generated headers used by clar are written at configure time
  7. and thus do not get regenerated automatically. Refactor the build
  8. recipes such that we use custom commands instead, which also has the
  9. benefit that we can reuse the same infrastructure as our Makefile.
  10. Signed-off-by: Patrick Steinhardt <ps@pks.im>
  11. Upstream: https://lore.kernel.org/r/bb005979e7eb335b0178094251b5c37682d7d47b.1729506329.git.ps@pks.im
  12. Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
  13. ---
  14. contrib/buildsystems/CMakeLists.txt | 50 +++++++----------------------
  15. 1 file changed, 12 insertions(+), 38 deletions(-)
  16. diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
  17. index 093852ad9d..9f80ab9265 100644
  18. --- a/contrib/buildsystems/CMakeLists.txt
  19. +++ b/contrib/buildsystems/CMakeLists.txt
  20. @@ -1002,46 +1002,20 @@ foreach(unit_test ${unit_test_PROGRAMS})
  21. endforeach()
  22. parse_makefile_for_scripts(clar_test_SUITES "CLAR_TEST_SUITES" "")
  23. -
  24. -set(clar_decls "")
  25. -set(clar_cbs "")
  26. -set(clar_cbs_count 0)
  27. -set(clar_suites "static struct clar_suite _clar_suites[] = {\n")
  28. -list(LENGTH clar_test_SUITES clar_suites_count)
  29. -foreach(suite ${clar_test_SUITES})
  30. - file(STRINGS "${CMAKE_SOURCE_DIR}/t/unit-tests/${suite}.c" decls
  31. - REGEX "^void test_${suite}__[a-zA-Z_0-9][a-zA-Z_0-9]*\\(void\\)$")
  32. -
  33. - list(LENGTH decls decls_count)
  34. - string(REGEX REPLACE "void (test_${suite}__([a-zA-Z_0-9]*))\\(void\\)" " { \"\\2\", &\\1 },\n" cbs ${decls})
  35. - string(JOIN "" cbs ${cbs})
  36. - list(TRANSFORM decls PREPEND "extern ")
  37. - string(JOIN ";\n" decls ${decls})
  38. -
  39. - string(APPEND clar_decls "${decls};\n")
  40. - string(APPEND clar_cbs
  41. - "static const struct clar_func _clar_cb_${suite}[] = {\n"
  42. - ${cbs}
  43. - "};\n")
  44. - string(APPEND clar_suites
  45. - " {\n"
  46. - " \"${suite}\",\n"
  47. - " { NULL, NULL },\n"
  48. - " { NULL, NULL },\n"
  49. - " _clar_cb_${suite}, ${decls_count}, 1\n"
  50. - " },\n")
  51. - math(EXPR clar_cbs_count "${clar_cbs_count}+${decls_count}")
  52. -endforeach()
  53. -string(APPEND clar_suites
  54. - "};\n"
  55. - "static const size_t _clar_suite_count = ${clar_suites_count};\n"
  56. - "static const size_t _clar_callback_count = ${clar_cbs_count};\n")
  57. -file(WRITE "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" "${clar_decls}")
  58. -file(WRITE "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite" "${clar_decls}" "${clar_cbs}" "${clar_suites}")
  59. -
  60. list(TRANSFORM clar_test_SUITES PREPEND "${CMAKE_SOURCE_DIR}/t/unit-tests/")
  61. list(TRANSFORM clar_test_SUITES APPEND ".c")
  62. -add_library(unit-tests-lib ${clar_test_SUITES} "${CMAKE_SOURCE_DIR}/t/unit-tests/clar/clar.c")
  63. +add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
  64. + COMMAND ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" ${clar_test_SUITES}
  65. + DEPENDS ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh ${clar_test_SUITES})
  66. +add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
  67. + 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"
  68. + DEPENDS "${CMAKE_SOURCE_DIR}/t/unit-tests/clar-generate.awk" "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h")
  69. +
  70. +add_library(unit-tests-lib ${clar_test_SUITES}
  71. + "${CMAKE_SOURCE_DIR}/t/unit-tests/clar/clar.c"
  72. + "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
  73. + "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
  74. +)
  75. target_include_directories(unit-tests-lib PUBLIC "${CMAKE_BINARY_DIR}/t/unit-tests")
  76. add_executable(unit-tests "${CMAKE_SOURCE_DIR}/t/unit-tests/unit-test.c")
  77. target_link_libraries(unit-tests unit-tests-lib common-main)
  78. --
  79. An old man doll... just what I always wanted! - Clara