gecko-dev/xpinstall/packager/windows/makejs.pl
ssu%netscape.com ef404f92ee This check-in will fix the following bugs:
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!
2001-01-27 01:49:57 +00:00

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);
}