diff --git a/toolkit/mozapps/installer/windows/build_static.pl b/toolkit/mozapps/installer/windows/build_static.pl index cf51c3e3d581..310bffdbe307 100644 --- a/toolkit/mozapps/installer/windows/build_static.pl +++ b/toolkit/mozapps/installer/windows/build_static.pl @@ -271,7 +271,7 @@ sub GetVersion $distWinPathName = "dist"; - $fileMozilla = "$depthPath\\$distWinPathName\\bin\\$ENV{WIZ_fileApplicationExe}"; + $fileMozilla = "$depthPath\\$distWinPathName\\bin\\$ENV{WIZ_fileMainExe}"; # verify the existance of file if(!(-e "$fileMozilla")) { @@ -326,8 +326,8 @@ sub ParseInstallerCfg elsif ($prop eq "NameProductInternal") { $ENV{WIZ_nameProductInternal} = $value; } - elsif ($prop eq "FileApplicationExe") { - $ENV{WIZ_fileApplicationExe} = $value; + elsif ($prop eq "FileInstallerEXE") { + $ENV{WIZ_fileInstallerExe} = $value; } elsif ($prop eq "FileUninstall") { $ENV{WIZ_fileUninstall} = $value; diff --git a/toolkit/mozapps/installer/windows/makeall.pl b/toolkit/mozapps/installer/windows/makeall.pl index b190ac1e1bef..61b6884c4ca2 100644 --- a/toolkit/mozapps/installer/windows/makeall.pl +++ b/toolkit/mozapps/installer/windows/makeall.pl @@ -59,7 +59,7 @@ if ($inConfigFiles eq "") $versionLanguage = $ENV{WIZ_versionLanugage}; @gComponentList = split(/,/, $ENV{WIZ_componentList}); $seiFileNameGeneric = "nsinstall.exe"; -$seiFileNameSpecific = $ENV{WIZ_fileMainExe}; +$seiFileNameSpecific = $ENV{WIZ_fileInstallerEXE}; $seiStubRootName = $ENV{WIZ_fileNetStubRootName}; $seiFileNameSpecificStub = "$seiStubRootName.exe"; $seuFileNameSpecific = $ENV{WIZ_fileUninstall}; @@ -118,6 +118,7 @@ print "\n"; $gDirPackager = "$topsrcdir/xpinstall/packager"; $gDirStageProduct = $inStagePath; $gDirDistInstall = "$inDistPath/install"; +$gNGAppsScriptsDir = "$topsrcdir/toolkit/mozapps/installer/windows"; # The following variables are for displaying version info in the # the installer. @@ -460,18 +461,18 @@ sub ParseArgv sub MakeConfigFile { - chdir($inConfigFiles); # Make config.ini file - if(system("perl $gDirPackager/windows/makecfgini.pl config.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL")) + chdir($inConfigFiles); + if(system("perl $gNGAppsScriptsDir/makecfgini.pl config.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL")) { - print "\n Error: perl $gDirPackager/windows/makecfgini.pl config.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL\n"; + print "\n Error: perl $gNGAppsScriptsDir/makecfgini.pl config.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL\n"; return(1); } # Make install.ini file - if(system("perl $gDirPackager/windows/makecfgini.pl install.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL")) + if(system("perl $gNGAppsScriptsDir/makecfgini.pl install.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL")) { - print "\n Error: perl $gDirPackager/windows/makecfgini.pl install.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL\n"; + print "\n Error: perl $gNGAppsScriptsDir/makecfgini.pl install.it $gDefaultProductVersion $gDirStageProduct $gDirDistInstall/xpi $inRedirIniURL $inXpiURL\n"; return(1); } return(0); diff --git a/toolkit/mozapps/installer/windows/makecfgini.pl b/toolkit/mozapps/installer/windows/makecfgini.pl new file mode 100755 index 000000000000..073b1d50cb3a --- /dev/null +++ b/toolkit/mozapps/installer/windows/makecfgini.pl @@ -0,0 +1,345 @@ +#!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 +# + +# +# This perl script parses the input file for special variables +# in the format of $Variable$ and replace it with the appropriate +# value(s). +# +# Input: .it file +# - which is a .ini template +# +# version +# - version to display on the blue background +# +# Path to staging area +# - path on where the seamonkey built bits are staged to +# +# xpi path +# - path on where xpi files will be located at +# +# redirect file url +# - url to where the redirect.ini file will be staged at. +# Either ftp:// or http:// can be used +# ie: ftp://ftp.netscape.com/pub/seamonkey +# +# xpi url +# - url to where the .xpi files will be staged at. +# Either ftp:// or http:// can be used +# ie: ftp://ftp.netscape.com/pub/seamonkey/xpi +# +# ie: perl makecfgini.pl config.it 5.0.0.1999120608 k:\windows\32bit\5.0 d:\builds\mozilla\dist\win32_o.obj\install\xpi ftp://ftp.netscape.com/pub/seamonkey/windows/32bit/x86/1999-09-13-10-M10 ftp://ftp.netscape.com/pub/seamonkey/windows/32bit/x86/1999-09-13-10-M10/xpi +# +# + +# Make sure there are at least two arguments +if($#ARGV < 5) +{ + die "usage: $0 <.it file> <.xpi path> + + .it file : input ini template file + + version : version to be shown in setup. Typically the same version + as show in mozilla.exe. + + staging path : path to where the components are staged at + + .xpi path : path to where the .xpi files have been built to + ie: d:/builds/mozilla/dist/win32_o.obj/install/xpi + + redirect file : url to where the redirect.ini file will be staged at. + + xpi url : url to where the .xpi files will be staged at. + Either ftp:// or http:// can be used + ie: ftp://ftp.netscape.com/pub/seamonkey/xpi + \n"; +} + +$inItFile = $ARGV[0]; +$inVersion = $ARGV[1]; +$inStagePath = $ARGV[2]; +$inXpiPath = $ARGV[3]; +$inRedirIniUrl = $ARGV[4]; +$inUrl = $ARGV[5]; + +# get environment vars +$userAgent = $ENV{WIZ_userAgent}; +$userAgentShort = $ENV{WIZ_userAgentShort}; +$xpinstallVersion = $ENV{WIZ_xpinstallVersion}; +$nameCompany = $ENV{WIZ_nameCompany}; +$nameProduct = $ENV{WIZ_nameProduct}; +$nameProductInternal = $ENV{WIZ_nameProductInternal}; +$fileMainExe = $ENV{WIZ_fileMainExe}; +$fileUninstall = $ENV{WIZ_fileUninstall}; +$fileUninstallZip = $ENV{WIZ_fileUninstallZip}; +$greBuildID = $ENV{WIZ_greBuildID}; +$greFileVersion = $ENV{WIZ_greFileVersion}; +$greUniqueID = $ENV{WIZ_greUniqueID}; + +$inDomain; +$inRedirDomain; +$inServerPath; +$inRedirServerPath; + +($inDomain, $inServerPath) = ParseDomainAndPath($inUrl); +($inRedirDomain, $inRedirServerPath) = ParseDomainAndPath($inRedirIniUrl); + +# Get the name of the file replacing the .it extension with a .ini extension +@inItFileSplit = split(/\./,$inItFile); +$outIniFile = $inItFileSplit[0]; +$outIniFile .= ".ini"; + +# Open the input file +open(fpInIt, $inItFile) || die "\ncould not open $ARGV[0]: $!\n"; + +# Open the output file +open(fpOutIni, ">$outIniFile") || die "\nCould not open $outIniFile: $!\n"; + +print "\n Making $outIniFile...\n"; + +# While loop to read each line from input file +while($line = ) +{ + # For each line read, search and replace $InstallSize$ with the calculated size + if($line =~ /\$InstallSize\$/i) + { + $installSize = 0; + $installSizeSystem = 0; + + # split read line by ":" deliminator + @colonSplit = split(/:/, $line); + if($#colonSplit >= 0) + { + $componentName = $colonSplit[1]; + chop($componentName); + + if($componentName =~ /\$UninstallFileZip\$/i) + { + $installSize = OutputInstallSizeArchive("$inXpiPath/$fileUninstallZip") * 2; + } + else + { + $installSize = OutputInstallSize("$inStagePath/$componentName"); + + # special oji consideration here. Since it's an installer that + # seamonkey installer will be calling, the disk space allocation + # needs to be adjusted by an expansion factor of 3.62. + if($componentName =~ /oji/i) + { + $installSize = int($installSize * 3.62); + } + + if($componentName =~ /gre/i) + { + $installSize = int($installSize * 4.48); + } + } + } + + # Read the next line to calculate for the "Install Size System=" + if($line = ) + { + if($line =~ /\$InstallSizeSystem\$/i) + { + $installSizeSystem = OutputInstallSizeSystem($line, "$inStagePath/$componentName"); + } + } + + $installSize -= $installSizeSystem; + print fpOutIni "Install Size=$installSize\n"; + print fpOutIni "Install Size System=$installSizeSystem\n"; + } + elsif($line =~ /\$InstallSizeArchive\$/i) + { + $installSizeArchive = 0; + + # split read line by ":" deliminator + @colonSplit = split(/:/, $line); + if($#colonSplit >= 0) + { + $componentName = $colonSplit[1]; + chop($componentName); + $componentName =~ s/\$UninstallFileZip\$/$fileUninstallZip/gi; + $installSizeArchive = OutputInstallSizeArchive("$inXpiPath/$componentName"); + } + + print fpOutIni "Install Size Archive=$installSizeArchive\n"; + } + elsif($line =~ /\$FileCount\$/i) + { + if (!($componentName eq "")) + { + $stageDir = "$inStagePath/$componentName"; + $stageDir =~ s/(.xpi|.zip)\b//i; + system("find $stageDir -type f | wc -l > filecount.log"); + + open(fpFileCount, "filecount.log"); + $cl = ; + $cl =~ s/\s//g; + close(fpFileCount); + + print "*** component = $componentName, count = $cl, line = $line\n"; + $line =~ s/\$FileCount\$/$cl/i; + + print fpOutIni $line; + } + } + else + { + # For each line read, search and replace $Version$ with the version passed in + $line =~ s/\$Version\$/$inVersion/gi; + $line =~ s/\$Domain\$/$inDomain/gi; + $line =~ s/\$ServerPath\$/$inServerPath/gi; + $line =~ s/\$RedirIniUrl\$/$inRedirIniUrl/gi; + $line =~ s/\$ArchiveServerPath\$/$inServerPath/gi; + $line =~ s/\$ArchiveUrl\$/$inUrl/gi; + $line =~ s/\$RedirectServerPath\$/$inRedirServerPath/gi; + $line =~ s/\$RedirectUrl\$/$inRedirUrl/gi; + $line =~ s/\$UserAgent\$/$userAgent/gi; + $line =~ s/\$UserAgentShort\$/$userAgentShort/gi; + $line =~ s/\$XPInstallVersion\$/$xpinstallVersion/gi; + $line =~ s/\$CompanyName\$/$nameCompany/gi; + $line =~ s/\$ProductName\$/$nameProduct/gi; + $line =~ s/\$ProductNameInternal\$/$nameProductInternal/gi; + $line =~ s/\$MainExeFile\$/$fileMainExe/gi; + $line =~ s/\$UninstallFile\$/$fileUninstall/gi; + $line =~ s/\$UninstallFileZip\$/$fileUninstallZip/gi; + $line =~ s/\$GreBuildID\$/$greBuildID/gi; + $line =~ s/\$GreFileVersion\$/$greFileVersion/gi; + $line =~ s/\$GreUniqueID\$/$greUniqueID/gi; + print fpOutIni $line; + } +} + +print " done!\n"; + +# end of script +exit(0); + +sub ParseDomainAndPath() +{ + my($aUrl) = @_; + my($aDomain, $aServerPath); + + @slashSplit = split(/\//, $aUrl); + if($#slashSplit >= 0) + { + for($i = 0; $i <= $#slashSplit; $i++) + { + if($i <= 2) + { + if($aDomain eq "") + { + $aDomain = "$slashSplit[$i]"; + } + else + { + $aDomain = "$aDomain/$slashSplit[$i]"; + } + } + else + { + if($aServerPath eq "") + { + $aServerPath = "/$slashSplit[$i]"; + } + else + { + $aServerPath = "$aServerPath/$slashSplit[$i]"; + } + } + } + } + + return($aDomain, $aServerPath); +} + +sub OutputInstallSize() +{ + my($inPath) = @_; + my($installSize); + + print " calculating size for $inPath\n"; + $installSize = `$ENV{WIZ_distInstallPath}/ds32.exe /D /L0 /A /S /C 32768 $inPath`; + $installSize += 32768; # take into account install.js + $installSize = int($installSize / 1024); + $installSize += 1; + return($installSize); +} + +sub OutputInstallSizeArchive() +{ + my($inPath) = @_; + my($installSizeArchive); + my($dev, $ino, $mode, $nlink, $uid, $gui, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks); + + print " calculating size for $inPath\n"; + ($dev, $ino, $mode, $nlink, $uid, $gui, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $inPath; + $installSizeArchive += 32768; # take into account install.js + $installSizeArchive = int($size / 1024); + $installSizeArchive += 1; + return($installSizeArchive); +} + +sub OutputInstallSizeSystem() +{ + my($inLine, $inPath) = @_; + my($installSizeSystem) = 0; + + # split read line by ":" deliminator + @colonSplit = split(/:/, $inLine); + if($#colonSplit >= 0) + { + # split line by "," deliminator + @commaSplit = split(/\,/, $colonSplit[1]); + if($#commaSplit >= 0) + { + foreach(@commaSplit) + { + # calculate the size of component installed using ds32.exe in Kbytes + print " calculating size for $inPath/$_"; + $installSizeSystem += `$ENV{WIZ_distInstallPath}/ds32.exe /D /L0 /A /S /C 32768 $inPath/$_`; + } + } + } + + $installSizeSystem = int($installSizeSystem / 1024); + $installSizeSystem += 1; + return($installSizeSystem); +} + +sub ParseUserAgentShort() +{ + my($aUserAgent) = @_; + my($aUserAgentShort); + + @spaceSplit = split(/ /, $aUserAgent); + if($#spaceSplit >= 0) + { + $aUserAgentShort = $spaceSplit[0]; + } + + return($aUserAgentShort); +} + diff --git a/toolkit/mozapps/installer/windows/wizard/setup/setup.h b/toolkit/mozapps/installer/windows/wizard/setup/setup.h index 4c88e279fcc7..ec6f3e279722 100644 --- a/toolkit/mozapps/installer/windows/wizard/setup/setup.h +++ b/toolkit/mozapps/installer/windows/wizard/setup/setup.h @@ -582,6 +582,7 @@ struct sinfoComponent int iNetRetries; int iCRCRetries; int iNetTimeOuts; + int iFileCount; siCD *siCDDependencies; siCD *siCDDependees; siC *Next; diff --git a/toolkit/mozapps/installer/windows/wizard/setup/xpi.c b/toolkit/mozapps/installer/windows/wizard/setup/xpi.c index 4ce54e777172..0d0e4d6e64ad 100644 --- a/toolkit/mozapps/installer/windows/wizard/setup/xpi.c +++ b/toolkit/mozapps/installer/windows/wizard/setup/xpi.c @@ -55,7 +55,6 @@ char szStrCopyingFile[MAX_BUF]; char szStrInstalling[MAX_BUF]; static char gSavedCwd[MAX_BUF]; -static void UpdateGaugeFileProgressBar(unsigned value); static void UpdateArchiveInstallProgress(int aValue); struct ExtractFilesDlgInfo @@ -278,10 +277,10 @@ HRESULT SmartUpdateJars(HWND aWizardPanel) dwBarberDirection = BDIR_RIGHT; dlgInfo.nFileBars = 0; + // We need to send this message otherwise the progress bars will paint + // over the completion page for some unknown reason! -ben SendMessage(aWizardPanel, WM_PAINT, 0, 0); - UpdateGaugeFileProgressBar(0); - lstrcpy(szArchive, sgProduct.szAlternateArchiveSearchPath); AppendBackSlash(szArchive, sizeof(szArchive)); lstrcat(szArchive, siCObject->szArchiveName); @@ -411,32 +410,12 @@ void cbXPIProgress(const char* msg, PRInt32 val, PRInt32 max) { ParsePath((char *)msg, szFilename, sizeof(szFilename), FALSE, PP_FILENAME_ONLY); - if(max == 0) - { - wsprintf(szStrProcessingFileBuf, szStrProcessingFile, szFilename); - SetDlgItemText(dlgInfo.hWndDlg, IDC_STATUS3, szStrProcessingFileBuf); - bBarberBar = TRUE; - // XXXben - // UpdateGaugeFileBarber(); - } - else - { - if(bBarberBar == TRUE) - { - dlgInfo.nFileBars = 0; - ++dwCurrentArchive; - UpdateArchiveInstallProgress((int)(((double)(dwCurrentArchive)/(double)dwTotalArchives)*(double)100)); - UpdateGREInstallProgress((int)(((double)(dwCurrentArchive)/(double)dwTotalArchives)*(double)100)); - - // XXXben - // InvalidateBarberBarArea(); - bBarberBar = FALSE; - } - - wsprintf(szStrCopyingFileBuf, szStrCopyingFile, szFilename); - SetDlgItemText(dlgInfo.hWndDlg, IDC_STATUS3, szStrCopyingFileBuf); - UpdateGaugeFileProgressBar((unsigned)(((double)(val+1)/(double)max)*(double)100)); - } + dlgInfo.nFileBars = 0; + ++dwCurrentArchive; +#if 0 + UpdateArchiveInstallProgress((int)(((double)(dwCurrentArchive)/(double)dwTotalArchives)*(double)100)); + UpdateGREInstallProgress((int)(((double)(dwCurrentArchive)/(double)dwTotalArchives)*(double)100)); +#endif } ProcessWindowsMessages(); @@ -459,7 +438,3 @@ static void UpdateArchiveInstallProgress(int aValue) } } -static void UpdateGaugeFileProgressBar(unsigned value) -{ - return; -} \ No newline at end of file