Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add the Storage::read_async and Storage::write_async methods
[simgrid.git] / tools / simgrid_update_xml.pl
index 7ec9879..6cd86c2 100755 (executable)
@@ -5,7 +5,7 @@ eval 'exec perl -S $0 ${1+"$@"}'
 # This script updates the simgrid XML file passed as argument (modification in place)
 # It is built to do the conversion incrementally.
 
 # This script updates the simgrid XML file passed as argument (modification in place)
 # It is built to do the conversion incrementally.
 
-# Copyright (c) 2006-2014. The SimGrid Team.
+# Copyright (c) 2006-2018. The SimGrid Team.
 # All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify it
 # All rights reserved.
 #
 # This program is free software; you can redistribute it and/or modify it
@@ -16,11 +16,11 @@ eval 'exec perl -S $0 ${1+"$@"}'
 =head1 NAME
 
 simgrid_update_xml - updates simgrid XML files to latest version
 =head1 NAME
 
 simgrid_update_xml - updates simgrid XML files to latest version
-  
+
 =head1 SYNOPSIS
 
 B<simgrid_update_xml> I<xml_file>
 =head1 SYNOPSIS
 
 B<simgrid_update_xml> I<xml_file>
-  
+
 =head1 DESCRIPTION
 
 simgrid_update_xml updates the simgrid XML file passed as argument.  The file
 =head1 DESCRIPTION
 
 simgrid_update_xml updates the simgrid XML file passed as argument.  The file
@@ -28,7 +28,7 @@ is modified in place, without any kind of backup. You may want to save a copy
 before running the script.
 
 In SimGrid XML files, the standard version is indicated in the version
 before running the script.
 
 In SimGrid XML files, the standard version is indicated in the version
-attribute of the platform tag. Current version is 3. Here is a list of major
+attribute of the platform tag. Current version is 4. Here is a list of major
 changes in each version.
 
 =over 4
 changes in each version.
 
 =over 4
@@ -39,9 +39,9 @@ changes in each version.
 
 =over 4
 
 
 =over 4
 
-=item 
+=item
 
 
-The version attribute of platform were added to allow file versionning.
+The version attribute of platform were added to allow file versioning.
 
 =item
 
 
 =item
 
@@ -52,29 +52,29 @@ from MFlop/s to Flop/s
 
 =item B<Version 2:> Introduced in SimGrid 3.4
 
 
 =item B<Version 2:> Introduced in SimGrid 3.4
 
-=over 
+=over
 
 
-=item 
+=item
 
 
-Several tags were renamed: 
+Several tags were renamed:
 
 
-  CPU -> HOST 
+  CPU -> HOST
   NETWORK_LINK -> LINK
   ROUTE_ELEMENT ->  LINK_CTN
   PLATFORM_DESCRIPTION -> PLATFORM
 
 =back
 
   NETWORK_LINK -> LINK
   ROUTE_ELEMENT ->  LINK_CTN
   PLATFORM_DESCRIPTION -> PLATFORM
 
 =back
 
-=item B<Version 3:> Introduced in SimGrid 3.5 (this is the current version)
+=item B<Version 3:> Introduced in SimGrid 3.5
 
 =over 4
 
 =item
 
 
 =over 4
 
 =item
 
-The AS tag were introduced. Every plaform should now contain an englobing AS
+The AS tag were introduced. Every platform should now contain an englobing AS
 tag.
 
 tag.
 
-=item 
+=item
 
 Routes are now symmetric by default.
 
 
 Routes are now symmetric by default.
 
@@ -87,37 +87,95 @@ Several tags were renamed (for sake of XML sanity):
 
 =back
 
 
 =back
 
