#!/usr/bin/perl # # This all could (maybe) be done in a shell script, but I suck at those. $i = 0; $Verbose = 0; $Plugin = ""; $Version = ""; $SMVersion = ""; foreach $arg (@ARGV) { if ($arg eq "-v") { $Verbose = 1; } elsif ($Plugin eq "") { $Plugin = $arg; } elsif ($Version eq "") { $Version = $arg; } elsif ($SMVersion eq "") { $SMVersion = $arg; } else { print "Unrecognized argument: $arg\n"; exit(0); } } if ($SMVersion eq "") { print "Syntax: make_archive.pl [-v] plugin_name version sm_version\n"; print "-v = be verbose\n"; print "plugin_name: The name of the plugin\n"; print "version: The plugin's version number (1.0, 2.3, etc)\n"; print "sm_version: The oldest version of SquirrelMail that this\n"; print " plugin is for sure compatible with (1.0.1, 0.5, 1.1.0, etc)\n"; exit(0); } print "Validating name and version\n" if ($Verbose); $Plugin =~ s/\///g; if ($Plugin =~ /[^a-z_]/) { print "Plugin name can only contain a-z and _\n"; exit(0); } if ($Version =~ /[^\.0-9]/ || $SMVersion =~ /[^\.0-9]/) { print "Version numbers can only have 0-9 and period\n"; exit(0); } VerifyPluginDir($Plugin); 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-$SMVersion.tar.gz\n"; system("tar cvfz $Plugin.$Version-$SMVersion.tar.gz $Plugin" . FindTarExcludes(@Files) . $QuietString); #print "\n\n" if ($Verbose); #print "Creating $Plugin.$Version-$SMVersion.zip\n"; #system("zip -r $Plugin.$Version-$SMVersion.zip $Plugin/" . # FindZipExcludes(@Files) . $QuietString); sub VerifyPluginDir { local ($Plugin) = @_; 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 .= " --exclude $1"; } } 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; }