mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
399 lines
11 KiB
Perl
Executable File
399 lines
11 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
#
|
|
# ***** 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 Mozilla Communicator client code, released
|
|
# March 31, 1998.
|
|
#
|
|
# The Initial Developer of the Original Code is
|
|
# Netscape Communications Corporation.
|
|
# Portions created by the Initial Developer are Copyright (C) 1998-1999
|
|
# the Initial Developer. All Rights Reserved.
|
|
#
|
|
# Contributor(s):
|
|
# Sean Su <ssu@netscape.com>
|
|
# Ben Goodger <ben@mozilla.org>
|
|
# Brian Ryner <bryner@brianryner.com>
|
|
#
|
|
# 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 *****
|
|
|
|
#
|
|
# This perl script builds the xpi, config.ini, and js files.
|
|
#
|
|
|
|
use Cwd;
|
|
use File::Copy;
|
|
use File::Path;
|
|
use File::Basename;
|
|
|
|
$DEPTH = "../../..";
|
|
$topsrcdir = GetTopSrcDir();
|
|
$win32 = ($^O =~ /((MS)?win32)|cygwin|os2/i) ? 1 : 0;
|
|
|
|
# platform specific locations and file names
|
|
if ($win32) {
|
|
$platform_dir = 'windows';
|
|
} else {
|
|
$platform_dir = 'unix';
|
|
}
|
|
|
|
require "$platform_dir/install_sub.pl";
|
|
|
|
# ensure that Packager.pm is in @INC, since we might not be called from
|
|
# mozilla/xpinstall/packager
|
|
push(@INC, "$topsrcdir/xpinstall/packager");
|
|
require StageUtils;
|
|
require "$topsrcdir/config/zipcfunc.pl";
|
|
|
|
ParseArgv(@ARGV);
|
|
|
|
$topobjdir = "$topsrcdir" if !defined($topobjdir);
|
|
$inStagePath = "$topobjdir/stage" if !defined($inStagePath);
|
|
$inDistPath = "$topobjdir/dist" if !defined($inDistPath);
|
|
$inXpiURL = "ftp://not.supplied.invalid" if !defined($inXpiURL);
|
|
$inRedirIniURL = $inXpiURL if !defined($inRedirIniURL);
|
|
|
|
if ($inConfigFiles eq "")
|
|
{
|
|
print "Error: Packager Manifests and Install Script Location not supplied! Use -config";
|
|
exit(1);
|
|
}
|
|
|
|
# Initialize state from environment (which is established in the calling script
|
|
# after reading the installer.cfg file.
|
|
$versionLanguage = $ENV{WIZ_versionLanguage};
|
|
@gComponentList = split(/,/, $ENV{WIZ_componentList});
|
|
$seiFileNameGeneric = "nsinstall".$exe_suffix;
|
|
$seiFileNameSpecific = $ENV{WIZ_fileInstallerExe};
|
|
$seiStubRootName = $ENV{WIZ_fileNetStubRootName};
|
|
$seiFileNameSpecificStub = "$seiStubRootName".$exe_suffix;
|
|
|
|
if(defined($ENV{DEBUG_INSTALLER_BUILD}))
|
|
{
|
|
print " makeall.pl\n";
|
|
print " topobjdir : $topobjdir\n";
|
|
print " topsrcdir : $topsrcdir\n";
|
|
print " inStagePath: $inStagePath\n";
|
|
print " inDistPath : $inDistPath\n";
|
|
}
|
|
|
|
$gDefaultProductVersion = $ENV{WIZ_versionProduct};
|
|
|
|
print "\n";
|
|
print " Building $ENV{WIZ_nameProduct} installer\n";
|
|
print " Raw version id : $gDefaultProductVersion\n";
|
|
print " Display version : $ENV{WIZ_userAgentShort}\n";
|
|
print " Xpinstall version: $gDefaultProductVersion\n";
|
|
print "\n";
|
|
|
|
$gDirPackager = "$topsrcdir/xpinstall/packager";
|
|
$gDirStageProduct = $inStagePath;
|
|
$gDirDistInstall = "$inDistPath/install";
|
|
$gNGAppsScriptsDir = "$topsrcdir/toolkit/mozapps/installer";
|
|
$gNGAppsPlatformDir = "$topsrcdir/toolkit/mozapps/installer/$platform_dir";
|
|
|
|
# The following variables are for displaying version info in the
|
|
# the installer.
|
|
$ENV{WIZ_xpinstallVersion} = "$gDefaultProductVersion";
|
|
$ENV{WIZ_distInstallPath} = "$gDirDistInstall";
|
|
|
|
print "\n";
|
|
print " Building $ENV{WIZ_nameProduct} $ENV{WIZ_userAgent}...\n";
|
|
print "\n";
|
|
|
|
# Check for existence of staging path
|
|
if(!(-d "$gDirStageProduct"))
|
|
{
|
|
die "\n Invalid path: $gDirStageProduct\n";
|
|
}
|
|
|
|
if(VerifyComponents()) # return value of 0 means no errors encountered
|
|
{
|
|
exit(1);
|
|
}
|
|
|
|
# Make sure gDirDistInstall exists
|
|
if(!(-d "$gDirDistInstall"))
|
|
{
|
|
mkdir ("$gDirDistInstall",0775);
|
|
}
|
|
|
|
if(-d "$gDirDistInstall/xpi")
|
|
{
|
|
unlink <$gDirDistInstall/xpi/*>;
|
|
}
|
|
else
|
|
{
|
|
mkdir ("$gDirDistInstall/xpi",0775);
|
|
}
|
|
|
|
if(-d "$gDirDistInstall/uninstall")
|
|
{
|
|
unlink <$gDirDistInstall/uninstall/*>;
|
|
}
|
|
else
|
|
{
|
|
mkdir ("$gDirDistInstall/uninstall",0775);
|
|
}
|
|
|
|
if(-d "$gDirDistInstall/setup")
|
|
{
|
|
unlink <$gDirDistInstall/setup/*>;
|
|
}
|
|
else
|
|
{
|
|
mkdir ("$gDirDistInstall/setup",0775);
|
|
}
|
|
|
|
print "Making XPI files...\n";
|
|
MakeXpiFile() && die;
|
|
print "Making config.ini...\n";
|
|
MakeConfigFile() && die;
|
|
|
|
# Copy the setup files to the dist setup directory.
|
|
print "Copying setup files to setup directory\n";
|
|
foreach $_ (@wizard_files) {
|
|
copy ("$gDirDistInstall/$_", "$gDirDistInstall/setup") ||
|
|
die "syscopy $gDirDistInstall/$_ $gDirDistInstall/setup: $!\n";
|
|
|
|
$mode = (stat("$gDirDistInstall/$_"))[2];
|
|
chmod $mode, "$gDirDistInstall/setup/$_";
|
|
}
|
|
|
|
foreach $_ ("config.ini", "install.ini") {
|
|
copy ("$gDirDistInstall/$_", "$gDirDistInstall/setup") ||
|
|
die "copy $gDirDistInstall/$_ $gDirDistInstall/setup: $!\n";
|
|
}
|
|
|
|
# copy license file for the installer
|
|
$licenseLocation = "$topsrcdir/LICENSE";
|
|
if ($ENV{WIZ_licenseFile} ne "") {
|
|
$licenseLocation = $ENV{WIZ_licenseFile};
|
|
}
|
|
copy("$topsrcdir/$licenseLocation", "$gDirDistInstall/license.txt") ||
|
|
die "copy $topsrcdir/$licenseLocation $gDirDistInstall/license.txt: $!\n";
|
|
copy("$topsrcdir/$licenseLocation", "$gDirDistInstall/setup/license.txt") ||
|
|
die "copy $licenseLocation $gDirDistInstall/setup/license.txt: $!\n";
|
|
|
|
BuildPlatformInstaller() && die;
|
|
|
|
# end of script
|
|
exit(0);
|
|
|
|
sub PrintUsage
|
|
{
|
|
die "usage: $0 [options]
|
|
|
|
options include:
|
|
|
|
-config <path> : path to where configuration and component script
|
|
files are located.
|
|
|
|
-objDir <path> : path to the objdir. default is topsrcdir
|
|
|
|
-stagePath <staging path> : full path to where the mozilla components are staged at
|
|
Default stage path, if this is not set, is:
|
|
[mozilla]/stage
|
|
|
|
-distPath <dist path> : full path to where the mozilla dist dir is at.
|
|
Default stage path, if this is not set, is:
|
|
[mozilla]/dist
|
|
|
|
-aurl <archive url> : either ftp:// or http:// url to where the
|
|
archives (.xpi, .exe, .zip, etc...) reside
|
|
|
|
-rurl <redirect.ini url> : either ftp:// or http:// url to where the
|
|
redirec.ini resides. If not supplied, it
|
|
will be assumed to be the same as archive
|
|
url.
|
|
\n";
|
|
}
|
|
|
|
sub ParseArgv
|
|
{
|
|
my(@myArgv) = @_;
|
|
my($counter);
|
|
|
|
for($counter = 0; $counter <= $#myArgv; $counter++)
|
|
{
|
|
if($myArgv[$counter] =~ /^[-,\/]h$/i)
|
|
{
|
|
PrintUsage();
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]objDir$/i)
|
|
{
|
|
if($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$topobjdir = $myArgv[$counter];
|
|
$topobjdir =~ s/\\/\//g;
|
|
}
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]stagePath$/i)
|
|
{
|
|
if($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$inStagePath = $myArgv[$counter];
|
|
$inStagePath =~ s/\\/\//g;
|
|
}
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]distPath$/i)
|
|
{
|
|
if($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$inDistPath = $myArgv[$counter];
|
|
$inDistPath =~ s/\\/\//g;
|
|
}
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]aurl$/i)
|
|
{
|
|
if($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$inXpiURL = $myArgv[$counter];
|
|
$inRedirIniURL = $inXpiURL;
|
|
}
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]rurl$/i)
|
|
{
|
|
if($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$inRedirIniURL = $myArgv[$counter];
|
|
}
|
|
}
|
|
elsif($myArgv[$counter] =~ /^[-,\/]config$/i)
|
|
{
|
|
if ($#myArgv >= ($counter + 1))
|
|
{
|
|
++$counter;
|
|
$inConfigFiles = $myArgv[$counter];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sub MakeConfigFile
|
|
{
|
|
$ENV{WIZ_userAgent} = "$ENV{WIZ_userAgentShort} ({AB_CD})";
|
|
|
|
# Make config.ini and other ini files
|
|
chdir($gDirDistInstall);
|
|
foreach $_ ("config.ini", "install.ini") {
|
|
$itFile = $_;
|
|
$itFile =~ s/\.ini$/\.it/;
|
|
copy("$inConfigFiles/$itFile", "$gDirDistInstall/$itFile") || die "copy $inConfigFiles/$itFile $gDirDistInstall/$itFile";
|
|
|
|
if(system("perl $gNGAppsScriptsDir/makecfgini.pl $itFile $ENV{WIZ_userAgentShort} $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL"))
|
|
{
|
|
print "\n Error: perl $gNGAppsScriptsDir/makecfgini.pl $itFile $ENV{WIZ_userAgentShort} $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL\n";
|
|
return(1);
|
|
}
|
|
|
|
unlink("$gDirDistInstall/$itFile");
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
sub MakeJsFile
|
|
{
|
|
my($mComponent) = @_;
|
|
|
|
$ENV{WIZ_userAgent} = "$ENV{WIZ_userAgentShort} ($versionLanguage)";
|
|
|
|
# Make .js file
|
|
chdir($inConfigFiles);
|
|
if(system("perl $gNGAppsScriptsDir/makejs.pl $mComponent.jst $gDefaultProductVersion $gDirStageProduct/$mComponent"))
|
|
{
|
|
print "\n Error: perl $gNGAppsScriptsDir/makejs.pl $mComponent.jst $gDefaultProductVersion $gDirStageProduct/$mComponent\n";
|
|
return(1);
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
sub MakeXpiFile
|
|
{
|
|
my($mComponent);
|
|
|
|
chdir($inConfigFiles);
|
|
foreach $mComponent (@gComponentList)
|
|
{
|
|
# Make .js files
|
|
if(MakeJsFile($mComponent))
|
|
{
|
|
return(1);
|
|
}
|
|
|
|
# Make .xpi file
|
|
if(system("perl $gNGAppsScriptsDir/makexpi.pl $mComponent $gDirStageProduct $gDirDistInstall/xpi"))
|
|
{
|
|
print "\n Error: perl $gNGAppsScriptsDir/makexpi.pl $mComponent $gDirStageProduct $gDirDistInstall/xpi\n";
|
|
return(1);
|
|
}
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
sub VerifyComponents()
|
|
{
|
|
my($mComponent);
|
|
my($mError) = 0;
|
|
|
|
print "\n Verifying existence of required components...\n";
|
|
foreach $mComponent (@gComponentList)
|
|
{
|
|
if($mComponent =~ /talkback/i)
|
|
{
|
|
print " place holder: $gDirStageProduct/$mComponent\n";
|
|
mkdir("$gDirStageProduct/$mComponent", 0775);
|
|
}
|
|
elsif(-d "$gDirStageProduct/$mComponent")
|
|
{
|
|
print " ok: $gDirStageProduct/$mComponent\n";
|
|
}
|
|
else
|
|
{
|
|
print " Error: $gDirStageProduct/$mComponent does not exist!\n";
|
|
$mError = 1;
|
|
}
|
|
}
|
|
print "\n";
|
|
return($mError);
|
|
}
|
|
|
|
sub GetTopSrcDir
|
|
{
|
|
my($rootDir) = dirname($0) . "/$DEPTH";
|
|
my($savedCwdDir) = cwd();
|
|
|
|
chdir($rootDir);
|
|
$rootDir = cwd();
|
|
chdir($savedCwdDir);
|
|
return($rootDir);
|
|
}
|