dvander@2291: #!/usr/bin/perl dvander@2291: dvander@2291: our %arguments = dvander@2291: ( dvander@2291: 'config' => 'modules.versions', dvander@2291: 'major' => '1', dvander@2291: 'minor' => '0', dvander@2291: 'revision' => '0', dvander@2291: 'build' => undef, dvander@2291: 'path' => '', dvander@2291: 'buildstring' => '', dvander@2291: ); dvander@2291: dvander@2291: my $arg; dvander@2291: foreach $arg (@ARGV) dvander@2291: { dvander@2291: $arg =~ s/--//; dvander@2291: @arg = split(/=/, $arg); dvander@2291: $arguments{$arg[0]} = $arg[1]; dvander@2291: } dvander@2291: dvander@2291: #Set up path info dvander@2291: if ($arguments{'path'} ne "") dvander@2291: { dvander@2291: if (!(-d $arguments{'path'})) dvander@2291: { dvander@2291: die "Unable to find path: " . $arguments{'path'} ."\n"; dvander@2291: } dvander@2291: chdir($arguments{'path'}); dvander@2291: } dvander@2291: dvander@2291: if (!open(CONFIG, $arguments{'config'})) dvander@2291: { dvander@2291: die "Unable to open config file for reading: " . $arguments{'config'} . "\n"; dvander@2291: } dvander@2291: dvander@2291: our %modules; dvander@2291: my $cur_module = undef; dvander@2291: my $line; dvander@2291: while () dvander@2291: { dvander@2291: chomp; dvander@2291: $line = $_; dvander@2291: if ($line =~ /^\[([^\]]+)\]$/) dvander@2291: { dvander@2291: $cur_module = $1; dvander@2291: next; dvander@2291: } dvander@2291: if (!$cur_module) dvander@2291: { dvander@2291: next; dvander@2291: } dvander@2291: if ($line =~ /^([^=]+) = (.+)$/) dvander@2291: { dvander@2291: $modules{$cur_module}{$1} = $2; dvander@2291: } dvander@2291: } dvander@2291: dvander@2291: close(CONFIG); dvander@2291: dvander@2291: #Copy global configuration options... dvander@2291: if (exists($modules{'PRODUCT'})) dvander@2291: { dvander@2291: if (exists($modules{'PRODUCT'}{'major'})) dvander@2291: { dvander@2291: $arguments{'major'} = $modules{'PRODUCT'}{'major'}; dvander@2291: } dvander@2291: if (exists($modules{'PRODUCT'}{'minor'})) dvander@2291: { dvander@2291: $arguments{'minor'} = $modules{'PRODUCT'}{'minor'}; dvander@2291: } dvander@2291: if (exists($modules{'PRODUCT'}{'revision'})) dvander@2291: { dvander@2291: $arguments{'revision'} = $modules{'PRODUCT'}{'revision'}; dvander@2291: } dvander@2291: } dvander@2291: dvander@2291: #Get the global SVN revision if we have none dvander@2291: my $rev; dvander@2291: if ($arguments{'build'} == undef) dvander@2291: { dvander@2291: my ($text); dvander@2291: $text = `hg identif -n -i`; dvander@2291: chomp $text; dvander@2291: $text =~ s/\+//g; dvander@2291: my ($id,$num) = split(/ /, $text); dvander@2291: $rev = "$num:$id"; dvander@2291: } dvander@2291: else dvander@2291: { dvander@2291: $rev = int($arguments{'build'}); dvander@2291: } dvander@2291: dvander@2291: my $major = $arguments{'major'}; dvander@2291: my $minor = $arguments{'minor'}; dvander@2291: my $revision = $arguments{'revision'}; dvander@2291: my $buildstr = $arguments{'buildstring'}; dvander@2291: dvander@2291: #Go through everything now dvander@2291: my $mod_i; dvander@2291: while ( ($cur_module, $mod_i) = each(%modules) ) dvander@2291: { dvander@2291: #Skip the magic one dvander@2291: if ($cur_module eq "PRODUCT") dvander@2291: { dvander@2291: next; dvander@2291: } dvander@2291: #Prepare path dvander@2291: my %mod = %{$mod_i}; dvander@2291: my $infile = $mod{'in'}; dvander@2291: my $outfile = $mod{'out'}; dvander@2291: if ($mod{'folder'}) dvander@2291: { dvander@2291: if (!(-d $mod{'folder'})) dvander@2291: { dvander@2291: die "Folder " . $mod{'folder'} . " not found.\n"; dvander@2291: } dvander@2291: $infile = $mod{'folder'} . '/' . $infile; dvander@2291: $outfile = $mod{'folder'} . '/' . $outfile; dvander@2291: } dvander@2291: if (!(-f $infile)) dvander@2291: { dvander@2291: die "File $infile is not a file.\n"; dvander@2291: } dvander@2291: #Start rewriting dvander@2291: open(INFILE, $infile) or die "Could not open file for reading: $infile\n"; dvander@2291: open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n"; dvander@2291: while () dvander@2291: { dvander@2291: s/\$PMAJOR\$/$major/g; dvander@2291: s/\$PMINOR\$/$minor/g; dvander@2291: s/\$PREVISION\$/$revision/g; dvander@2291: s/\$BUILD_ID\$/$rev/g; dvander@2291: s/\$BUILD_STRING\$/$buildstr/g; dvander@2291: print OUTFILE $_; dvander@2291: } dvander@2291: close(OUTFILE); dvander@2291: close(INFILE); dvander@2291: } dvander@2291: