| #!/usr/bin/perl -w |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| package Moz::Milestone; |
| use strict; |
| |
| use vars qw($officialMilestone |
| $milestone); |
| |
| local $Moz::Milestone::milestone; |
| local $Moz::Milestone::officialMilestone; |
| |
| # |
| # Usage: getOfficialMilestone($milestoneFile) |
| # Returns full milestone (x.x.x.x[ab12pre+]) |
| # |
| sub getOfficialMilestone($) { |
| my $mfile = $_[0]; |
| open(FILE,"$mfile") || |
| die ("Can't open $mfile for reading!"); |
| |
| my $num = <FILE>; |
| while($num =~ /^\s*#/ || $num !~ /^\d/) { |
| $num = <FILE>; |
| } |
| |
| close(FILE); |
| if ($num !~ /^\d/) { return; } |
| chomp($num); |
| # Remove extra ^M caused by using dos-mode line-endings |
| chop $num if (substr($num, -1, 1) eq "\r"); |
| $Moz::Milestone::officialMilestone = $num; |
| $Moz::Milestone::milestone = &getMilestoneNum; |
| return $num; |
| } |
| |
| # |
| # Usage: getMilestoneNum($num) |
| # Returns: milestone without a + if it exists. |
| # |
| sub getMilestoneNum { |
| if (defined($Moz::Milestone::milestone)) { |
| return $Moz::Milestone::milestone; |
| } |
| |
| if (defined($Moz::Milestone::officialMilestone)) { |
| $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone; |
| } else { |
| $Moz::Milestone::milestone = $_[0]; |
| } |
| |
| if ($Moz::Milestone::milestone =~ /\+$/) { # for x.x.x+, strip off the + |
| $Moz::Milestone::milestone =~ s/\+$//; |
| } |
| |
| return $Moz::Milestone::milestone; |
| } |
| |
| # |
| # Usage: getMilestoneQualifier($num) |
| # Returns: + if it exists. |
| # |
| sub getMilestoneQualifier { |
| my $milestoneQualifier; |
| if (defined($Moz::Milestone::officialMilestone)) { |
| $milestoneQualifier = $Moz::Milestone::officialMilestone; |
| } else { |
| $milestoneQualifier = $_[0]; |
| } |
| |
| if ($milestoneQualifier =~ /\+$/) { |
| return "+"; |
| } |
| } |
| |
| sub getMilestoneMajor { |
| my $milestoneMajor; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneMajor = $Moz::Milestone::milestone; |
| } else { |
| $milestoneMajor = $_[0]; |
| } |
| my @parts = split(/\./,$milestoneMajor); |
| return $parts[0]; |
| } |
| |
| sub getMilestoneMinor { |
| my $milestoneMinor; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneMinor = $Moz::Milestone::milestone; |
| } else { |
| $milestoneMinor = $_[0]; |
| } |
| my @parts = split(/\./,$milestoneMinor); |
| |
| if ($#parts < 1 ) { return 0; } |
| return $parts[1]; |
| } |
| |
| sub getMilestoneMini { |
| my $milestoneMini; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneMini = $Moz::Milestone::milestone; |
| } else { |
| $milestoneMini = $_[0]; |
| } |
| my @parts = split(/\./,$milestoneMini); |
| |
| if ($#parts < 2 ) { return 0; } |
| return $parts[2]; |
| } |
| |
| sub getMilestoneMicro { |
| my $milestoneMicro; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneMicro = $Moz::Milestone::milestone; |
| } else { |
| $milestoneMicro = $_[0]; |
| } |
| my @parts = split(/\./,$milestoneMicro); |
| |
| if ($#parts < 3 ) { return 0; } |
| return $parts[3]; |
| } |
| |
| sub getMilestoneAB { |
| my $milestoneAB; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneAB = $Moz::Milestone::milestone; |
| } else { |
| $milestoneAB = $_[0]; |
| } |
| |
| if ($milestoneAB =~ /a/) { return "alpha"; } |
| if ($milestoneAB =~ /b/) { return "beta"; } |
| return "final"; |
| } |
| |
| # |
| # Usage: getMilestoneABWithNum($milestoneFile) |
| # Returns the alpha and beta tag with its number (a1, a2, b3, ...) |
| # |
| sub getMilestoneABWithNum { |
| my $milestoneABNum; |
| if (defined($Moz::Milestone::milestone)) { |
| $milestoneABNum = $Moz::Milestone::milestone; |
| } else { |
| $milestoneABNum = $_[0]; |
| } |
| |
| if ($milestoneABNum =~ /([ab]\d+)/) { |
| return $1; |
| } else { |
| return ""; |
| } |
| } |
| |
| # |
| # build_file($template_file,$output_file) |
| # |
| sub build_file($$) { |
| my @FILE; |
| my @MILESTONE_PARTS; |
| my $MINI_VERSION = 0; |
| my $MICRO_VERSION = 0; |
| my $OFFICIAL = 0; |
| my $QUALIFIER = ""; |
| |
| if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); } |
| @MILESTONE_PARTS = split(/\./, &getMilestoneNum); |
| if ($#MILESTONE_PARTS >= 2) { |
| $MINI_VERSION = 1; |
| } else { |
| $MILESTONE_PARTS[2] = 0; |
| } |
| if ($#MILESTONE_PARTS >= 3) { |
| $MICRO_VERSION = 1; |
| } else { |
| $MILESTONE_PARTS[3] = 0; |
| } |
| if (! &getMilestoneQualifier) { |
| $OFFICIAL = 1; |
| } else { |
| $QUALIFIER = "+"; |
| } |
| |
| if (-e $_[0]) { |
| open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n"); |
| @FILE = <FILE>; |
| close(FILE); |
| |
| open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n"); |
| |
| # |
| # There will be more of these based on what we need for files. |
| # |
| foreach(@FILE) { |
| s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g; |
| s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g; |
| s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g; |
| s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g; |
| if ($MINI_VERSION) { |
| s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g; |
| } |
| if ($MICRO_VERSION) { |
| s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g; |
| } |
| |
| print FILE $_; |
| } |
| close(FILE); |
| } else { |
| die("$0: $_[0] doesn't exist for autoversioning!\n"); |
| } |
| |
| } |
| |
| 1; |