+=item B<Version 4:> Introduced in SimGrid 3.13
+
+=over 4
+
+=item
+
+Rename the attributes describing the amount of flop that a host / peer / cluster / cabinet can deliver per second.
+
+  <host power=...> -> <host speed=...>
+
+=item
+
+In <trace_connect>, attribute kind="POWER" is now kind="SPEED".
+
+=item
+
+The DOCTYPE points to the right URL: http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
+
+=item
+
+Units are now mandatory in attributes. USE THE SCRIPT sg_xml_unit_converter.py TO CONVERT THIS
+
+     - speed. Old default: 'f' or 'flops'. Also defined:
+        'Yf',         'Zf',         'Ef',       'Pf',        'Tf',        'Gf',        'Mf',        'kf'
+        'yottaflops', 'zettaflops', 'exaflops', 'petaflops', 'teraflops', 'gigaflops', 'megaflops', 'kiloflops'
+
+     - bandwidth. Old default: 'Bps' bytes per second (or 'bps' but 1 Bps = 8 bps)
+       Also defined in bytes: 'TiBps', 'GiBps', 'MiBps', 'KiBps', 'TBps', 'GBps', 'MBps', 'kBps', 'Bps'
+       And the same in bits:  'Tibps', 'Gibps', 'Mibps', 'Kibps', 'Tbps', 'Gbps', 'Mbps', 'kbps', 'bps'
+
+     - latency. Old default: 's' second. Also defined:
+       'w' week, 'd' day, 'h' hour, 'm' minute, 'ms' millisecond, 'us' microsecond, 'ns' nanosecond, 'ps' picosecond
+
+
+=back
+
+=item B<Version 4.1:> Introduced in SimGrid 3.16 (this is the current version)
+
+=over 4
+
+=item
+
+Rename a few tags, but in a backward-compatible manner: the old names are still accepted.
+
+  AS            -> zone
+  ASroute       -> zoneRoute
+  bypassAsRoute -> bypassZoneRoute
+  process       -> actor
+
+=back
+
+=item Other backward-compatible changes (old syntax is still accepted) for which we did not bump the DTD version:
+
+=over 4
+
+=item
+
+Rename the FULLDUPLEX sharing into SPLITDUPLEX.
+
+=back
+
 =back
 
 =head1 AUTHORS
 
  The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
 =back
 
 =head1 AUTHORS
 
  The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
-  
+
 =head1 COPYRIGHT AND LICENSE
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2006-2014. The SimGrid Team. All rights reserved.
-  
+Copyright (c) 2006-2018. The SimGrid Team. All rights reserved.
+
 This program is free software; you may redistribute it and/or modify it
 under the terms of GNU LGPL (v2.1) license.
 This program is free software; you may redistribute it and/or modify it
 under the terms of GNU LGPL (v2.1) license.
-  
+
 =cut
 
 
 use strict;
 
 my $fromversion=-1;
 =cut
 
 
 use strict;
 
 my $fromversion=-1;
-my $toversion=3;
+my $toversion=4.1;
 
 
-my($output_string);
+my $filename = $ARGV[0] or die "Usage: simgrid_update_xml.pl file_to_convert.xml\nPlease provide an XML to convert as a parameter.\n";
+open INPUT, "$filename" or die "Cannot open input file $filename: $!\n";
 
 
-$ARGV[0] or die "simgrid_update_xml.pl <platform.xml>\n";
-open INPUT, "$ARGV[0]" or die "Cannot open input file $ARGV[0]: $!\n";
-
-$output_string = "<?xml version='1.0'?>\n".
-    "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n".
+my $output_string = "<?xml version='1.0'?>\n".
+    "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n".
     "<platform version=\"$toversion\">\n";
 
     "<platform version=\"$toversion\">\n";
 
-
 my($AS_opened)=0;
 
 my $line;
 my($AS_opened)=0;
 
 my $line;
