64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| if test $# -lt 2
 | |
| then
 | |
| 	echo "USAGE: $0 <CLAR_DECLS_H> <OUTPUT>" 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"
 |