pre-seed with on disk backups
[BackupPC.git] / makeDist
index 13dd9cf..ebc7a66 100755 (executable)
--- a/makeDist
+++ b/makeDist
@@ -1,4 +1,4 @@
-#!/bin/perl
+#!/usr/bin/env perl
 #
 # makeDist: Build a BackupPC distribution
 #
 #
 #   Often the language files are not up to date, and makeDist
 #   exits after complaining about the lang files being inconsistent.
-#   Use the -l option to turn off that behavior.
+#   Use the -nolangCheck option to turn off that behavior.
 #
 # AUTHOR
 #   Craig Barratt <cbarratt@users.sourceforge.net>
 #
 # COPYRIGHT
-#   Copyright (C) 2001-2006  Craig Barratt
+#   Copyright (C) 2001-2010  Craig Barratt
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
 #   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
 #========================================================================
-#
 
 use strict;
 use File::Path;
 use File::Copy;
-use Getopt::Std;
+use Getopt::Long;
+use Data::Dumper;
+
 use lib "./lib";
 use BackupPC::Lib;
 use BackupPC::Config::Meta qw(:all);
@@ -53,14 +54,11 @@ die("BackupPC::Lib->new failed\n")
 
 umask(0022);
 
-my $Version     = "3.0.0beta1";
-my $ReleaseDate = "30 Jul 2006";
-my $DistDir     = "dist/BackupPC-$Version";
-
 my @PerlSrc = qw(
     bin/BackupPC
     bin/BackupPC_archive
     bin/BackupPC_archiveHost
+    bin/BackupPC_archiveStart
     bin/BackupPC_attribPrint
     bin/BackupPC_dump
     bin/BackupPC_fixupBackupSummary
@@ -73,7 +71,6 @@ my @PerlSrc = qw(
     bin/BackupPC_tarExtract
     bin/BackupPC_tarCreate
     bin/BackupPC_tarPCCopy
-    bin/BackupPC_compressPool
     bin/BackupPC_zipCreate
     bin/BackupPC_zcat
     lib/BackupPC/Attrib.pm
@@ -106,31 +103,59 @@ my @PerlSrc = qw(
     lib/BackupPC/CGI/Summary.pm
     lib/BackupPC/CGI/View.pm
     lib/BackupPC/Config/Meta.pm
+    lib/BackupPC/Lang/cz.pm
     lib/BackupPC/Lang/de.pm
     lib/BackupPC/Lang/en.pm
     lib/BackupPC/Lang/es.pm
     lib/BackupPC/Lang/fr.pm
     lib/BackupPC/Lang/it.pm
     lib/BackupPC/Lang/nl.pm
+    lib/BackupPC/Lang/pl.pm
     lib/BackupPC/Lang/pt_br.pm
+    lib/BackupPC/Lang/zh_CN.pm
     lib/BackupPC/Storage/Text.pm
+    lib/BackupPC/Xfer.pm
     lib/BackupPC/Xfer/Archive.pm
-    lib/BackupPC/Xfer/BackupPCd.pm
-    lib/BackupPC/Xfer/Smb.pm
-    lib/BackupPC/Xfer/Tar.pm
+    lib/BackupPC/Xfer/Ftp.pm
+    lib/BackupPC/Xfer/Protocol.pm
     lib/BackupPC/Xfer/Rsync.pm
     lib/BackupPC/Xfer/RsyncDigest.pm
     lib/BackupPC/Xfer/RsyncFileIO.pm
+    lib/BackupPC/Xfer/Smb.pm
+    lib/BackupPC/Xfer/Tar.pm
     lib/BackupPC/Zip/FileMember.pm
+    lib/Net/FTP/AutoReconnect.pm
+    lib/Net/FTP/RetrHandle.pm
     cgi-bin/BackupPC_Admin
 );
 
 my %opts;
-if ( !getopts("l", \%opts) || @ARGV != 0 ) {
-    print("usage: $0 [-l]\n");
+$opts{langCheck}   = 1;
+$opts{syntaxCheck} = 1;
+if ( !GetOptions(
+                 \%opts,
+                 "langCheck!",
+                 "syntaxCheck!",
+                 "version=s",
+                 "releasedate=s",
+           ) || @ARGV != 0
+             || !defined($opts{version})
+        ) {
+    print STDERR <<EOF;
+usage: $0 [--nolangCheck] [--nosyntaxCheck] [--releasedate 'DD MMM YYYY'] --version X.Y.Z
+EOF
     exit(1);
 }
 
+my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
+$year += 1900;
+
+my @month_abbr  = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
+
+my $Version     = $opts{version} || "3.2.0";
+my $ReleaseDate = $opts{releasedate} || "$mday $month_abbr[$mon] $year";
+my $DistDir     = "dist/BackupPC-$Version";
+
 #
 # Check config parameters
 #
@@ -155,6 +180,7 @@ $ConfVars->{LogDir}       = 2;
 $ConfVars->{ConfDir}      = 2;
 $ConfVars->{InstallDir}   = 2;
 $ConfVars->{CgiImageDir}  = 2;
+$ConfVars->{ClientCharsetLegacy}  = 2;      # actually used
 
 #
 # These config parameters are used in the code to be backward compatible,
@@ -165,10 +191,23 @@ $ConfVars->{BlackoutHourEnd}   = 2;
 $ConfVars->{BlackoutWeekDays}  = 2;
 $ConfVars->{RsyncLogLevel}     = 2;
 
+if ( $opts{syntaxCheck} ) {
+    system("perl -Ilib -c conf/config.pl >& /dev/null")
+            && die("$0: conf/config.pl contains a syntax error (or someone killed me)\n");
+}
 foreach my $file ( @PerlSrc ) {
+    if ( $opts{syntaxCheck} ) {
+        system("perl -Ilib -c $file >& /dev/null")
+            && die("$0: $file contains a syntax error (or someone killed me)\n");
+    }
+    #
+    # Skip checking of bundled libraries not explicitly part of
+    # BackupPC
+    #
+    next if ( $file =~ m/lib\/Net\/FTP/ );
     $errCnt += CheckConfigParams($file, $ConfVars, 1);
 }
-if ( !$opts{l} ) {
+if ( !$opts{langCheck} ) {
     $errCnt += CheckLangUsage();
     $errCnt += CheckLangTags();
 }
@@ -191,19 +230,21 @@ if ( $errCnt ) {
 rmtree($DistDir, 0, 0);
 mkpath($DistDir, 0, 0777);
 
-foreach my $dir ( qw(bin doc conf images init.d/src cgi-bin
+foreach my $dir ( qw(bin doc conf images init.d/src cgi-bin httpd/src
                     lib/BackupPC/CGI
                     lib/BackupPC/Config
                     lib/BackupPC/Lang
                     lib/BackupPC/Storage
                     lib/BackupPC/Xfer
                     lib/BackupPC/Zip
+                    lib/Net/FTP
                ) ) {
     mkpath("$DistDir/$dir", 0, 0777);
 }
 
 my %ConfName;
 my $ConfPod = config2pod();
+
 rmtree("doc", 0, 0);
 mkpath("doc", 0, 0777);
 InstallFile("doc-src/BackupPC.pod", "doc/BackupPC.pod");
@@ -216,19 +257,26 @@ pod2html("doc/BackupPC.pod",
         "--outfile=doc/BackupPC.html");
 
 foreach my $file ( (@PerlSrc,
-           <images/*>,
+           <images/*.gif>,
+           <images/*.png>,
+           <images/*.ico>,
            qw(
                conf/config.pl
                conf/hosts
                conf/BackupPC_stnd.css
+               conf/BackupPC_stnd_orig.css
+                conf/sorttable.js
                init.d/README
                init.d/src/debian-backuppc
+               init.d/src/freebsd-backuppc
+               init.d/src/freebsd-backuppc2
                init.d/src/gentoo-backuppc
                init.d/src/gentoo-backuppc.conf
                init.d/src/linux-backuppc
                init.d/src/slackware-backuppc
                init.d/src/solaris-backuppc
                init.d/src/suse-backuppc
+               httpd/src/BackupPC.conf
                doc/BackupPC.pod
                doc/BackupPC.html
                README
@@ -255,7 +303,7 @@ sub InstallFile
     my($file, $dest) = @_;
 
     unlink($dest) if ( -d $dest );
-    if ( $file =~ /\.gif/ ) {
+    if ( $file =~ /\.gif/ || $file =~ /\.png/ || $file =~ /\.ico/ ) {
         die("can't copy($file, $dest)\n") unless copy($file, $dest);
     } else {
        open(FILE, $file)   || die("can't open $file for reading\n");
@@ -268,24 +316,15 @@ sub InstallFile
            s/__RELEASEDATE__/$ReleaseDate/g;
            if ( $file =~ /BackupPC\.html$/ ) {
                #
-               # fixup for perl 5.6.x
+               # fixup for conf links
                #
-               if ( !/A NAME="item_(%|_)24Conf/i ) {
+               if ( !/a name="_conf/i ) {
                    s/\$Conf{([^}]*)}/
                        defined($ConfName{$1})
-                           ? "\L<A HREF=\"#$ConfName{$1}\">\E\$Conf{$1}<\/A>"
+                           ? "\L<a href=\"#$ConfName{$1}\">\E\$Conf{$1}<\/a>"
                            : "\$Conf{$1}"/eg;
                }
-               s/<(A NAME="item_(%|_)24Conf(%|_)7B(.*?)(%|_)7D).*?">/\L<A NAME="item_%24Conf%7b$4%7d">/ig;
                s/^<DD>/<DD><P>/;
-               #
-               # Fixup for perl 5.8.x first one no longer needed after
-               # fix in CSS)
-               #
-#              if ( /^<\/dt>/ ) {
-#                  $_ .= <FILE>;
-#                  s/^(<\/dt>\n<dd>)/$1<p>/s;
-#              }
                s/^<li><\/li>/<li>/;
            }
            if ( /__CONFIGPOD__/ ) {
@@ -297,6 +336,8 @@ sub InstallFile
                print OUT "$1'__TOPDIR__'$2\n";
            } elsif ( $file =~ /Lib.pm/ && /^(\s*\$installDir\s*=\s*)'.*'(\s*if\s.*)/ ) {
                print OUT "$1'__INSTALLDIR__'$2\n";
+           } elsif ( $file =~ /Lib.pm/ && /^(\s*ConfDir\s*=\>\s*\$confDir eq.*)'.*'(.*)/ ) {
+               print OUT "$1'__CONFDIR__'$2\n";
             } elsif ( $file =~ /Lib.pm/ && /^(\s*my \$useFHS\s*=\s*)\d;/ ) {
                 print OUT "${1}0;\n";
             } elsif ( $file =~ /Lib.pm/ && /(.*Version *=> .*)'[\w\d\.]+',/ ) {
@@ -354,11 +395,9 @@ sub config2pod
                 s/([^;])\s*$/$1 .../;
             }
             push(@conf, $_);
-            my $text = "\$Conf{$var}";
-            $text =~ s/\s+/_/sg;
-            $text =~ s{(\W)}{sprintf("%%%02X", ord($1) )}gxe;
-            $text = substr($text, 0, 50);
-            $ConfName{$var} = "item_$text";
+            my $text = "_conf_${var}_";
+            $text =~ s{[\W\s]}{_}g;
+            $ConfName{$var} = "$text";
         } elsif ( /^$/ ) {
             if ( $str ne "" && @conf ) {
                 $out .= "=item " . join("\n\n=item ", @conf) . "\n\n";
@@ -530,7 +569,7 @@ sub CheckLangUsage
             s/#.*//g;
             s/\$Lang{([^}]*)}/
                    my $var = $1;
-                   next if ( $var =~ m{^(Reason_|Status_|backupType_)} );
+                   next if ( $var =~ m{^(Reason_|Status_|backupType_|Disabled_)} );
                    next if ( $var eq "Documentation" );
                     if ( !defined($vars->{$var}) ) {
                         print("Unexpected Lang var $var in $f\n");
@@ -563,7 +602,7 @@ sub CheckLangTags
     my($en, $enVars) = LangParse("lib/BackupPC/Lang/en.pm");
     my($errors);
 
-    foreach my $lang ( qw(fr.pm de.pm es.pm it.pm nl.pm) ) {
+    foreach my $lang ( qw(cz.pm fr.pm de.pm es.pm it.pm nl.pm pl.pm pt_br.pm zh_CN.pm) ) {
        my($d, $dVars) = LangParse("lib/BackupPC/Lang/$lang");
        foreach my $v1 ( @$en ) {
            my $v2 = shift(@$d);