@@ -126,23 +184,23 @@ while (defined($line = <INPUT>)) {
     # eat the header, whatever form it has
     next if ($line =~ s/<\?xml[^>]*>//           && ! $line =~ /\S/); # just in case several tags are on the same line
     next if ($line =~ s/<!DOCTYPE[^>]*>//        && ! $line =~ /\S/);
     # eat the header, whatever form it has
     next if ($line =~ s/<\?xml[^>]*>//           && ! $line =~ /\S/); # just in case several tags are on the same line
     next if ($line =~ s/<!DOCTYPE[^>]*>//        && ! $line =~ /\S/);
-    
+
     if ($line =~ s/<platform(_description)? *>//) {
        $fromversion = 0;
     if ($line =~ s/<platform(_description)? *>//) {
        $fromversion = 0;
-       print "version 0\n";
+       print "$filename was using version 0\n";
        next if !$line =~ /\S/;
        next if !$line =~ /\S/;
-    } elsif ($line =~ s/<platform.*version=["]*([0-9.])["]*>//) {
+    } elsif ($line =~ s/<platform.*version=["']*([0-9.]*)["']*>//) {
        $fromversion = $1;
        $fromversion = $1;
-       print "version $fromversion\n";
        if ($fromversion == $toversion) {
        if ($fromversion == $toversion) {
-           die "Input platform file version is already $fromversion. This should be a no-op.\n";
+           warn "Input platform file $filename is already conformant to version $fromversion. This should be a no-op.\n";
        }
        if ($fromversion > $toversion) {
        }
        if ($fromversion > $toversion) {
-           die "Input platform file version is more recent than this script (file version: $fromversion; script version: $toversion)\n";
+           die "Input platform file $filename is more recent than this script (file version: $fromversion; script version: $toversion)\n";
        }
        next if !$line =~ /\S/;
        }
        next if !$line =~ /\S/;
+       print "$filename was using version $fromversion\n";
     }
     }
-    
+
     if ($fromversion == 0) {
        while ($line =~ m|^(.*?)<cpu(.*?)power="([^"]*)"(.*)$|) {
            $line = "$1TOTOTUTUTATA${2}TOTOTUTUTATA".($3*1000000)."TOTOTUTUTATA${4}";
     if ($fromversion == 0) {
        while ($line =~ m|^(.*?)<cpu(.*?)power="([^"]*)"(.*)$|) {
            $line = "$1TOTOTUTUTATA${2}TOTOTUTUTATA".($3*1000000)."TOTOTUTUTATA${4}";
@@ -166,7 +224,7 @@ while (defined($line = <INPUT>)) {
        $line =~ s/\bnetwork_link\b/link/g;
        $line =~ s/\broute_element\b/link:ctn/g;
     }
        $line =~ s/\bnetwork_link\b/link/g;
        $line =~ s/\broute_element\b/link:ctn/g;
     }
-    
+
     if ($fromversion < 3)  {
        $line =~ s/\blink:ctn\b/link_ctn/g;
        $line =~ s/\btrace:connect\b/trace_connect/g;
     if ($fromversion < 3)  {
        $line =~ s/\blink:ctn\b/link_ctn/g;
        $line =~ s/\btrace:connect\b/trace_connect/g;
@@ -185,18 +243,30 @@ while (defined($line = <INPUT>)) {
            $output_string .=  " <AS  id=\"AS0\"  routing=\"Full\">\n";
            $AS_opened=1;
        }
            $output_string .=  " <AS  id=\"AS0\"  routing=\"Full\">\n";
            $AS_opened=1;
        }
-    }
        
        if($line=~/<route /){$line =~ s/\<route/\<route symmetrical=\"NO\"/g;}
        
        if($line=~/<route /){$line =~ s/\<route/\<route symmetrical=\"NO\"/g;}
+    }
+    if ($fromversion < 4) {
+       $line =~ s/\bpower\b/speed/g;   
+       $line =~ s/\bkind="POWER"/kind="SPEED"/g;
+    }
+    if ($fromversion < 4.1) {
+       $line =~ s/\bAS\b/zone/g;
+       $line =~ s/\bASroute\b/zoneRoute/g;
+       $line =~ s/\bbypassAsRoute\b/bypassZoneRoute/g;
+       $line =~ s/\bprocess\b/actor/g;
+    }
+    $line =~ s/\bFULLDUPLEX\b/SPLITDUPLEX/g;
+       
     $output_string .= "$line\n";
 }
 
 close INPUT;
 
 if ($fromversion == -1) {
     $output_string .= "$line\n";
 }
 
 close INPUT;
 
 if ($fromversion == -1) {
-    die "Cannot retrieve the platform version\n";
+    die "Cannot retrieve the platform version of $filename\n";
 }
 
 }
 
-open OUTPUT, "> $ARGV[0]";
+open OUTPUT, "> $filename";
 print OUTPUT $output_string;
 close OUTPUT;
 print OUTPUT $output_string;
 close OUTPUT;