tools/versionchanger.pl
author David Anderson <dvander@alliedmods.net>
Wed Apr 09 05:59:21 2008 +0000 (2008-04-09)
changeset 1976 fd2c6a89845d
parent 1952 b7aa2b626807
child 2281 fcb07f41ad91
permissions -rw-r--r--
reverted compiler change that didn't work out so well
ds@1952
     1
#!/usr/bin/perl
ds@1952
     2
ds@1952
     3
our %arguments =
ds@1952
     4
(
ds@1952
     5
	'config' => 'modules.versions',
ds@1952
     6
	'major' => '1',
ds@1952
     7
	'minor' => '0',
ds@1952
     8
	'revision' => '0',
ds@1952
     9
	'build' => undef,
ds@1952
    10
	'svnrev' => 'global',
ds@1952
    11
	'path' => '',
ds@1952
    12
);
ds@1952
    13
ds@1952
    14
my $arg;
ds@1952
    15
foreach $arg (@ARGV)
ds@1952
    16
{
ds@1952
    17
	$arg =~ s/--//;
ds@1952
    18
	@arg = split(/=/, $arg);
ds@1952
    19
	$arguments{$arg[0]} = $arg[1];
ds@1952
    20
}
ds@1952
    21
ds@1952
    22
#Set up path info
ds@1952
    23
if ($arguments{'path'} ne "")
ds@1952
    24
{
ds@1952
    25
	if (!(-d $arguments{'path'}))
ds@1952
    26
	{
ds@1952
    27
		die "Unable to find path: " . $arguments{'path'} ."\n";
ds@1952
    28
	}
ds@1952
    29
	chdir($arguments{'path'});
ds@1952
    30
}
ds@1952
    31
ds@1952
    32
if (!open(CONFIG, $arguments{'config'}))
ds@1952
    33
{
ds@1952
    34
	die "Unable to open config file for reading: " . $arguments{'config'} . "\n";
ds@1952
    35
}
ds@1952
    36
ds@1952
    37
our %modules;
ds@1952
    38
my $cur_module = undef;
ds@1952
    39
my $line;
ds@1952
    40
while (<CONFIG>)
ds@1952
    41
{
ds@1952
    42
	chomp;
ds@1952
    43
	$line = $_;
ds@1952
    44
	if ($line =~ /^\[([^\]]+)\]$/)
ds@1952
    45
	{
ds@1952
    46
		$cur_module = $1;
ds@1952
    47
		next;
ds@1952
    48
	}
ds@1952
    49
	if (!$cur_module)
ds@1952
    50
	{
ds@1952
    51
		next;
ds@1952
    52
	}
ds@1952
    53
	if ($line =~ /^([^=]+) = (.+)$/)
ds@1952
    54
	{
ds@1952
    55
		$modules{$cur_module}{$1} = $2;
ds@1952
    56
	}
ds@1952
    57
}
ds@1952
    58
ds@1952
    59
close(CONFIG);
ds@1952
    60
ds@1952
    61
#Copy global configuration options...
ds@1952
    62
if (exists($modules{'PRODUCT'}))
ds@1952
    63
{
ds@1952
    64
	if (exists($modules{'PRODUCT'}{'major'}))
ds@1952
    65
	{
ds@1952
    66
		$arguments{'major'} = $modules{'PRODUCT'}{'major'};
ds@1952
    67
	}
ds@1952
    68
	if (exists($modules{'PRODUCT'}{'minor'}))
ds@1952
    69
	{
ds@1952
    70
		$arguments{'minor'} = $modules{'PRODUCT'}{'minor'};
ds@1952
    71
	}
ds@1952
    72
	if (exists($modules{'PRODUCT'}{'revision'}))
ds@1952
    73
	{
ds@1952
    74
		$arguments{'revision'} = $modules{'PRODUCT'}{'revision'};
ds@1952
    75
	}
ds@1952
    76
	if (exists($modules{'PRODUCT'}{'svnrev'}))
ds@1952
    77
	{
ds@1952
    78
		$arguments{'svnrev'} = $modules{'PRODUCT'}{'svnrev'};
ds@1952
    79
	}
ds@1952
    80
}
ds@1952
    81
ds@1952
    82
