зеркало из https://github.com/mozilla/pjs.git
224 строки
5.9 KiB
Perl
224 строки
5.9 KiB
Perl
#!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>
|
|
#
|
|
# Alternatively, the contents of this file may be used under the terms of
|
|
# either of 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 *****
|
|
|
|
use Cwd;
|
|
return(1);
|
|
|
|
sub ZipChrome()
|
|
{
|
|
# inOsType - Os type
|
|
# inUpdate - update or noupdate
|
|
# update - enables time/date compare file update of chrome archives
|
|
# noupdate - disables time/date compare file update of chrome archives.
|
|
# it will always update chrome files regardless of time/date stamp.
|
|
# inSourcePath - path to where the tmpchrome dir
|
|
# inTargetPath - path to where the bin\chrome dir
|
|
($inOsType, $inUpdate, $inSourcePath, $inTargetPath) = @_;
|
|
|
|
# check Os type
|
|
if($inOsType =~ /win32/i)
|
|
{
|
|
$gPathDelimiter="\\";
|
|
}
|
|
elsif($inOsType =~ /mac/i)
|
|
{
|
|
$gPathDelimiter=":";
|
|
}
|
|
elsif($inOsType =~ /unix/i)
|
|
{
|
|
$gPathDelimiter="/";
|
|
}
|
|
else
|
|
{
|
|
return(2);
|
|
}
|
|
|
|
# Verify Update
|
|
if(!($inUpdate =~ /update/i) &&
|
|
!($inUpdate =~ /noupdate/i))
|
|
{
|
|
return(2);
|
|
}
|
|
|
|
if($inOsType =~ /win32/i)
|
|
{
|
|
# Convert all '/' to '\\' or else win32 will have problems
|
|
$inSourcePath =~ s/\//\\/g;
|
|
$inTargetPath =~ s/\//\\/g;
|
|
}
|
|
|
|
# Make sure $inSourcePath exists
|
|
if(!(-e "$inSourcePath"))
|
|
{
|
|
return(1);
|
|
}
|
|
|
|
# Make sure $inTargetPath exists
|
|
if(!(-e "$inTargetPath"))
|
|
{
|
|
mkdir("$inTargetPath", 0775);
|
|
}
|
|
|
|
# Call CreateArchive() on locales, packages, and skins
|
|
# CreateArchive("loc", $inSourcePath . $gPathDelimiter . "locales", "$inTargetPath");
|
|
# CreateArchive("pkg", $inSourcePath . $gPathDelimiter . "packages", "$inTargetPath");
|
|
# CreateArchive("skn", $inSourcePath . $gPathDelimiter . "skins", "$inTargetPath");
|
|
CreateArchive("jar", $inSourcePath . $gPathDelimiter, "$inTargetPath");
|
|
return(0);
|
|
}
|
|
|
|
sub CreateArchive()
|
|
{
|
|
my($inExtension, $inSrc, $inDest) = @_;
|
|
my($dir);
|
|
my(@dirList);
|
|
my(@dirItem);
|
|
my($dirName);
|
|
my($saveCwdir);
|
|
my($mZipParam);
|
|
|
|
# Make sure $inSrc exists
|
|
if(!(-e "$inSrc"))
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
# Make sure $inSrc is a directory
|
|
if(!(-d "$inSrc"))
|
|
{
|
|
return(0);
|
|
}
|
|
|
|
# Make sure $inDest exists
|
|
if(!(-e "$inDest"))
|
|
{
|
|
mkdir("$inDest", 0775);
|
|
}
|
|
|
|
# Check for extension, if none is passed, use .jar as default
|
|
if($inExtension eq "")
|
|
{
|
|
$inExtension = "jar";
|
|
}
|
|
|
|
# Save current working directory
|
|
$saveCwdir = cwd();
|
|
chdir($inSrc);
|
|
|
|
# For all the subdirectories within $inSrc, create an archive
|
|
# using the name of the subdirectory, but with the extension passed
|
|
# in as a parameter.
|
|
@dirList = <*>;
|
|
foreach $dir (@dirList)
|
|
{
|
|
if($inOsType =~ /win32/i)
|
|
{
|
|
# Convert all '/' to '\\' or else win32 will have problems
|
|
$dir =~ s/\//\\/g;
|
|
}
|
|
|
|
# Get the leaf dir name of full path
|
|
# Get the leaf dir name from full path
|
|
if($inOsType =~ /win32/i)
|
|
{
|
|
@dirItem = split(/\\/, $dir);
|
|
}
|
|
elsif($inOsType =~ /mac/i)
|
|
{
|
|
@dirItem = split(/:/, $dir);
|
|
}
|
|
elsif($inOsType =~ /unix/i)
|
|
{
|
|
@dirItem = split(/\//, $dir);
|
|
}
|
|
$dirName = $dirItem[$#dirItem];
|
|
|
|
if(-d "$dir")
|
|
{
|
|
# Zip only works for win32 and unix systems
|
|
if(($inOsType =~ /win32/i) || ($inOsType =~ /unix/i))
|
|
{
|
|
if($inUpdate =~ /noupdate/i)
|
|
{
|
|
print "\n";
|
|
if(-e "$dirName.$inExtension")
|
|
{
|
|
# Delete archive is one already exists in target location
|
|
print " Removing $dirName.$inExtension\n";
|
|
unlink "$dirName.$inExtension";
|
|
}
|
|
|
|
print " Creating $dirName.$inExtension\n";
|
|
$mZipParam = "";
|
|
}
|
|
elsif($inUpdate =~ /update/i)
|
|
{
|
|
if(!(-e "$dirName.$inExtension"))
|
|
{
|
|
print "\n";
|
|
print " Creating $dirName.$inExtension\n";
|
|
$mZipParam = "";
|
|
}
|
|
else
|
|
{
|
|
print " Updating $dirName.$inExtension\n";
|
|
$mZipParam = "-u";
|
|
}
|
|
}
|
|
|
|
# Create the archive in $inDest
|
|
chdir("$dirName");
|
|
if(system("zip $mZipParam -r ..$gPathDelimiter$dirName.$inExtension *") != 0)
|
|
{
|
|
print "Error: zip $mZipParam -r ..$gPathDelimiter$dirName.$inExtension *\n";
|
|
chdir("..");
|
|
return(1);
|
|
}
|
|
chdir("..");
|
|
}
|
|
}
|
|
}
|
|
|
|
# Restore to the current working dir
|
|
chdir($saveCwdir);
|
|
return(0);
|
|
}
|
|
|