bugscape 17934, which has code for unhardcoding versions in both trees

(bugzilla reference 169074).  r=cls, no sr= needed for build changes.
This commit is contained in:
asasaki%netscape.com 2002-11-08 23:04:01 +00:00
Родитель 5f86d68b4e
Коммит c3af22841a
7 изменённых файлов: 552 добавлений и 47 удалений

Просмотреть файл

@ -16,6 +16,7 @@ use File::Path;
use Mac::Files;
use Moz::Moz;
use Moz::Milestone;
use vars qw( @ISA @EXPORT );
@ -184,6 +185,25 @@ sub addToJarFile($$$$$$$)
my($src) = $jar_man_dir.":".$file_src;
if ((!-e $src) && ($file_src =~ m/.+:([^:]+)$/)) # src does not exist. Fall back to looking for src in jar.mn dir
{
my $tmpl_file = "$src.tmpl";
if (-e $tmpl_file) {
my $mfile = $src;
#
# A sloppy way of getting $topsrcdir... but not sure how to do it otherwise.
#
if ($mfile =~ /:ns:/) {
$mfile =~ s/:ns:.*$/:ns/;
} else {
$mfile =~ s/:mozilla:.*$/:mozilla/;
}
$mfile =~ s/:$//;
$mfile .= ":config:milestone.txt";
Moz::Milestone::getOfficialMilestone($mfile);
Moz::Milestone::build_file($tmpl_file,$src);
}
else {
$file_src = $1;
$src = $jar_man_dir.":".$file_src;
@ -191,6 +211,7 @@ sub addToJarFile($$$$$$$)
die "Error: Can't find chrome file $src\n";
}
}
}
if ($main::options{chrome_jars})
{

Просмотреть файл

@ -0,0 +1,230 @@
#!/usr/bin/perl -w
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is the Win32 Version System.
#
# The Initial Developer of the Original Code is Netscape Communications Corporation
# Portions created by the Initial Developer are Copyright (C) 2002
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
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);
$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";
}
#
# 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;

230
config/Moz/Milestone.pm Executable file
Просмотреть файл

@ -0,0 +1,230 @@
#!/usr/bin/perl -w
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is the Win32 Version System.
#
# The Initial Developer of the Original Code is Netscape Communications Corporation
# Portions created by the Initial Developer are Copyright (C) 2002
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
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);
$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";
}
#
# 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;

Просмотреть файл

