mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-05 08:35:26 +00:00
ef404f92ee
Bug 52417 (add downloader code) Bug 64179 ('K' should be 'KB') Bug 62560 (misspelled 'Existence') Bug 64550 (remove 'Seamonkey' reference) Bug 60352 (add crc check to installer) Bug 62991 (psm check crashes n6 setup) Bug 58267 (npoji600.dll) Bug 47274 (Title should be 'Mozilla Setup') Bug 66497 (installer need to clean up windows registry) Bug 66498 (uninstaller checking itself) Bug 64566 (shouldn't be able to start multiple Setup) Bug 56292 (Alt-r conflict in Setup Type dialog) Bug 31821 (force-upgrade support) r=deveditz sr=mscott affects windows platforms only!
189 lines
6.0 KiB
Perl
189 lines
6.0 KiB
Perl
#!c:\perl\bin\perl
|
|
#
|
|
# The contents of this file are subject to the Netscape 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/NPL/
|
|
#
|
|
# 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 Mozilla Communicator client code, released
|
|
# March 31, 1998.
|
|
#
|
|
# The Initial Developer of the Original Code is Netscape
|
|
# Communications Corporation. Portions created by Netscape are
|
|
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
|
|
# Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Sean Su <ssu@netscape.com>
|
|
#
|
|
|
|
#
|
|
# This perl script parses the input file for special variables
|
|
# in the format of $Variable$ and replace it with the appropriate
|
|
# value(s).
|
|
#
|
|
# Input: .jst file - which is a .js template
|
|
# default version - a date in the form of:
|
|
# major.minor.release.yyyymmdyhr
|
|
# ie: 5.0.0.1999120910
|
|
# component staging path - path to where the components are staged at
|
|
#
|
|
# ie: perl makejs.pl xpcom.jst 5.0.0.99256
|
|
#
|
|
|
|
# Make sure there are at least two arguments
|
|
if($#ARGV < 2)
|
|
{
|
|
die "usage: $0 <.jst file> <default version> <staging path>
|
|
|
|
.jst file : .js template input file
|
|
default version : default julian base version number to use in the
|
|
form of: major.minor.release.yydoy
|
|
ie: 5.0.0.99256
|
|
component staging path : path to where this component is staged at
|
|
ie: z:\\stage\\windows\\32bit\\en\\5.0\\xpcom
|
|
\n";
|
|
}
|
|
|
|
$inJstFile = $ARGV[0];
|
|
$inVersion = $ARGV[1];
|
|
$inStagePath = $ARGV[2];
|
|
|
|
# get environment vars
|
|
$userAgent = $ENV{WIZ_userAgent};
|
|
$userAgentShort = $ENV{WIZ_userAgentShort};
|
|
$xpinstallVersion = $ENV{WIZ_xpinstallVersion};
|
|
$nameCompany = $ENV{WIZ_nameCompany};
|
|
$nameProduct = $ENV{WIZ_nameProduct};
|
|
$fileMainExe = $ENV{WIZ_fileMainExe};
|
|
$fileUninstall = $ENV{WIZ_fileUninstall};
|
|
|
|
# Get the name of the file replacing the .jst extension with a .js extension
|
|
@inJstFileSplit = split(/\./,$inJstFile);
|
|
$outJsFile = $inJstFileSplit[0];
|
|
$outJsFile .= ".js";
|
|
$outTempFile = $inJstFileSplit[0];
|
|
$outTempFile .= ".template";
|
|
$foundLongFiles = 0;
|
|
|
|
print "copy \"$ENV{MOZ_SRC}\\mozilla\\xpinstall\\packager\\common\\share.t\" $outTempFile\n";
|
|
system("copy \"$ENV{MOZ_SRC}\\mozilla\\xpinstall\\packager\\common\\share.t\" $outTempFile");
|
|
system("type \"$ENV{MOZ_SRC}\\mozilla\\xpinstall\\packager\\common\\windows.t\" >> $outTempFile"); # append windows specific functions
|
|
system("type $inJstFile >> $outTempFile");
|
|
|
|
# Open the input .template file
|
|
open(fpInTemplate, $outTempFile) || die "\ncould not open $outTempFile: $!\n";
|
|
|
|
# Open the output .js file
|
|
open(fpOutJs, ">$outJsFile") || die "\nCould not open $outJsFile: $!\n";
|
|
|
|
# While loop to read each line from input file
|
|
while($line = <fpInTemplate>)
|
|
{
|
|
if($line =~ /\$SpaceRequired\$/i) # For each line read, search and replace $SpaceRequired$ with the calculated size
|
|
{
|
|
$spaceRequired = 0;
|
|
|
|
# split read line by ":" deliminator
|
|
@colonSplit = split(/:/, $line);
|
|
if($#colonSplit > 0)
|
|
{
|
|
@semiColonSplit = split(/;/, $colonSplit[1]);
|
|
$subDir = $semiColonSplit[0];
|
|
$spaceRequired = GetSpaceRequired("$inStagePath\\$subDir");
|
|
$line =~ s/\$SpaceRequired\$:$subDir/$spaceRequired/i;
|
|
}
|
|
else
|
|
{
|
|
$spaceRequired = GetSpaceRequired("$inStagePath");
|
|
$line =~ s/\$SpaceRequired\$/$spaceRequired/i;
|
|
}
|
|
}
|
|
elsif($line =~ /\$Ren8dot3List\$/i)
|
|
{
|
|
if(-d "$inStagePath\\bin")
|
|
{
|
|
# need to close the output file because GetLongFile.pl will attempt to open
|
|
# it in order to update it.
|
|
close(fpOutJs);
|
|
$rv = system("perl \"$ENV{MOZ_SRC}\\mozilla\\xpinstall\\packager\\windows\\GetLongFile.pl\" \"$inStagePath\\bin\" \"$outJsFile\"")/256;
|
|
if($rv == 0)
|
|
{
|
|
# set var when long filenames have been found. This is so that the
|
|
# call to prepareRen8dot3() will not be written out.
|
|
$foundLongFiles = 1;
|
|
}
|
|
elsif($rv == 1)
|
|
{
|
|
exit($rv);
|
|
}
|
|
|
|
# reopen the output .js file
|
|
open(fpOutJs, ">>$outJsFile") || die "\nCould not open $outJsFile: $!\n";
|
|
}
|
|
}
|
|
elsif($line =~ /\$Ren8dot3Call\$/i)
|
|
{
|
|
if($foundLongFiles)
|
|
{
|
|
print fpOutJs " // Ren8dot3 process needs to be done before any files have been installed\n";
|
|
print fpOutJs " // (this includes the temp files during the prepare phase)\n";
|
|
print fpOutJs " prepareRen8dot3(listLongFilePaths);\n";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$line =~ s/\$Version\$/$inVersion/i;
|
|
$line =~ s/\$UserAgent\$/$userAgent/i;
|
|
$line =~ s/\$UserAgentShort\$/$userAgentShort/i;
|
|
$line =~ s/\$XPInstallVersion\$/$xpinstallVersion/i;
|
|
$line =~ s/\$CompanyName\$/$nameCompany/i;
|
|
$line =~ s/\$ProductName\$/$nameProduct/i;
|
|
$line =~ s/\$MainExeFile\$/$fileMainExe/i;
|
|
$line =~ s/\$UninstallFile\$/$fileUninstall/i;
|
|
}
|
|
|
|
# Do not print $line if $Ren8dot3List$ or $Ren8dot3Call$ have been detected.
|
|
# They have their own print routines.
|
|
if(!($line =~ /\$Ren8dot3List\$/i) && !($line =~ /\$Ren8dot3Call\$/i))
|
|
{
|
|
print fpOutJs $line;
|
|
}
|
|
}
|
|
|
|
close(fpInTemplate);
|
|
close(fpOutJs);
|
|
exit(0);
|
|
|
|
sub GetSpaceRequired()
|
|
{
|
|
my($inPath) = @_;
|
|
my($spaceRequired);
|
|
|
|
print " calculating size for $inPath\n";
|
|
$spaceRequired = `\"$ENV{MOZ_TOOLS}\\bin\\ds32.exe\" /D /L0 /A /S /C 32768 $inPath`;
|
|
$spaceRequired = int($spaceRequired / 1024);
|
|
$spaceRequired += 1;
|
|
return($spaceRequired);
|
|
}
|
|
|
|
sub ParseUserAgentShort()
|
|
{
|
|
my($aUserAgent) = @_;
|
|
my($aUserAgentShort);
|
|
|
|
@spaceSplit = split(/ /, $aUserAgent);
|
|
if($#spaceSplit >= 0)
|
|
{
|
|
$aUserAgentShort = $spaceSplit[0];
|
|
}
|
|
|
|
return($aUserAgentShort);
|
|
}
|
|
|