, , , , .
" " à la gettext (.. , , ):
#define TEST_CASE(f) f
T TEST_CASE(f)(D x, ...)
{
}
sed awk, , . awk , , - :
match($0, /TEST_CASE\([a-zA-Z_][a-zA-Z_0-9]*\)/) {
name = substr($0, RSTART, RLENGTH)
sub(/^TEST_CASE\(/, "", name)
sub(/\)$/, "", name)
funcs[name]
}
END {
for (f in funcs)
printf "func_type %s;\n", f
print "funcRecord funcTable[] = {"
for (f in funcs)
printf "\t{ .p_func = %s, .funcName = \"%s\" },\n", f, f
print "};"
}
( bsearch() - ing), : (sed one-liner ), sort (1), ( awk ). / , extern .
, , . (). typedef (func_type ) , IMHO ( , , , ).
, , make , dmckee ( .c, .h, ). , :
TEST_SRCS= test1.c test2.c test3.c
test_funcs.c: ${TEST_SRCS}
echo '#include "test.h"' >$@
awk -f extract_test_funcs.awk ${TEST_SRCS} >>$@