@ -261,6 +261,7 @@ sub RegIt
sub EnsureFileInDir
{
my ($destPath, $srcPath, $destFile, $srcFile, $override, $preproc) = @_;
my $objPath;
#print "EnsureFileInDir($destPath, $srcPath, $destFile, $srcFile, $override)\n";
@ -316,9 +317,14 @@ sub EnsureFileInDir
if ($srcPath) {
$file = $srcPath;
}
$objPath = "$objdir/$destFile";
if (!-e $file) {
if (!-e $objPath) {
die "error: file '$file' doesn't exist";
} else {
$file = "$objPath";
}
}
if (!-e $dir) {
mkpath($dir, 0, 0775) || die "can't mkpath $dir: $!";

Просмотреть файл

@ -38,71 +38,73 @@ use Getopt::Long;
use strict;
use vars qw(
$OBJDIR
$SRCDIR
$TOPSRCDIR
$SCRIPTDIR
@TEMPLATE_FILE
$MILESTONE_FILE
$MILESTONE
$MILESTONE_NUM
@MILESTONE_PARTS
$MILESTONE_BUILD
$MILESTONE_QUALIFIER
$opt_getms
$MINI_VERSION
$MICRO_VERSION
$opt_debug
$opt_template
$opt_help
);
&GetOptions('topsrcdir=s' => \$TOPSRCDIR, 'getms', 'debug', 'help');
$SCRIPTDIR = $0;
$SCRIPTDIR =~ s/[^\/]*$//;
push(@INC,$SCRIPTDIR);
require "Moz/Milestone.pm";
&GetOptions('topsrcdir=s' => \$TOPSRCDIR, 'srcdir=s' => \$SRCDIR, 'objdir=s' => \$OBJDIR, 'debug', 'help', 'template');
if (defined($opt_help)) {
&usage();
exit;
}
if (defined($opt_template)) {
@TEMPLATE_FILE = @ARGV;
if ($opt_debug) {
print("TEMPLATE_FILE = --@TEMPLATE_FILE--\n");
}
}
if (!defined($SRCDIR)) { $SRCDIR = '.'; }
if (!defined($OBJDIR)) { $OBJDIR = '.'; }
$MILESTONE_FILE = "$TOPSRCDIR/config/milestone.txt";
@MILESTONE_PARTS = (0, 0, 0, 0);
$MILESTONE_QUALIFIER = "";
#
# Grab milestone (top line of $MILESTONE_FILE that starts with a digit)
#
open(FILE,"$MILESTONE_FILE") ||
die ("Can't open $MILESTONE_FILE for reading!");
$MILESTONE = <FILE>;
while($MILESTONE =~ /^\s*#/ || $MILESTONE !~ /^\d/) {
$MILESTONE = <FILE>;
}
close(FILE);
chomp($MILESTONE);
$MILESTONE_NUM = $MILESTONE;
Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
#
# Split the milestone into parts (major, minor, minor2, minor3, ...)
#
if ($MILESTONE =~ /\+$/) { # for things like 0.9.9+, strip off the +
$MILESTONE_QUALIFIER = "+";
$MILESTONE_NUM =~ s/\D*$//;
}
@MILESTONE_PARTS = split(/\./, $MILESTONE_NUM);
if (defined(@TEMPLATE_FILE)) {
my $TFILE;
if ($opt_debug) {
print ("MS $MILESTONE MSNUM $MILESTONE_NUM MSQ $MILESTONE_QUALIFIER MS_PARTS @MILESTONE_PARTS\n");
}
foreach $TFILE (@TEMPLATE_FILE) {
my $BUILT_FILE = "$OBJDIR/$TFILE";
$TFILE = "$SRCDIR/$TFILE.tmpl";
if ($opt_getms && !$MILESTONE_QUALIFIER) {
print "$MILESTONE";
exit;
}
if (-e $TFILE) {
# TODO
# Later on I'll add options to update *all* hardcoded versions in
# the source tree...
# probably have a file listing all files that need to be changed,
# and replace them with templates that have __MOZ_MAJOR_VERSION__
# or whatever in place of 0, __MOZ_MINOR_VERSION__ instead of 9,
# etc., given the right options.
Moz::Milestone::build_file($TFILE,$BUILT_FILE);
} else {
warn("$0: No such file $TFILE!\n");
}
}
}
sub usage() {
print <<END
`milestone.pl [--topsrcdir TOPSRCDIR] --getms` # will output \$MILESTONE if no '+'
`milestone.pl [--topsrcdir TOPSRCDIR] [--objdir OBJDIR] [--srcdir SRCDIR] --template [file list]` # will build file list from .tmpl files
END
;
}

Просмотреть файл

@ -61,8 +61,14 @@ endif
ifdef PROGRAM
_RC_STRING += -BINARY $(PROGRAM)
else
ifdef _PROGRAM
_RC_STRING += -BINARY $(_PROGRAM)
else
ifdef SHARED_LIBRARY
_RC_STRING += -BINARY $(SHARED_LIBRARY)
endif
endif
endif
ifdef RCINCLUDE
_RC_STRING += -RCINCLUDE $(srcdir)/$(RCINCLUDE)
endif
@ -79,5 +85,11 @@ endif # RESFILE
endif # Windows
ifdef VERSION_TMPL
GARBAGE += $(VERSION_TMPL)
export::
$(PERL) $(topsrcdir)/config/milestone.pl --topsrcdir $(topsrcdir) --objdir . --srcdir $(srcdir) --template $(VERSION_TMPL)
endif
endif

Просмотреть файл

@ -37,6 +37,10 @@
#use diagnostics;
require strict;
my $dir = $0;
$dir =~ s/[^\/]*$//;
push(@INC, "$dir");
require "Moz/Milestone.pm";
use Getopt::Long;
use Getopt::Std;
@ -203,16 +207,16 @@ if ($official eq "1") {
$fileflags = "VS_FF_PRERELEASE | VS_FF_DEBUG";
}
# Try to grab milestone from milestone.pl
# Try to grab milestone.
# I'd love to put this in the makefiles rather than here,
# since I could run it once per build rather than once per
# dll/program, but I can't seem to get backticks working
# properly in the makefiles =P
if ($milestone eq "") {
$milestone = `perl $topsrcdir/config/milestone.pl --topsrcdir $topsrcdir --getms`;
$milestone = Moz::Milestone::getOfficialMilestone();
}
if ($milestone ne "") {
if ($milestone ne "" && $milestone !~ /\+$/) {
#its a milestone build
$mpversion = $milestone;