Adding plugins back into 1.1
[squirrelmail.git] / plugins / make_archive.pl
diff --git a/plugins/make_archive.pl b/plugins/make_archive.pl
new file mode 100755 (executable)
index 0000000..3a3bf17
--- /dev/null
@@ -0,0 +1,144 @@
+#!/usr/bin/perl
+#
+# This all could (maybe) be done in a shell script, but I suck at those.
+
+$i = 0;
+$Verbose = 0;
+$Plugin = "";
+$Version = "";
+
+foreach $arg (@ARGV)
+{
+    if ($arg eq "-v")
+    {
+        $Verbose = 1;
+    }
+    elsif ($Plugin eq "")
+    {
+        $Plugin = $arg;
+    }
+    elsif ($Version eq "")
+    {
+        $Version = $arg;
+    }
+    else
+    {
+        print "Unrecognized argument:  $arg\n";
+       exit(0);
+    }
+}
+
+if ($Version eq "")
+{
+    print "Syntax:  make_archive.pl [-v] plugin_name version.number\n";
+    print "-v = be verbose\n";
+    exit(0);
+}
+
+
+print "Reformatting plugin name and version number.\n" if ($Verbose);
+$Plugin =~ s/\///g;
+$Version =~ s/\./_/g;
+
+VerifyInfo($Plugin, $Version);
+
+print "Getting file list.\n" if ($Verbose);
+@Files = RecurseDir($Plugin);
+
+$QuietString = " > /dev/null 2> /dev/null" if (! $Verbose);
+
+print "\n\n" if ($Verbose);
+print "Creating $Plugin-$Version.tar.gz\n";
+system("tar cvfz $Plugin-$Version.tar.gz $Plugin" . FindTarExcludes(@Files)
+    . $QuietString);
+    
+print "\n\n" if ($Verbose);
+print "Creating $Plugin-$Version.zip\n";
+system("zip -r $Plugin-$Version.zip $Plugin/" . FindZipExcludes(@Files)
+    . $QuietString);
+
+
+
+sub VerifyInfo
+{
+    local ($Plugin, $Version) = @_;
+    
+    if (! -e $Plugin && ! -d $Plugin)
+    {
+        print "The $Plugin directory doesn't exist, " .
+           "or else it is not a directory.\n";
+        exit(0);
+    }
+}
+
+
+sub FindTarExcludes
+{
+    local (@Files) = @_;
+    
+    $ExcludeStr = "";
+    
+    foreach $File (@Files)
+    {
+        if ($File =~ /^(.*\/CVS)\/$/)
+       {
+           $ExcludeStr .= " $1";
+       }
+    }
+    
+    if ($ExcludeStr ne "")
+    {
+        $ExcludeStr = " --exclude" . $ExcludeStr;
+    }
+    
+    return $ExcludeStr;
+}
+
+sub FindZipExcludes
+{
+    local (@Files) = @_;
+    
+    $ExcludeStr = "";
+    
+    foreach $File (@Files)
+    {
+        if ($File =~ /^(.*\/CVS)\/$/)
+       {
+           $ExcludeStr .= " $1/ $1/*";
+       }
+    }
+    
+    if ($ExcludeStr ne "")
+    {
+        $ExcludeStr = " -x" . $ExcludeStr;
+    }
+    
+    return $ExcludeStr;
+}
+
+sub RecurseDir
+{
+    local ($Dir) = @_;
+    local (@Files, @Results);
+    
+    opendir(DIR, $Dir);
+    @Files = readdir(DIR);
+    closedir(DIR);
+    
+    @Results = ("$Dir/");
+    
+    foreach $file (@Files)
+    {
+        next if ($file =~ /^[\.]+/);
+        if (-d "$Dir/$file")
+       {
+           push (@Results, RecurseDir("$Dir/$file"));
+       }
+       else
+       {
+           push (@Results, "$Dir/$file");
+       }
+    }
+    
+    return @Results;
+}