#!/bin/sh if test $# -lt 2 then echo "USAGE: $0 " 2>&1 exit 1 fi CLAR_DECLS_H="$1" OUTPUT="$2" awk ' function add_suite(suite, initialize, cleanup, count) { if (!suite) return suite_count++ callback_count += count suites = suites " {\n" suites = suites " \"" suite "\",\n" suites = suites " " initialize ",\n" suites = suites " " cleanup ",\n" suites = suites " _clar_cb_" suite ", " count ", 1\n" suites = suites " },\n" } BEGIN { suites = "static struct clar_suite _clar_suites[] = {\n" } { print name = $3; sub(/\(.*$/, "", name) suite = name; sub(/^test_/, "", suite); sub(/__.*$/, "", suite) short_name = name; sub(/^.*__/, "", short_name) cb = "{ \"" short_name "\", &" name " }" if (suite != prev_suite) { add_suite(prev_suite, initialize, cleanup, count) if (callbacks) callbacks = callbacks "};\n" callbacks = callbacks "static const struct clar_func _clar_cb_" suite "[] = {\n" initialize = "{ NULL, NULL }" cleanup = "{ NULL, NULL }" count = 0 prev_suite = suite } if (short_name == "initialize") { initialize = cb } else if (short_name == "cleanup") { cleanup = cb } else { callbacks = callbacks " " cb ",\n" count++ } } END { add_suite(suite, initialize, cleanup, count) suites = suites "};" if (callbacks) callbacks = callbacks "};" print callbacks print suites print "static const size_t _clar_suite_count = " suite_count ";" print "static const size_t _clar_callback_count = " callback_count ";" } ' "$CLAR_DECLS_H" >"$OUTPUT"