#Get the global SVN revision if we have none
ds@1952
    83
my $rev;
ds@1952
    84
if ($arguments{'build'} == undef)
ds@1952
    85
{
ds@1952
    86
	$rev = GetRevision(undef);
ds@1952
    87
} else {
ds@1952
    88
	$rev = int($arguments{'build'});
ds@1952
    89
}
ds@1952
    90
ds@1952
    91
my $major = $arguments{'major'};
ds@1952
    92
my $minor = $arguments{'minor'};
ds@1952
    93
my $revision = $arguments{'revision'};
ds@1952
    94
my $svnrev = $arguments{'svnrev'};
ds@1952
    95
ds@1952
    96
#Go through everything now
ds@1952
    97
my $mod_i;
ds@1952
    98
while ( ($cur_module, $mod_i) = each(%modules) )
ds@1952
    99
{
ds@1952
   100
	#Skip the magic one
ds@1952
   101
	if ($cur_module eq "PRODUCT")
ds@1952
   102
	{
ds@1952
   103
		next;
ds@1952
   104
	}
ds@1952
   105
	#Prepare path
ds@1952
   106
	my %mod = %{$mod_i};
ds@1952
   107
	my $infile = $mod{'in'};
ds@1952
   108
	my $outfile = $mod{'out'};
ds@1952
   109
	if ($mod{'folder'})
ds@1952
   110
	{
ds@1952
   111
		if (!(-d $mod{'folder'}))
ds@1952
   112
		{
ds@1952
   113
			die "Folder " . $mod{'folder'} . " not found.\n";
ds@1952
   114
		}
ds@1952
   115
		$infile = $mod{'folder'} . '/' . $infile;
ds@1952
   116
		$outfile = $mod{'folder'} . '/' . $outfile;
ds@1952
   117
	}
ds@1952
   118
	if (!(-f $infile))
ds@1952
   119
	{
ds@1952
   120
		die "File $infile is not a file.\n";
ds@1952
   121
	}
ds@1952
   122
	my $global_rev = $rev;
ds@1952
   123
	my $local_rev = GetRevision($mod{'folder'});
ds@1952
   124
	if ($arguments{'svnrev'} eq 'local')
ds@1952
   125
	{
ds@1952
   126
		$global_rev = $local_rev;
ds@1952
   127
	}
ds@1952
   128
	#Start rewriting
ds@1952
   129
	open(INFILE, $infile) or die "Could not open file for reading: $infile\n";
ds@1952
   130
	open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n";
ds@1952
   131
	while (<INFILE>)
ds@1952
   132
	{
ds@1952
   133
		s/\$PMAJOR\$/$major/g;
ds@1952
   134
		s/\$PMINOR\$/$minor/g;
ds@1952
   135
		s/\$PREVISION\$/$revision/g;
ds@1952
   136
		s/\$GLOBAL_BUILD\$/$rev/g;
ds@1952
   137
		s/\$LOCAL_BUILD\$/$local_rev/g;
ds@1952
   138
		print OUTFILE $_;
ds@1952
   139
	}
ds@1952
   140
	close(OUTFILE);
ds@1952
   141
	close(INFILE);
ds@1952
   142
}
ds@1952
   143
ds@1952
   144
sub GetRevision
ds@1952
   145
{
ds@1952
   146
	my ($path)=(@_);
ds@1952
   147
	my $rev;
ds@1952
   148
	if (!$path)
ds@1952
   149
	{
ds@1952
   150
		$rev = `svnversion --committed`;
ds@1952
   151
	} else {
ds@1952
   152
		$rev = `svnversion --committed $path`;
ds@1952
   153
	}
ds@1952
   154
	if ($rev =~ /exported/)
ds@1952
   155
	{
ds@1952
   156
		die "Path specified is not a working copy\n";
ds@1952
   157
	} elsif ($rev =~ /(\d+):(\d+)/) {
ds@1952
   158
		$rev = int($2);
ds@1952
   159
	} elsif ($rev =~ /(\d+)/) {
ds@1952
   160
		$rev = int($1);
ds@1952
   161
	} else {
ds@1952
   162
		die "Unknown svnversion response: $rev\n";
ds@1952
   163
	}
ds@1952
   164
	return $rev;
ds@1952
   165
}