envinfo/envinfo.pl
changeset 274 becbd829b411
child 275 f914b0494f03
equal deleted inserted replaced
273:859eb1addb02 274:becbd829b411
       
     1 # Copyright (c) 2009 Symbian Foundation Ltd
       
     2 # This component and the accompanying materials are made available
       
     3 # under the terms of the License "Eclipse Public License v1.0"
       
     4 # which accompanies this distribution, and is available
       
     5 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     6 #
       
     7 # Initial Contributors:
       
     8 # Symbian Foundation Ltd - initial contribution.
       
     9 #
       
    10 # Contributors:
       
    11 # Dario Sestito <darios@symbian.org>
       
    12 #
       
    13 # Description:
       
    14 # Dumps environment info such as tools version to cmdline or optionally to a Diamonds file
       
    15 
       
    16 use strict;
       
    17 
       
    18 use Getopt::Long;
       
    19 
       
    20 my $output = "\\output\\logs\\diamonds_envinfo.xml";
       
    21 my $diamonds = 0;
       
    22 my $help = 0;
       
    23 GetOptions((
       
    24 	'diamonds!' => \$diamonds,
       
    25 	'out=s' => \$output,
       
    26 	'help!' => \$help
       
    27 ));
       
    28 
       
    29 if ($help)
       
    30 {
       
    31 	print "Dumps environment info such as tools version to cmdline or optionally to a Diamonds file\n";
       
    32 	print "Usage: perl envinfo.pl [-d [-o XMLFILE]]\n";
       
    33 	print "\n";
       
    34 	print "-d,--diamonds\tcreate Diamonds file with environment info\n";
       
    35 	print "-o,--out XMLFILE Diamonds file to write to (default \\output\\logs\\diamonds_envinfo.xml)\n";
       
    36 	exit(0);
       
    37 }
       
    38 
       
    39 my @environment_info = ();
       
    40 
       
    41 # Machine name
       
    42 push @environment_info, {name=>'Machine', version=>$ENV{'COMPUTERNAME'}};
       
    43 
       
    44 # OS Name and Version
       
    45 my $os_name = 'N.A.';
       
    46 my $os_ver = 'N.A.';
       
    47 my $os_out = `systeminfo`;
       
    48 $os_name = $1 if ($os_out =~ /^OS Name:\s+(.*)/m);
       
    49 $os_ver = $1 if ($os_out =~ /^OS Version:\s+(.*)/m);
       
    50 push @environment_info, {name=>'OS Name', version=>$os_name};
       
    51 push @environment_info, {name=>'OS Version', version=>$os_ver};
       
    52 
       
    53 # Perl
       
    54 my $perl_ver = 'N.A.';
       
    55 my $perl_out = `perl -v`;
       
    56 $perl_ver = $1 if ($perl_out =~ /This is perl, v(\S+)/m);
       
    57 push @environment_info, {name=>'Perl', version=>$perl_ver};
       
    58 
       
    59 # Python
       
    60 my $python_ver = 'N.A.';
       
    61 my $python_out = `python -V 2>&1`;
       
    62 $python_ver = $1 if ($python_out =~ /^Python\s+(\S+)/m);
       
    63 push @environment_info, {name=>'Python', version=>$python_ver};
       
    64 
       
    65 # Mercurial
       
    66 my $hg_ver = 'N.A.';
       
    67 my $hg_out = `hg --version`;
       
    68 $hg_ver = $1 if ($hg_out =~ /^Mercurial Distributed SCM \(version ([^)]+)\)/m);
       
    69 push @environment_info, {name=>'Mercurial', version=>$hg_ver};
       
    70 
       
    71 # 7-Zip
       
    72 my $zip_ver = 'N.A.';
       
    73 my $zip_out = `7z`;
       
    74 $zip_ver = $1 if ($zip_out =~ /^7-Zip\s+(\S+)\s+Copyright/m);
       
    75 push @environment_info, {name=>'7-Zip', version=>$zip_ver};
       
    76 
       
    77 # Raptor
       
    78 my $sbs_ver = 'N.A.';
       
    79 my $sbs_out = `sbs -v`;
       
    80 $sbs_ver = $1 if ($sbs_out =~ /^sbs version (.*)/m);
       
    81 push @environment_info, {name=>'sbs', version=>$sbs_ver};
       
    82 
       
    83 # Metrowerk Compiler
       
    84 my $mwcc_ver = 'N.A.';
       
    85 my $mwcc_out = `mwccsym2 -version`;
       
    86 $mwcc_ver = $1 if ($mwcc_out =~ /^Version (.*)/m);
       
    87 push @environment_info, {name=>'mwccsym2', version=>$mwcc_ver};
       
    88 
       
    89 # RVCT 2.2
       
    90 my $rvct22_ver = 'N.A.';
       
    91 my $rvct22_path = '';
       
    92 if (defined $ENV{'SBS_RVCT22BIN'})
       
    93 {
       
    94 	$rvct22_path = $ENV{'SBS_RVCT22BIN'};
       
    95 }
       
    96 elsif (defined $ENV{'RVCT22BIN'})
       
    97 {
       
    98 	$rvct22_path = $ENV{'RVCT22BIN'};
       
    99 }
       
   100 my $rvct22_cmd = 'armcc 2>&1';
       
   101 $rvct22_cmd = "$rvct22_path\\$rvct22_cmd" if ($rvct22_path);
       
   102 my $rvct22_out = `$rvct22_cmd`;
       
   103 $rvct22_ver = $1 if ($rvct22_out =~ m#ARM/Thumb C/C\+\+ Compiler, RVCT2.2 (.*)#m);
       
   104 push @environment_info, {name=>'RVCT2.2', version=>$rvct22_ver};
       
   105 
       
   106 # RVCT 4.0
       
   107 my $rvct40_ver = 'N.A.';
       
   108 my $rvct40_path = '';
       
   109 if (defined $ENV{'SBS_RVCT40BIN'})
       
   110 {
       
   111 	$rvct40_path = $ENV{'SBS_RVCT40BIN'};
       
   112 }
       
   113 elsif (defined $ENV{'RVCT40BIN'})
       
   114 {
       
   115 	$rvct40_path = $ENV{'RVCT40BIN'};
       
   116 }
       
   117 my $rvct40_cmd = 'armcc 2>&1';
       
   118 $rvct40_cmd = "$rvct40_path\\$rvct40_cmd" if ($rvct40_path);
       
   119 my $rvct40_out = `$rvct40_cmd`;
       
   120 $rvct40_ver = $1 if ($rvct40_out =~ m#ARM C/C\+\+ Compiler, RVCT4.0 (.*)#m);
       
   121 push @environment_info, {name=>'RVCT4.0', version=>$rvct40_ver};
       
   122 
       
   123 # GCCE 4.4.1
       
   124 my $gcc441_ver = 'N.A.';
       
   125 my $gcc441_path = '';
       
   126 if (defined $ENV{'SBS_GCCE441BIN'})
       
   127 {
       
   128 	$gcc441_path = $ENV{'SBS_GCCE441BIN'};
       
   129 }
       
   130 elsif (defined $ENV{'GCCE441BIN'})
       
   131 {
       
   132 	$gcc441_path = $ENV{'GCCE441BIN'};
       
   133 }
       
   134 if ($gcc441_path)
       
   135 {
       
   136 	my $gcc441_cmd = "$gcc441_path\\arm-none-symbianelf-g++ -dumpversion";
       
   137 	my $gcc441_out = `$gcc441_cmd`;
       
   138 	$gcc441_ver = "4.4.1" if ($gcc441_out =~ /4.4.1/);
       
   139 }
       
   140 push @environment_info, {name=>'GCC4.4.1', version=>$gcc441_ver};
       
   141 
       
   142 # Helium
       
   143 my $helium_ver = 'N.A.';
       
   144 if ($ENV{'HELIUM_HOME'} && -f "$ENV{'HELIUM_HOME'}\\config\\version.txt")
       
   145 {
       
   146 	open(VERSION, "$ENV{'HELIUM_HOME'}\\config\\version.txt");
       
   147 	my $line = '';
       
   148 	while ($line = <VERSION>)
       
   149 	{
       
   150 		$helium_ver = $1 if ($line =~ /^helium\.version=(.*)/);
       
   151 	}
       
   152 	close(VERSION);
       
   153 }
       
   154 push @environment_info, {name=>'helium', version=>$helium_ver};
       
   155 
       
   156 # java
       
   157 my $java_ver = 'N.A.';
       
   158 my $java_out = `java -version 2>&1`;
       
   159 $java_ver = $1 if ($java_out =~ /^java version (.*)/m);
       
   160 push @environment_info, {name=>'java', version=>$java_ver};
       
   161 
       
   162 for my $tool_info (@environment_info)
       
   163 {
       
   164 	print $tool_info->{name} . ": " . $tool_info->{version} . "\n";
       
   165 }
       
   166 
       
   167 
       
   168 # write diamonds file
       
   169 if ($diamonds)
       
   170 {
       
   171 	@environment_info = reverse(@environment_info);
       
   172 	
       
   173 	my $xml_content = <<_EOX;
       
   174 <?xml version=\"1.0\" encoding=\"UTF-8\"?>
       
   175 <diamonds-build>
       
   176  <schema>10</schema>
       
   177   <tools>        
       
   178 _HERE_TOOLS_LINES_
       
   179   </tools>
       
   180 </diamonds-build>
       
   181 _EOX
       
   182 	
       
   183 	my $tools_lines = '';
       
   184 	for my $tool_info (@environment_info)
       
   185 	{
       
   186 		$tools_lines .= "   <tool><name>$tool_info->{name}</name><version>$tool_info->{version}</version></tool>\n";
       
   187 	}
       
   188 	
       
   189 	$xml_content =~ s/_HERE_TOOLS_LINES_/$tools_lines/;
       
   190 	
       
   191 	if (open(ENVINFO, ">$output"))
       
   192 	{
       
   193 		print ENVINFO $xml_content;
       
   194 		close(ENVINFO);
       
   195 		print "Wrote Diamonds file: $output\n";
       
   196 	}
       
   197 	else
       
   198 	{
       
   199 		warn "Could not write to file: $output\n";
       
   200 	}
       
   201 }