Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Rename sg_config.h -> sg_config.hpp.
[simgrid.git] / tools / sg_unit_extractor.pl
index 66ef7d7..8b2083f 100755 (executable)
@@ -1,6 +1,9 @@
-#! /usr/bin/perl
+#! /usr/bin/env perl
 
-use strict;
+# Copyright (c) 2005-2012, 2014-2017. The SimGrid Team. All rights reserved.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the license (GNU LGPL) which comes with this package.
 
 use strict;
 use Getopt::Long qw(GetOptions);
@@ -10,11 +13,12 @@ my $progname="sg_unit_extractor";
 
 sub usage($) {
     my $ret;
-    print "USAGE: $progname [--root=part/to/cut] [--path=where/to/search NOT WORKING] [--outdir=where/to/generate/files] infile [infile+]\n";
+    print "USAGE: $progname [--root=part/to/cut] [--outdir=where/to/generate/files] infile [infile+]\n\n";
+    print "This program is in charge of extracting the unit tests out of the SimGrid source code.\n";
+    print "See http://simgrid.gforge.inria.fr/doc/latest/inside_tests.html for more details.\n";
     exit $ret;
 }
 
-my $path=undef;
 my $outdir=undef;
 my $root;
 my $help;
@@ -23,7 +27,6 @@ Getopt::Long::config('permute','no_getopt_compat', 'no_auto_abbrev');
 GetOptions(
         'help|h'                => sub {usage(0)},
         'root=s' =>\$root,
-        'path=s' =>\$path,
         'outdir=s' =>\$outdir) or usage(1);
 
 usage(1) if (scalar @ARGV == 0);
@@ -38,6 +41,7 @@ sub process_one($) {
     
     $outfile =  $infile;
     $outfile =~ s/\.c$/_unit.c/;
+    $outfile =~ s/\.cpp$/_unit.cpp/;
     $outfile =~ s|.*/([^/]*)$|$1| if $outfile =~ m|/|;
     $outfile = "$outdir$outfile";
     
@@ -122,6 +126,7 @@ sub process_one($) {
        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;
@@ -129,7 +134,7 @@ sub process_one($) {
        print OUT <<EOF;
 int main(int argc, char *argv[]) {
   xbt_test_suite_t suite; 
-  char selection[1024];
+  char selection[STRLEN];
   int verbosity = 0;
   int i;
   int res;
@@ -144,12 +149,9 @@ int main(int argc, char *argv[]) {
     for (i=1;i<argc;i++) {
       if (!strncmp(argv[i],\"--tests=\",strlen(\"--tests=\"))) {
         char *p=strchr(argv[i],'=')+1;
-        if (selection[0] == '\\0') {
-          strcpy(selection, p);
-        } else {
-          strcat(selection, \",\");
-          strcat(selection, p);
-        }
+        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\")||