2 # This Source Code Form is subject to the terms of the Mozilla Public
3 # License, v. 2.0. If a copy of the MPL was not distributed with this
4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 package Moz
::Milestone
;
9 use vars
qw($officialMilestone
12 local $Moz::Milestone::milestone;
13 local $Moz::Milestone::officialMilestone;
16 # Usage: getOfficialMilestone($milestoneFile)
17 # Returns full milestone (x.x.x.x[ab12pre+])
19 sub getOfficialMilestone($) {
21 open(FILE,"$mfile") ||
22 die ("Can't open $mfile for reading!");
25 while($num =~ /^\s*#/ || $num !~ /^\d/) {
30 if ($num !~ /^\d/) { return; }
32 # Remove extra ^M caused by using dos-mode line-endings
33 chop $num if (substr($num, -1, 1) eq "\r");
34 $Moz::Milestone::officialMilestone = $num;
35 $Moz::Milestone::milestone = &getMilestoneNum;
40 # Usage: getMilestoneNum($num)
41 # Returns: milestone without a + if it exists.
44 if (defined($Moz::Milestone::milestone)) {
45 return $Moz::Milestone::milestone;
48 if (defined($Moz::Milestone::officialMilestone)) {
49 $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone;
51 $Moz::Milestone::milestone = $_[0];
54 if ($Moz::Milestone::milestone =~ /\+$/) { # for x.x.x+, strip off the +
55 $Moz::Milestone::milestone =~ s/\+$//;
58 return $Moz::Milestone::milestone;
62 # Usage: getMilestoneQualifier($num)
63 # Returns: + if it exists.
65 sub getMilestoneQualifier {
66 my $milestoneQualifier;
67 if (defined($Moz::Milestone::officialMilestone)) {
68 $milestoneQualifier = $Moz::Milestone::officialMilestone;
70 $milestoneQualifier = $_[0];
73 if ($milestoneQualifier =~ /\+$/) {
78 sub getMilestoneMajor {
80 if (defined($Moz::Milestone::milestone)) {
81 $milestoneMajor = $Moz::Milestone::milestone;
83 $milestoneMajor = $_[0];
85 my @parts = split(/\./,$milestoneMajor);
89 sub getMilestoneMinor {
91 if (defined($Moz::Milestone::milestone)) {
92 $milestoneMinor = $Moz::Milestone::milestone;
94 $milestoneMinor = $_[0];
96 my @parts = split(/\./,$milestoneMinor);
98 if ($#parts < 1 ) { return 0; }
102 sub getMilestoneMini {
104 if (defined($Moz::Milestone::milestone)) {
105 $milestoneMini = $Moz::Milestone::milestone;
107 $milestoneMini = $_[0];
109 my @parts = split(/\./,$milestoneMini);
111 if ($#parts < 2 ) { return 0; }
115 sub getMilestoneMicro {
117 if (defined($Moz::Milestone::milestone)) {
118 $milestoneMicro = $Moz::Milestone::milestone;
120 $milestoneMicro = $_[0];
122 my @parts = split(/\./,$milestoneMicro);
124 if ($#parts < 3 ) { return 0; }
130 if (defined($Moz::Milestone::milestone)) {
131 $milestoneAB = $Moz::Milestone::milestone;
133 $milestoneAB = $_[0];
136 if ($milestoneAB =~ /a/) { return "alpha"; }
137 if ($milestoneAB =~ /b/) { return "beta"; }
142 # Usage: getMilestoneABWithNum($milestoneFile)
143 # Returns the alpha and beta tag with its number (a1, a2, b3, ...)
145 sub getMilestoneABWithNum {
147 if (defined($Moz::Milestone::milestone)) {
148 $milestoneABNum = $Moz::Milestone::milestone;
150 $milestoneABNum = $_[0];
153 if ($milestoneABNum =~ /([ab]\d+)/) {
161 # build_file($template_file,$output_file)
166 my $MINI_VERSION = 0;
167 my $MICRO_VERSION = 0;
171 if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); }
172 @MILESTONE_PARTS = split(/\./, &getMilestoneNum);
173 if ($#MILESTONE_PARTS >= 2) {
176 $MILESTONE_PARTS[2] = 0;
178 if ($#MILESTONE_PARTS >= 3) {
181 $MILESTONE_PARTS[3] = 0;
183 if (! &getMilestoneQualifier) {
190 open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n");
194 open(FILE, ">$_[1]") || die("$0: Can't open $_[1] for writing!\n");
197 # There will be more of these based on what we need for files.
200 s/__MOZ_MAJOR_VERSION__/$MILESTONE_PARTS[0]/g;
201 s/__MOZ_MINOR_VERSION__/$MILESTONE_PARTS[1]/g;
202 s/__MOZ_MINI_VERSION__/$MILESTONE_PARTS[2]/g;
203 s/__MOZ_MICRO_VERSION__/$MILESTONE_PARTS[3]/g;
205 s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g;
207 if ($MICRO_VERSION) {
208 s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g;
215 die("$0: $_[0] doesn't exist for autoversioning!\n");