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