Skip to content

Commit 87fc668

Browse files
committed
Merge branch 'ps/clar-build-improvement'
Fix for clar unit tests to support CMake build. * ps/clar-build-improvement: Makefile: let clar header targets depend on their scripts cmake: use verbatim arguments when invoking clar commands cmake: use SH_EXE to execute clar scripts t/unit-tests: convert "clar-generate.awk" into a shell script
2 parents c515230 + 5dac35b commit 87fc668

File tree

4 files changed

+78
-57
lines changed

4 files changed

+78
-57
lines changed

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3904,10 +3904,10 @@ GIT-TEST-SUITES: FORCE
39043904
echo "$$FLAGS" >GIT-TEST-SUITES; \
39053905
fi
39063906

3907-
$(UNIT_TEST_DIR)/clar-decls.h: $(patsubst %,$(UNIT_TEST_DIR)/%.c,$(CLAR_TEST_SUITES)) GIT-TEST-SUITES
3907+
$(UNIT_TEST_DIR)/clar-decls.h: $(patsubst %,$(UNIT_TEST_DIR)/%.c,$(CLAR_TEST_SUITES)) $(UNIT_TEST_DIR)/generate-clar-decls.sh GIT-TEST-SUITES
39083908
$(QUIET_GEN)$(SHELL_PATH) $(UNIT_TEST_DIR)/generate-clar-decls.sh "$@" $(filter %.c,$^)
3909-
$(UNIT_TEST_DIR)/clar.suite: $(UNIT_TEST_DIR)/clar-decls.h
3910-
$(QUIET_GEN)awk -f $(UNIT_TEST_DIR)/clar-generate.awk $< >$(UNIT_TEST_DIR)/clar.suite
3909+
$(UNIT_TEST_DIR)/clar.suite: $(UNIT_TEST_DIR)/clar-decls.h $(UNIT_TEST_DIR)/generate-clar-suites.sh
3910+
$(QUIET_GEN)$(SHELL_PATH) $(UNIT_TEST_DIR)/generate-clar-suites.sh $< $(UNIT_TEST_DIR)/clar.suite
39113911
$(UNIT_TEST_DIR)/clar/clar.o: $(UNIT_TEST_DIR)/clar.suite
39123912
$(CLAR_TEST_OBJS): $(UNIT_TEST_DIR)/clar-decls.h
39133913
$(CLAR_TEST_OBJS): EXTRA_CPPFLAGS = -I$(UNIT_TEST_DIR)

contrib/buildsystems/CMakeLists.txt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,11 +1005,19 @@ parse_makefile_for_scripts(clar_test_SUITES "CLAR_TEST_SUITES" "")
10051005
list(TRANSFORM clar_test_SUITES PREPEND "${CMAKE_SOURCE_DIR}/t/unit-tests/")
10061006
list(TRANSFORM clar_test_SUITES APPEND ".c")
10071007
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
1008-
COMMAND ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h" ${clar_test_SUITES}
1009-
DEPENDS ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh ${clar_test_SUITES})
1008+
COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh
1009+
"${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
1010+
${clar_test_SUITES}
1011+
DEPENDS ${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-decls.sh
1012+
${clar_test_SUITES}
1013+
VERBATIM)
10101014
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
1011-
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"
1012-
DEPENDS "${CMAKE_SOURCE_DIR}/t/unit-tests/clar-generate.awk" "${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h")
1015+
COMMAND ${SH_EXE} "${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-suites.sh"
1016+
"${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
1017+
"${CMAKE_BINARY_DIR}/t/unit-tests/clar.suite"
1018+
DEPENDS "${CMAKE_SOURCE_DIR}/t/unit-tests/generate-clar-suites.sh"
1019+
"${CMAKE_BINARY_DIR}/t/unit-tests/clar-decls.h"
1020+
VERBATIM)
10131021

10141022
add_library(unit-tests-lib ${clar_test_SUITES}
10151023
"${CMAKE_SOURCE_DIR}/t/unit-tests/clar/clar.c"

t/unit-tests/clar-generate.awk

Lines changed: 0 additions & 50 deletions
This file was deleted.

t/unit-tests/generate-clar-suites.sh

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/sh
2+
3+
if test $# -lt 2
4+
then
5+
echo "USAGE: $0 <CLAR_DECLS_H> <OUTPUT>" 2>&1
6+
exit 1
7+
fi
8+
9+
CLAR_DECLS_H="$1"
10+
OUTPUT="$2"
11+
12+
awk '
13+
function add_suite(suite, initialize, cleanup, count) {
14+
if (!suite) return
15+
suite_count++
16+
callback_count += count
17+
suites = suites " {\n"
18+
suites = suites " \"" suite "\",\n"
19+
suites = suites " " initialize ",\n"
20+
suites = suites " " cleanup ",\n"
21+
suites = suites " _clar_cb_" suite ", " count ", 1\n"
22+
suites = suites " },\n"
23+
}
24+
25+
BEGIN {
26+
suites = "static struct clar_suite _clar_suites[] = {\n"
27+
}
28+
29+
{
30+
print
31+
name = $3; sub(/\(.*$/, "", name)
32+
suite = name; sub(/^test_/, "", suite); sub(/__.*$/, "", suite)
33+
short_name = name; sub(/^.*__/, "", short_name)
34+
cb = "{ \"" short_name "\", &" name " }"
35+
if (suite != prev_suite) {
36+
add_suite(prev_suite, initialize, cleanup, count)
37+
if (callbacks) callbacks = callbacks "};\n"
38+
callbacks = callbacks "static const struct clar_func _clar_cb_" suite "[] = {\n"
39+
initialize = "{ NULL, NULL }"
40+
cleanup = "{ NULL, NULL }"
41+
count = 0
42+
prev_suite = suite
43+
}
44+
if (short_name == "initialize") {
45+
initialize = cb
46+
} else if (short_name == "cleanup") {
47+
cleanup = cb
48+
} else {
49+
callbacks = callbacks " " cb ",\n"
50+
count++
51+
}
52+
}
53+
54+
END {
55+
add_suite(suite, initialize, cleanup, count)
56+
suites = suites "};"
57+
if (callbacks) callbacks = callbacks "};"
58+
print callbacks
59+
print suites
60+
print "static const size_t _clar_suite_count = " suite_count ";"
61+
print "static const size_t _clar_callback_count = " callback_count ";"
62+
}
63+
' "$CLAR_DECLS_H" >"$OUTPUT"

0 commit comments

Comments
 (0)