The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w

# This file is part of the build tools for Win32::GUI
# It expects to be run in the same directory as the make
# command is run from, and updates the VERSIONINFO resource
# definition

# it is typically invoked as
#  make GUI.rc
# or automatically as part of the build process

#
# Author: Robert May , rmay@popeslane.clara.co.uk
# $Id: updateRC.pl,v 1.2 2007/07/30 22:04:49 robertemay Exp $

use strict;
use warnings;

use BuildTools;

$|++; #AUTOFLUSH

my $rcfile = 'GUI.rc';

my $version = BuildTools::macro_subst('__W32G_VERSION__');
my $year    = BuildTools::macro_subst('__W32G_YEAR__');

my $changed = 0;
my $outtext = q();

# Parse $version into 4 parts:
my($maj, $min, $rc, $extra) = split(/\.|_/, $version . '.00.00.00');

# strip leading zeroes (old cygwin does not like it)
$maj   *= 1;
$min   *= 1;
$rc    *= 1;
$extra *= 1;

print 'Checking RC file ... ';

open(my $in, '<', $rcfile) or die "Failed to open $rcfile for reading: $!";
while (my $inline = <$in>) {
	my $outline = $inline;

	if($outline =~ /FILEVERSION/) {
		$outline =~ s/\d+,\d+,\d+,\d+/$maj,$min,$rc,$extra/;
	}
	elsif($outline =~ /PRODUCTVERSION/) {
		$outline =~ s/\d+,\d+,\d+,\d+/$maj,$min,$rc,$extra/;
	}
	elsif($outline =~ /VALUE.*FileVersion/) {
		$outline =~ s/"[^"]*"$/"$version"/;
	}
	elsif($outline =~ /VALUE.*ProductVersion/) {
		$outline =~ s/"[^"]*"$/"$version"/;
	}
	elsif($outline =~ /VALUE.*Comments/) {
		$outline =~ s/v.*"$/v$version"/;
	}
	elsif($outline =~ /VALUE.*LegalCopyright/) {
		$outline =~ s/\d{4}"$/$year"/;
	}

	$changed = 1 unless $inline eq $outline;
	$outtext .= $outline;
}
close($in);

# write out the new rcfile, if it changed
if($changed) {
    my $out;
    if(!open($out, '>', $rcfile)) {
        chmod 0644, $rcfile;
        open($out, '>', $rcfile) or die "Failed to open $rcfile for writing";
    }
    print $out $outtext;
    close($out);
}

print $changed ? 'updated' : 'no change', ".\n";

exit(0);