gecko-dev/toolkit/mozapps/installer/windows/install_sub.pl

278 строки
8.8 KiB
Perl
Executable File

# Windows implementation of platform-specific installer functions:
#
# BuildPlatformInstaller()
# Define wizard file locations
$exe_suffix = '.exe';
@wizard_files = (
"setup.exe",
"setuprsc.dll"
);
sub BuildPlatformInstaller
{
print "Making uninstaller...\n";
MakeUninstall() && die;
# copy the lean installer to stub\ dir
print "\n****************************\n";
print "* *\n";
print "* creating Stub files... *\n";
print "* *\n";
print "****************************\n";
print "\n $gDirDistInstall/stub/$seiFileNameSpecificStub\n";
# build the self-extracting .exe (installer) file.
copy("$gDirDistInstall/$seiFileNameGeneric", "$gDirDistInstall/$seiFileNameSpecificStub") ||
die "copy $gDirDistInstall/$seiFileNameGeneric $gDirDistInstall/$seiFileNameSpecificStub: $!\n";
$origCwd = cwd();
chdir($gDirDistInstall);
system("./nsztool.exe $seiFileNameSpecificStub setup/*.*") && die "Error creating self-extracting installer";
chdir($origCwd);
if(-d "$gDirDistInstall/stub")
{
unlink <$gDirDistInstall/stub/*>;
}
else
{
mkdir ("$gDirDistInstall/stub",0775);
}
copy("$gDirDistInstall/$seiFileNameSpecificStub", "$gDirDistInstall/stub") ||
die "copy $gDirDistInstall/$seiFileNameSpecificStub $gDirDistInstall/stub: $!\n";
# create the xpi for launching the stub installer
print "\n************************************\n";
print "* *\n";
print "* creating stub installer xpi... *\n";
print "* *\n";
print "************************************\n";
print "\n $gDirDistInstall/$seiStubRootName.xpi\n\n";
if(-d "$gDirStageProduct/$seiStubRootName")
{
unlink <$gDirStageProduct/$seiStubRootName/*>;
}
else
{
mkdir ("$gDirStageProduct/$seiStubRootName",0775);
}
copy("$gDirDistInstall/stub/$seiFileNameSpecificStub", "$gDirStageProduct/$seiStubRootName") ||
die "copy $gDirDistInstall/stub/$seiFileNameSpecificStub $gDirStageProduct/$seiStubRootName: $!\n";
# Make .js files
if(MakeJsFile($seiStubRootName))
{
return(1);
}
# Make .xpi file
if(system("perl $gNGAppsScriptsDir/makexpi.pl $seiStubRootName $gDirStageProduct $gDirDistInstall"))
{
print "\n Error: perl $gNGAppsScriptsDir/makexpi.pl $seiStubRootName $gDirStageProduct $gDirDistInstall\n";
return(1);
}
# group files for CD
print "\n************************************\n";
print "* *\n";
print "* creating Compact Disk files... *\n";
print "* *\n";
print "************************************\n";
print "\n $gDirDistInstall/cd\n";
if(-d "$gDirDistInstall/cd")
{
unlink <$gDirDistInstall/cd/*>;
}
else
{
mkdir ("$gDirDistInstall/cd",0775);
}
copy("$gDirDistInstall/$seiFileNameSpecificStub", "$gDirDistInstall/cd") ||
die "copy $gDirDistInstall/$seiFileNameSpecificStub $gDirDistInstall/cd: $!\n";
StageUtils::CopyFiles("$gDirDistInstall/xpi", "$gDirDistInstall/cd");
# create the big self extracting .exe installer
print "\n**************************************************************\n";
print "* *\n";
print "* creating Self Extracting Executable Full Install file... *\n";
print "* *\n";
print "**************************************************************\n";
print "\n $gDirDistInstall/$seiFileNameSpecific\n";
if(-d "$gDirDistInstall/sea")
{
unlink <$gDirDistInstall/sea/*>;
}
else
{
mkdir ("$gDirDistInstall/sea",0775);
}
copy("$gDirDistInstall/$seiFileNameGeneric", "$gDirDistInstall/$seiFileNameSpecific") ||
die "copy $gDirDistInstall/$seiFileNameGeneric $gDirDistInstall/$seiFileNameSpecific: $!\n";
$origCwd = cwd();
chdir($gDirDistInstall);
system("./nsztool.exe $seiFileNameSpecific setup/*.* xpi/*.*") &&
die "\n Error: ./nsztool.exe $seiFileNameSpecific setup/*.* xpi/*.*\n";
chdir($origCwd);
copy("$gDirDistInstall/$seiFileNameSpecific", "$gDirDistInstall/sea") ||
die "copy $gDirDistInstall/$seiFileNameSpecific $gDirDistInstall/sea: $!\n";
unlink <$gDirDistInstall/$seiFileNameSpecificStub>;
if ($ENV{MOZ_INSTALLER_USE_7ZIP})
{
# 7-Zip Self Extracting Archive
print "\n********************************************************************\n";
print "* *\n";
print "* creating 7-Zip Self Extracting Executable Full Install File... *\n";
print "* *\n";
print "********************************************************************\n";
print "\n $gDirDistInstall/7-zip\n";
if(-d "$gDirDistInstall/7z")
{
unlink <$gDirDistInstall/7z/*>;
}
else
{
mkdir ("$gDirDistInstall/7z",0775);
}
# Set up the 7-Zip stage
if(-d "$gDirDistInstall/7zstage")
{
unlink <$gDirDistInstall/7zstage/*>;
}
else
{
mkdir ("$gDirDistInstall/7zstage",0775);
}
# Copy the files into the stage
chdir("$gDirDistInstall/setup");
`cp *.* $gDirDistInstall/7zstage`;
chdir("$gDirDistInstall/xpi");
`cp *.* $gDirDistInstall/7zstage`;
chdir("$gDirDistInstall");
# Copy the 7zSD SFX launcher to dist/install/7z
copy("$topsrcdir/$ENV{WIZ_sfxModule}", "$gDirDistInstall/7z") ||
die "copy $topsrcdir/$ENV{WIZ_sfxModule} $gDirDistInstall/7z\n";
# Copy the SEA manifest to dist/install/7z
copy("$inConfigFiles/app.tag", "$gDirDistInstall/7z") ||
die "copy $inConfigFiles/app.tag $gDirDistInstall/7z";
# Copy the generation batch file to dist/install
copy("$inConfigFiles/7zip.bat", "$gDirDistInstall") ||
die "copy $inConfigFiles/7zip.bat $gDirDistInstall";
chdir($gDirDistInstall);
system("cmd /C 7zip.bat");
move("$gDirDistInstall/7z/SetupGeneric.exe", "$gDirDistInstall/sea/$seiFileNameSpecific") ||
die "move $gDirDistInstall/SetupGeneric.exe $gDirDistInstall/sea/$seiFileNameSpecific";
}
print " done!\n\n";
if((!(-e "$topsrcdir/../redist/microsoft/system/msvcrt.dll")) ||
(!(-e "$topsrcdir/../redist/microsoft/system/msvcirt.dll")))
{
print "***\n";
print "**\n";
print "** The following required Microsoft redistributable system files were not found\n";
print "** in $topsrcdir/../redist/microsoft/system:\n";
print "**\n";
if(!(-e "$topsrcdir/../redist/microsoft/system/msvcrt.dll"))
{
print "** msvcrt.dll\n";
}
if(!(-e "$topsrcdir/../redist/microsoft/system/msvcirt.dll"))
{
print "** msvcirt.dll\n";
}
print "**\n";
print "** The above files are required by the installer and the browser. If you attempt\n";
print "** to run the installer, you may encounter the following bug:\n";
print "**\n";
print "** http://bugzilla.mozilla.org/show_bug.cgi?id=27601\n";
print "**\n";
print "***\n\n";
}
return 0;
}
sub MakeUninstall
{
chdir($inConfigFiles);
if(MakeUninstallIniFile())
{
return(1);
}
# Copy the uninstall files to the dist uninstall directory.
copy("uninstall.ini", "$gDirDistInstall") ||
die "copy uninstall.ini $gDirDistInstall: $!\n";
copy("uninstall.ini", "$gDirDistInstall/uninstall") ||
die "copy uninstall.ini $gDirDistInstall/uninstall: $!\n";
copy("$gDirDistInstall/uninstall.exe", "$gDirDistInstall/uninstall") ||
die "copy $gDirDistInstall/uninstall.exe $gDirDistInstall/uninstall: $!\n";
# build the self-extracting .exe (uninstaller) file.
print "\nbuilding self-extracting uninstaller ($seuFileNameSpecific)...\n";
copy("$gDirDistInstall/$seiFileNameGeneric", "$gDirDistInstall/$seuFileNameSpecific") ||
die "copy $gDirDistInstall/$seiFileNameGeneric $gDirDistInstall/$seuFileNameSpecific: $!\n";
$origCwd = cwd();
chdir($gDirDistInstall);
if(system("./nsztool.exe $seuFileNameSpecific uninstall/*.*"))
{
print "\n Error: ./nsztool.exe $seuFileNameSpecific uninstall/*.*\n";
return(1);
}
chdir($origCwd);
MakeExeZip($gDirDistInstall, $seuFileNameSpecific, $seuzFileNameSpecific);
unlink <$gDirDistInstall/$seuFileNameSpecific>;
return(0);
}
sub MakeUninstallIniFile
{
# Make config.ini file
chdir($inConfigFiles);
if(system("perl $gDirPackager/windows/makeuninstallini.pl uninstall.it $gDefaultProductVersion"))
{
print "\n Error: perl $gDirPackager/windows/makeuninstallini.pl uninstall.it $gDefaultProductVersion\n";
return(1);
}
return(0);
}
sub MakeExeZip
{
my($aSrcDir, $aExeFile, $aZipFile) = @_;
my($saveCwdir);
$saveCwdir = cwd();
chdir($aSrcDir);
if(system("zip $gDirDistInstall/xpi/$aZipFile $aExeFile"))
{
chdir($saveCwdir);
die "\n Error: zip $gDirDistInstall/xpi/$aZipFile $aExeFile";
}
chdir($saveCwdir);
}