#!/usr/bin/perl # # make-test-arrays # # Given a test-arrays file, which specifies the test suite names, the # names of the functions which perform those test suites, and # descriptive comments, this script generates C structures for the # mpi-test program. The input consists of lines of the form: # # suite-name:function-name:comment # # The output is written to the standard output. Blank lines are # ignored, and comments beginning with '#' are stripped. # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # Read parameters from the environment, if available $NAMEVAR = $ENV{'NAMEVAR'} || "g_names"; $COUNTVAR = $ENV{'COUNTVAR'} || "g_count"; $FUNCVAR = $ENV{'FUNCVAR'} || "g_tests"; $DESCVAR = $ENV{'DESCVAR'} || "g_descs"; $FUNCLEN = 13; $NAMELEN = 18; $DESCLEN = 45; #------------------------------------------------------------------------ # Suck in input from the files on the command line, or standard input while(<>) { chomp; s/\#.*$//; next if /^\s*$/; ($suite, $func, $desc) = split(/:/, $_); $tmp = { "suite" => $suite, "func" => $func, "desc" => $desc }; push(@item, $tmp); } $count = scalar(@item); $last = pop(@item); #------------------------------------------------------------------------ # Output the table of names print "/* Table mapping test suite names to index numbers */\n"; printf("const int %s = %d;\n", $COUNTVAR, $count); printf("const char *%s[] = {\n", $NAMEVAR); foreach $elt (@item) { printf(" \"%s\",%s/* %s%s */\n", $elt->{"suite"}, " " x ($NAMELEN - length($elt->{"suite"})), $elt->{"desc"}, " " x ($DESCLEN - length($elt->{"desc"}))); } printf(" \"%s\" %s/* %s%s */\n", $last->{"suite"}, " " x ($NAMELEN - length($last->{"suite"})), $last->{"desc"}, " " x ($DESCLEN - length($last->{"desc"}))); print "};\n\n"; #------------------------------------------------------------------------ # Output the driver function prototypes print "/* Test function prototypes */\n"; foreach $elt (@item, $last) { printf("int %s(void);\n", $elt->{"func"}); } print "\n"; #------------------------------------------------------------------------ # Output the table of functions print "/* Table mapping index numbers to functions */\n"; printf("int (*%s[])(void) = {\n ", $FUNCVAR); $brk = 0; foreach $elt (@item) { print($elt->{"func"}, ", ", " " x ($FUNCLEN - length($elt->{"func"}))); $brk = ($brk + 1) & 3; print "\n " unless($brk); } print $last->{"func"}, "\n};\n\n"; #------------------------------------------------------------------------ # Output the table of descriptions print "/* Table mapping index numbers to descriptions */\n"; printf("const char *%s[] = {\n", $DESCVAR); foreach $elt (@item) { printf(" \"%s\",\n", $elt->{"desc"}); } printf(" \"%s\"\n};\n\n", $last->{"desc"}); exit 0;