- $_ = <IN>; # pass extra blank line
- chomp;
- die "this line should be blank ($_). Did you edit the file?" if /\W/;
- }
- my ($old_)=($_);
- # add my section
- $newmain .= " /* SGU: BEGIN FILE $infile */\n";
- map {
- my ($name,$func,$title) = @{$_};
- $newmain .= " void $func(xbt_test_unit_t _unit);\n"
- } @tests;
-
- $newmain .= " /* SGU: END FILE */\n\n";
- if ($old_ =~ /SGU: BEGIN FILE/ || $old_ =~ /SGU: END PROTOTYPES/) {
- $newmain .= $old_;
- }
-
- # pass remaining prototypes, search declarations
- while (<IN>) {
- $newmain .= $_ unless /SGU: END PROTOTYPES/;
- last if /SGU: BEGIN SUITES DECLARATION/;
- }
-
- ### Done with prototypes. And now, the actual code
-
- # search my prototype
- while (<IN>) {
- last if (/SGU: END SUITES DECLARATION/ || /SGU: BEGIN FILE $infile/);
- $newmain .= $_;
- }
- if (/SGU: BEGIN FILE $infile/) { # found an old section for this file. Kill it
- while (<IN>) {
- last if /SGU: END FILE/;
+ close IN || die "$progname: cannot close input file '$infile': $!\n";
+
+
+ if ($takeit) {
+ die "$progname: end of file reached in SIMGRID_TEST block.\n".
+ "You should end each of the with a line matching: /endif.*SIMGRID_TEST/\n".
+ "Example:\n".
+ "#endif /* SIMGRID_TEST */\n"
+ }
+
+ die "$progname: no suite defined in $infile\n" unless (length($suite_name));
+
+ # Write the test
+
+ my ($GENERATED)=("/*******************************/\n".
+ "/* GENERATED FILE, DO NOT EDIT */\n".
+ "/*******************************/\n\n");
+ $beginline+=2;
+ open OUT,">$outfile" || die "$progname: Cannot open output file '$outfile': $!\n";
+ print OUT $GENERATED;
+ print OUT "#include <stdio.h>\n";
+ print OUT "#include \"xbt.h\"\n";
+ print OUT $GENERATED;
+ print OUT "#line $beginline \"$infile\" \n";
+ print OUT "$unit_source";
+ print OUT $GENERATED;
+ close OUT || die "$progname: Cannot close output file '$outfile': $!\n";
+
+ # write the main skeleton if needed
+ if (! -e "${outdir}simgrid_units_main.c") {
+ open OUT,">${outdir}simgrid_units_main.c" || die "$progname: Cannot open main file '${outdir}simgrid_units_main.c': $!\n";
+ print OUT $GENERATED;
+ print OUT "#include <stdio.h>\n\n";
+ print OUT "#include \"xbt.h\"\n\n";
+ print OUT "extern xbt_test_unit_t _xbt_current_unit;\n\n";
+ print OUT "#define STRLEN 1024\n";
+ print OUT "/* SGU: BEGIN PROTOTYPES */\n";
+ print OUT "/* SGU: END PROTOTYPES */\n\n";
+ print OUT $GENERATED;
+ # print OUT "# 93 \"sg_unit_extractor.pl\"\n";
+ print OUT <<EOF;
+int main(int argc, char *argv[]) {
+ xbt_test_suite_t suite;
+ char selection[STRLEN];
+ int verbosity = 0;
+ int i;
+ int res;
+
+ /* SGU: BEGIN SUITES DECLARATION */
+ /* SGU: END SUITES DECLARATION */
+
+ xbt_init(&argc,argv);
+
+ /* Search for the tests to do */
+ selection[0]='\\0';
+ for (i=1;i<argc;i++) {
+ if (!strncmp(argv[i],\"--tests=\",strlen(\"--tests=\"))) {
+ char *p=strchr(argv[i],'=')+1;
+ if (selection[0] != '\\0')
+ strncat(selection, \",\", STRLEN - 1 - strlen(selection));
+ strncat(selection, p, STRLEN - 1 - strlen(selection));
+ } else if (!strcmp(argv[i], \"--verbose\")) {
+ verbosity++;
+ } else if (!strcmp(argv[i], \"--dump-only\")||
+ !strcmp(argv[i], \"--dump\")) {
+ xbt_test_dump(selection);
+ return 0;
+ } else if (!strcmp(argv[i], \"--help\")) {
+ printf(
+ "Usage: testall [--help] [--tests=selection] [--dump-only]\\n\\n"
+ "--help: display this help\\n"
+ "--verbose: print the name for each running test\\n"
+ "--dump-only: don't run the tests, but display some debuging info about the tests\\n"
+ "--tests=selection: Use argument to select which suites/units/tests to run\\n"
+ " --tests can be used more than once, and selection may be a comma\\n"
+ " separated list of directives.\\n\\n"
+ "Directives are of the form:\\n"
+ " [-]suitename[:unitname]\\n\\n"
+ "If the first char is a '-', the directive disables its argument instead of enabling it\\n"
+ "suitename/unitname is the set of tests to en/disable. If a unitname is not specified,\\n"
+ "it applies on any unit.\\n\\n"
+ "By default, everything is enabled.\\n\\n"
+ "'all' as suite name apply to all suites.\\n\\n"
+ "Example 1: \\"-toto,+toto:tutu\\"\\n"
+ " disables the whole toto testsuite (any unit in it),\\n"
+ " then reenables the tutu unit of the toto test suite.\\n\\n"
+ "Example 2: \\"-all,+toto\\"\\n"
+ " Run nothing but the toto suite.\\n");
+ return 0;
+ } else {
+ printf("testall: Unknown option: %s\\n",argv[i]);
+ return 1;
+ }