Bumping manifests a=b2g-bump
[gecko.git] / config / Moz / Milestone.pm
blob722203298fadea3c9cea47ece519361cd4568e9b
1 #!/usr/bin/perl -w
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;
7 use strict;
9 use vars qw($officialMilestone
10 $milestone);
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($) {
20 my $mfile = $_[0];
21 open(FILE,"$mfile") ||
22 die ("Can't open $mfile for reading!");
24 my $num = <FILE>;
25 while($num =~ /^\s*#/ || $num !~ /^\d/) {
26 $num = <FILE>;
29 close(FILE);
30 if ($num !~ /^\d/) { return; }
31 chomp($num);
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;
36 return $num;
40 # Usage: getMilestoneNum($num)
41 # Returns: milestone without a + if it exists.
43 sub getMilestoneNum {
44 if (defined($Moz::Milestone::milestone)) {
45 return $Moz::Milestone::milestone;
48 if (defined($Moz::Milestone::officialMilestone)) {
49 $Moz::Milestone::milestone = $Moz::Milestone::officialMilestone;
50 } else {
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;
69 } else {
70 $milestoneQualifier = $_[0];
73 if ($milestoneQualifier =~ /\+$/) {
74 return "+";
78 sub getMilestoneMajor {
79 my $milestoneMajor;
80 if (defined($Moz::Milestone::milestone)) {
81 $milestoneMajor = $Moz::Milestone::milestone;
82 } else {
83 $milestoneMajor = $_[0];
85 my @parts = split(/\./,$milestoneMajor);
86 return $parts[0];
89 sub getMilestoneMinor {
90 my $milestoneMinor;
91 if (defined($Moz::Milestone::milestone)) {
92 $milestoneMinor = $Moz::Milestone::milestone;
93 } else {
94 $milestoneMinor = $_[0];
96 my @parts = split(/\./,$milestoneMinor);
98 if ($#parts < 1 ) { return 0; }
99 return $parts[1];
102 sub getMilestoneMini {
103 my $milestoneMini;
104 if (defined($Moz::Milestone::milestone)) {
105 $milestoneMini = $Moz::Milestone::milestone;
106 } else {
107 $milestoneMini = $_[0];
109 my @parts = split(/\./,$milestoneMini);
111 if ($#parts < 2 ) { return 0; }
112 return $parts[2];
115 sub getMilestoneMicro {
116 my $milestoneMicro;
117 if (defined($Moz::Milestone::milestone)) {
118 $milestoneMicro = $Moz::Milestone::milestone;
119 } else {
120 $milestoneMicro = $_[0];
122 my @parts = split(/\./,$milestoneMicro);
124 if ($#parts < 3 ) { return 0; }
125 return $parts[3];
128 sub getMilestoneAB {
129 my $milestoneAB;
130 if (defined($Moz::Milestone::milestone)) {
131 $milestoneAB = $Moz::Milestone::milestone;
132 } else {
133 $milestoneAB = $_[0];
136 if ($milestoneAB =~ /a/) { return "alpha"; }
137 if ($milestoneAB =~ /b/) { return "beta"; }
138 return "final";
142 # Usage: getMilestoneABWithNum($milestoneFile)
143 # Returns the alpha and beta tag with its number (a1, a2, b3, ...)
145 sub getMilestoneABWithNum {
146 my $milestoneABNum;
147 if (defined($Moz::Milestone::milestone)) {
148 $milestoneABNum = $Moz::Milestone::milestone;
149 } else {
150 $milestoneABNum = $_[0];
153 if ($milestoneABNum =~ /([ab]\d+)/) {
154 return $1;
155 } else {
156 return "";
161 # build_file($template_file,$output_file)
163 sub build_file($$) {
164 my @FILE;
165 my @MILESTONE_PARTS;
166 my $MINI_VERSION = 0;
167 my $MICRO_VERSION = 0;
168 my $OFFICIAL = 0;
169 my $QUALIFIER = "";
171 if (!defined($Moz::Milestone::milestone)) { die("$0: no milestone file set!\n"); }
172 @MILESTONE_PARTS = split(/\./, &getMilestoneNum);
173 if ($#MILESTONE_PARTS >= 2) {
174 $MINI_VERSION = 1;
175 } else {
176 $MILESTONE_PARTS[2] = 0;
178 if ($#MILESTONE_PARTS >= 3) {
179 $MICRO_VERSION = 1;
180 } else {
181 $MILESTONE_PARTS[3] = 0;
183 if (! &getMilestoneQualifier) {
184 $OFFICIAL = 1;
185 } else {
186 $QUALIFIER = "+";
189 if (-e $_[0]) {
190 open(FILE, "$_[0]") || die("$0: Can't open $_[0] for reading!\n");
191 @FILE = <FILE>;
192 close(FILE);
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.
199 foreach(@FILE) {
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;
204 if ($MINI_VERSION) {
205 s/__MOZ_OPTIONAL_MINI_VERSION__/.$MILESTONE_PARTS[2]/g;
207 if ($MICRO_VERSION) {
208 s/__MOZ_OPTIONAL_MICRO_VERSION__/.$MILESTONE_PARTS[3]/g;
211 print FILE $_;
213 close(FILE);
214 } else {
215 die("$0: $_[0] doesn't exist for autoversioning!\n");