tools/versionchanger.pl
author David Anderson <dvander@alliedmods.net>
Sun Sep 14 16:26:38 2008 -0500 (2008-09-14)
changeset 2291 e6ebd563392e
parent 2281 fcb07f41ad91
permissions -rw-r--r--
Updated versionchanger.pl for Mercurial, FINALLY fixed its whitespace.
dvander@2291
     1
#!/usr/bin/perl
dvander@2291
     2
dvander@2291
     3
our %arguments =
dvander@2291
     4
(
dvander@2291
     5
	'config' => 'modules.versions',
dvander@2291
     6
	'major' => '1',
dvander@2291
     7
	'minor' => '0',
dvander@2291
     8
	'revision' => '0',
dvander@2291
     9
	'build' => undef,
dvander@2291
    10
	'path' => '',
dvander@2291
    11
	'buildstring' => '',
dvander@2291
    12
);
dvander@2291
    13
dvander@2291
    14
my $arg;
dvander@2291
    15
foreach $arg (@ARGV)
dvander@2291
    16
{
dvander@2291
    17
	$arg =~ s/--//;
dvander@2291
    18
	@arg = split(/=/, $arg);
dvander@2291
    19
	$arguments{$arg[0]} = $arg[1];
dvander@2291
    20
}
dvander@2291
    21
dvander@2291
    22
#Set up path info
dvander@2291
    23
if ($arguments{'path'} ne "")
dvander@2291
    24
{
dvander@2291
    25
	if (!(-d $arguments{'path'}))
dvander@2291
    26
	{
dvander@2291
    27
		die "Unable to find path: " . $arguments{'path'} ."\n";
dvander@2291
    28
	}
dvander@2291
    29
	chdir($arguments{'path'});
dvander@2291
    30
}
dvander@2291
    31
dvander@2291
    32
if (!open(CONFIG, $arguments{'config'}))
dvander@2291
    33
{
dvander@2291
    34
	die "Unable to open config file for reading: " . $arguments{'config'} . "\n";
dvander@2291
    35
}
dvander@2291
    36
dvander@2291
    37
our %modules;
dvander@2291
    38
my $cur_module = undef;
dvander@2291
    39
my $line;
dvander@2291
    40
while (<CONFIG>)
dvander@2291
    41
{
dvander@2291
    42
	chomp;
dvander@2291
    43
	$line = $_;
dvander@2291
    44
	if ($line =~ /^\[([^\]]+)\]$/)
dvander@2291
    45
	{
dvander@2291
    46
		$cur_module = $1;
dvander@2291
    47
		next;
dvander@2291
    48
	}
dvander@2291
    49
	if (!$cur_module)
dvander@2291
    50
	{
dvander@2291
    51
		next;
dvander@2291
    52
	}
dvander@2291
    53
	if ($line =~ /^([^=]+) = (.+)$/)
dvander@2291
    54
	{
dvander@2291
    55
		$modules{$cur_module}{$1} = $2;
dvander@2291
    56
	}
dvander@2291
    57
}
dvander@2291
    58
dvander@2291
    59
close(CONFIG);
dvander@2291
    60
dvander@2291
    61
#Copy global configuration options...
dvander@2291
    62
if (exists($modules{'PRODUCT'}))
dvander@2291
    63
{
dvander@2291
    64
	if (exists($modules{'PRODUCT'}{'major'}))
dvander@2291
    65
	{
dvander@2291
    66
		$arguments{'major'} = $modules{'PRODUCT'}{'major'};
dvander@2291
    67
	}
dvander@2291
    68
	if (exists($modules{'PRODUCT'}{'minor'}))
dvander@2291
    69
	{
dvander@2291
    70
		$arguments{'minor'} = $modules{'PRODUCT'}{'minor'};
dvander@2291
    71
	}
dvander@2291
    72
	if (exists($modules{'PRODUCT'}{'revision'}))
dvander@2291
    73
	{
dvander@2291
    74
		$arguments{'revision'} = $modules{'PRODUCT'}{'revision'};
dvander@2291
    75
	}
dvander@2291
    76
}
dvander@2291
    77
dvander@2291
    78
#Get the global SVN revision if we have none
dvander@2291
    79
my $rev;
dvander@2291
    80
if ($arguments{'build'} == undef)
dvander@2291
    81
{
dvander@2291
    82
	my ($text);
dvander@2291
    83
	$text = `hg identif -n -i`;
dvander@2291
    84
	chomp $text;
dvander@2291
    85
	$text =~ s/\+//g;
dvander@2291
    86
	my ($id,$num) = split(/ /, $text);
dvander@2291
    87
	$rev = "$num:$id";
dvander@2291
    88
} 
dvander@2291
    89
else 
dvander@2291
    90
{
dvander@2291
    91
	$rev = int($arguments{'build'});
dvander@2291
    92
}
dvander@2291
    93
dvander@2291
    94
my $major = $arguments{'major'};
dvander@2291
    95
my $minor = $arguments{'minor'};
dvander@2291
    96
my $revision = $arguments{'revision'};
dvander@2291
    97
my $buildstr = $arguments{'buildstring'};
dvander@2291
    98
dvander@2291
    99
#Go through everything now
dvander@2291
   100
my $mod_i;
dvander@2291
   101
while ( ($cur_module, $mod_i) = each(%modules) )
dvander@2291
   102
{
dvander@2291
   103
	#Skip the magic one
dvander@2291
   104
	if ($cur_module eq "PRODUCT")
dvander@2291
   105
	{
dvander@2291
   106
		next;
dvander@2291
   107
	}
dvander@2291
   108
	#Prepare path
dvander@2291
   109
	my %mod = %{$mod_i};
dvander@2291
   110
	my $infile = $mod{'in'};
dvander@2291
   111
	my $outfile = $mod{'out'};
dvander@2291
   112
	if ($mod{'folder'})
dvander@2291
   113
	{
dvander@2291
   114
		if (!(-d $mod{'folder'}))
dvander@2291
   115
		{
dvander@2291
   116
			die "Folder " . $mod{'folder'} . " not found.\n";
dvander@2291
   117
		}
dvander@2291
   118
		$infile = $mod{'folder'} . '/' . $infile;
dvander@2291
   119
		$outfile = $mod{'folder'} . '/' . $outfile;
dvander@2291
   120
	}
dvander@2291
   121
	if (!(-f $infile))
dvander@2291
   122
	{
dvander@2291
   123
		die "File $infile is not a file.\n";
dvander@2291
   124
	}
dvander@2291
   125
	#Start rewriting
dvander@2291
   126
	open(INFILE, $infile) or die "Could not open file for reading: $infile\n";
dvander@2291
   127
	open(OUTFILE, '>'.$outfile) or die "Could not open file for writing: $outfile\n";
dvander@2291
   128
	while (<INFILE>)
dvander@2291
   129
	{
dvander@2291
   130
		s/\$PMAJOR\$/$major/g;
dvander@2291
   131
		s/\$PMINOR\$/$minor/g;
dvander@2291
   132
		s/\$PREVISION\$/$revision/g;
dvander@2291
   133
		s/\$BUILD_ID\$/$rev/g;
dvander@2291
   134
		s/\$BUILD_STRING\$/$buildstr/g;
dvander@2291
   135
		print OUTFILE $_;
dvander@2291
   136
	}
dvander@2291
   137
	close(OUTFILE);
dvander@2291
   138
	close(INFILE);
dvander@2291
   139
}
dvander@2291
   140