#!/usr/bin/perl # # Update a NASM version file # # The NASM version number is assumed to consist of: # # .[.][pl]] # # ... where is not necessarily numeric, but if it is of the form # - it is assumed to be a snapshot release. # # Usage: # update_version version file # # Returns true on an update # ($new_ver, $file) = @ARGV; sub version_id($) { my ($line) = @_; my ($man, $min, $smin, $plvl, $tail); my $is_rc = 0; if ( $line =~ /^([0-9]+)\.([0-9]+)(.*)$/ ) { $maj = $1; $min = $2; $tail = $3; if ( $tail =~ /^\.([0-9]+)(.*)$/ ) { $smin = $1; $tail = $2; } if ( $tail =~ /^(pl|\.)([0-9]+)(.*)$/ ) { $plvl = $2; $tail = $3; } elsif ( $tail =~ /^rc([0-9]+)(.*)$/ ) { $is_rc = 1; $plvl = $1; $tail = $2; } } else { die "$0: Invalid input format\n"; } my $snapshot; if ($tail =~ /^\-([0-9]+)/) { $snapshot = $1; } else { undef $snapshot; } my $nmaj = $maj+0; my $nmin = $min+0; my $nsmin = $smin+0; my $nplvl = $plvl+0; if ($is_rc) { $nplvl += 90; if ($nsmin > 0) { $nsmin--; } else { $nsmin = 99; if ($nmin > 0) { $nmin--; } else { $nmin = 99; $nmaj--; } } } my $nasm_id = ($nmaj << 24)+($nmin << 16)+($nsmin << 8)+$nplvl; return $nasm_id; } $new_id = version_id($new_ver); $is_rc = ($new_ver =~ /rc/) ? 1 : 0; require $file; $change = 0; if ($is_rc) { if (!defined($rc_version) || $new_id > version_id($rc_version)) { $rc_version = $new_ver; $change = 1; } } else { if (!defined($version) || $new_id > version_id($version)) { $version = $new_ver; $change = 1; } } if (defined($rc_version) && version_id($rc_version) <= version_id($version)) { undef $rc_version; $change = 1; } if (!$change) { exit 1; # No update happened } open(FILE, '>', $file) or die; # This file is cleverly organized to be valid PHP *and* valid Perl... print FILE "# \n"; close(FILE); exit 0;