[Box Backup-commit] COMMIT r1241 - in box/chris/merge: . infrastructure
boxbackup-dev at fluffy.co.uk
boxbackup-dev at fluffy.co.uk
Sat Jan 13 15:41:12 GMT 2007
Author: chris
Date: 2007-01-13 15:41:12 +0000 (Sat, 13 Jan 2007)
New Revision: 1241
Added:
box/chris/merge/infrastructure/makedistribution.pl.in
Removed:
box/chris/merge/infrastructure/makedistribution.pl
Modified:
box/chris/merge/configure.ac
Log:
Rename makedistribution.pl to makedistribution.pl.in.
Auto-generate makedistribution.pl in configure, to replace @PERL@ in
shebang line.
Process spec files as text files, to allow removing private parts. (refs #3)
Modified: box/chris/merge/configure.ac
===================================================================
--- box/chris/merge/configure.ac 2007-01-13 01:02:57 UTC (rev 1240)
+++ box/chris/merge/configure.ac 2007-01-13 15:41:12 UTC (rev 1241)
@@ -240,6 +240,7 @@
bin/bbstored/bbstored-config
infrastructure/makebuildenv.pl
infrastructure/makeparcels.pl
+ infrastructure/makedistribution.pl
lib/common/makeexception.pl
lib/raidfile/raidfile-config
lib/server/makeprotocol.pl
Deleted: box/chris/merge/infrastructure/makedistribution.pl
===================================================================
--- box/chris/merge/infrastructure/makedistribution.pl 2007-01-13 01:02:57 UTC (rev 1240)
+++ box/chris/merge/infrastructure/makedistribution.pl 2007-01-13 15:41:12 UTC (rev 1241)
@@ -1,327 +0,0 @@
-#!@PERL@
-use strict;
-use Symbol;
-
-# comment string for various endings
-my %comment_chars = ('cpp' => '// ', 'h' => '// ', 'pl' => '# ', 'pm' => '# ', '' => '# ');
-
-# other extensions which need text copying, just to remove the private stuff
-my %text_files = ('txt' => 1);
-
-# files which don't get the license added
-my %no_license = (); # 'filename' => 1
-
-# ----------------------------------------------
-
-# filled in from the manifest file
-my %no_license_dir = ();
-
-# distribution name
-my $distribution = $ARGV[0];
-die "No distribution name specified on the command line" if $distribution eq '';
-my $dist_root = "distribution/$distribution";
-
-# check distribution exists
-die "Distribution '$distribution' does not exist" unless -d $dist_root;
-
-# get version
-open VERSION,"$dist_root/VERSION.txt" or die "Can't open $dist_root/VERSION.txt";
-my $version = <VERSION>;
-chomp $version;
-my $archive_name = <VERSION>;
-chomp $archive_name;
-close VERSION;
-
-# consistency check
-die "Archive name '$archive_name' is not equal to the distribution name '$distribution'"
- unless $archive_name eq $distribution;
-
-# make initial directory
-my $base_name = "$archive_name-$version";
-system "rm -rf $base_name";
-system "rm $base_name.tgz";
-mkdir $base_name,0755;
-
-# get license file
-open LICENSE,"$dist_root/LICENSE.txt" or die "Can't open $dist_root/LICENSE.txt";
-my $license_f;
-read LICENSE,$license_f,100000;
-close LICENSE;
-my $svnversion = `svnversion .`;
-chomp $svnversion;
-my @license = ('distribution '.$base_name.' (svn version: '.$svnversion.')',split(/\n/,$license_f));
-
-# copy files, make a note of all the modules included
-my %modules_included;
-my $private_sections_removed = 0;
-my $non_distribution_sections_removed = 0;
-sub copy_from_list
-{
- my $list = $_[0];
- open LIST,$list or die "Can't open $list";
-
- while(<LIST>)
- {
- next unless m/\S/;
- chomp;
- my ($src,$dst) = split /\s+/;
- $dst = $src if $dst eq '';
- if($src eq 'MKDIR')
- {
- # actually we just need to make a directory here
- mkdir "$base_name/$dst",0755;
- }
- elsif($src eq 'NO-LICENSE-IN-DIR')
- {
- # record that this directory shouldn't have the license added
- $no_license_dir{$dst} = 1;
- }
- elsif($src eq 'REPLACE-VERSION-IN')
- {
- replace_version_in($dst);
- }
- elsif($src eq 'NO-LICENSE')
- {
- $no_license{$dst} = 1;
- }
- elsif($src eq 'RUN')
- {
- print "Running $dst...\n";
- if(system($dst) != 0)
- {
- print "Error running $dst. Aborting.\n";
- exit(1);
- }
- }
- elsif(-d $src)
- {
- $modules_included{$_} = 1;
- copy_dir($src,$dst);
- }
- else
- {
- copy_file($src,$dst);
- }
- }
-
- close LIST;
-}
-copy_from_list("distribution/COMMON-MANIFEST.txt");
-copy_from_list("$dist_root/DISTRIBUTION-MANIFEST.txt");
-
-# Copy in the root directory and delete the DISTRIBUTION-MANIFEST file
-(system("cp $dist_root/*.* $base_name/") == 0)
- or die "Copy of root extra files failed";
-unlink "$base_name/DISTRIBUTION-MANIFEST.txt"
- or die "Delete of DISTRIBUTION-MANIFEST.txt file failed";
-
-# produce a new modules file
-my $modules = gensym;
-open $modules,"modules.txt" or die "Can't open modules.txt for reading";
-open MODULES_OUT,">$base_name/modules.txt";
-
-while(<$modules>)
-{
- # skip lines for modules which aren't included
- next if m/\A(\w+\/\w+)\s/ && !exists $modules_included{$1};
-
- # skip private sections
- unless(skip_non_applicable_section($_, $modules, 'modules.txt'))
- {
- # copy line to out files
- print MODULES_OUT
- }
-}
-
-close MODULES_OUT;
-close $modules;
-
-# report on how many private sections were removed
-print "Private sections removed: $private_sections_removed\nNon-distribution sections removed: $non_distribution_sections_removed\n";
-
-# tar it up
-system "tar cf - $base_name | gzip -9 - > $base_name.tgz";
-
-sub copy_file
-{
- my ($fn,$dst_fn) = @_;
-
- my $ext;
- $ext = $1 if $fn =~ m/\.(\w+)\Z/;
-
- # licenses not used in this directory?
- my $license_in_dir = 1;
- $dst_fn =~ m~\A(.+)/[^/]+?\Z~;
- $license_in_dir = 0 if exists $no_license_dir{$1};
-
- # licensed or not?
- if(exists $comment_chars{$ext} && !exists $no_license{$fn} && $license_in_dir)
- {
- my $b = $comment_chars{$ext};
-
- # copy as text, inserting license
- my $in = gensym;
- open $in,$fn;
- open OUT,">$base_name/$dst_fn";
-
- my $first = <$in>;
- if($first =~ m/\A#!/)
- {
- print OUT $first;
- $first = '';
- }
-
- # write license
- for(@license)
- {
- print OUT $b,$_,"\n"
- }
-
- if($first ne '')
- {
- print OUT $first;
- }
-
- while(<$in>)
- {
- unless(skip_non_applicable_section($_, $in, $fn))
- {
- print OUT
- }
- }
-
- close OUT;
- close $in;
- }
- else
- {
- if(exists $text_files{$ext})
- {
- # copy this as text, to remove private stuff
- my $in = gensym;
- open $in,$fn;
- open OUT,">$base_name/$dst_fn";
-
- while(<$in>)
- {
- unless(skip_non_applicable_section($_, $in, $fn))
- {
- print OUT
- }
- }
-
- close OUT;
- close $in;
- }
- else
- {
- # copy as binary
- system 'cp',$fn,"$base_name/$dst_fn"
- }
- }
-
- # copy executable bit from src
- if(-x $fn)
- {
- system 'chmod','a+x',"$base_name/$dst_fn"
- }
- else
- {
- system 'chmod','a-x',"$base_name/$dst_fn"
- }
-}
-
-sub skip_non_applicable_section
-{
- my ($l, $filehandle, $filename) = @_;
- if($l =~ m/BOX_PRIVATE_BEGIN/)
- {
- # skip private section
- print "Removing private section from $filename\n";
- $private_sections_removed++;
- while(<$filehandle>) {last if m/BOX_PRIVATE_END/}
-
- # skipped something
- return 1;
- }
- elsif($l =~ m/IF_DISTRIBUTION\((.+?)\)/)
- {
- # which distributions does this apply to?
- my $applies = 0;
- for(split /,/,$1)
- {
- $applies = 1 if $_ eq $distribution
- }
- unless($applies)
- {
- # skip section?
- print "Removing distribution specific section from $filename\n";
- $non_distribution_sections_removed++;
- while(<$filehandle>) {last if m/END_IF_DISTRIBUTION/}
- }
- # hide this line
- return 1;
- }
- elsif($l =~ m/END_IF_DISTRIBUTION/)
- {
- # hide these lines
- return 1;
- }
- else
- {
- # no skipping, return this line
- return 0;
- }
-}
-
-sub copy_dir
-{
- my ($dir,$dst_dir) = @_;
-
- # copy an entire directory... first make sure it exists
- my @n = split /\//,$dst_dir;
- my $d = $base_name;
- for(@n)
- {
- $d .= '/';
- $d .= $_;
- mkdir $d,0755;
- }
-
- # then do each of the files within in
- opendir DIR,$dir;
- my @items = readdir DIR;
- closedir DIR;
-
- for(@items)
- {
- next if m/\A\./;
- next if m/\A_/;
- next if m/\AMakefile\Z/;
- next if m/\Aautogen/;
- next if !-f "$dir/$_";
-
- copy_file("$dir/$_","$dst_dir/$_");
- }
-}
-
-sub replace_version_in
-{
- my ($file) = @_;
-
- my $fn = $base_name . '/' . $file;
- open IN,$fn or die "Can't open $fn";
- open OUT,'>'.$fn.'.new' or die "Can't open $fn.new for writing";
-
- while(<IN>)
- {
- s/###DISTRIBUTION-VERSION-NUMBER###/$version/g;
- print OUT
- }
-
- close OUT;
- close IN;
-
- rename($fn.'.new', $fn) or die "Can't rename in place $fn";
-}
-
Copied: box/chris/merge/infrastructure/makedistribution.pl.in (from rev 1233, box/chris/merge/infrastructure/makedistribution.pl)
===================================================================
--- box/chris/merge/infrastructure/makedistribution.pl.in (rev 0)
+++ box/chris/merge/infrastructure/makedistribution.pl.in 2007-01-13 15:41:12 UTC (rev 1241)
@@ -0,0 +1,327 @@
+#!@PERL@
+use strict;
+use Symbol;
+
+# comment string for various endings
+my %comment_chars = ('cpp' => '// ', 'h' => '// ', 'pl' => '# ', 'pm' => '# ', '' => '# ');
+
+# other extensions which need text copying, just to remove the private stuff
+my %text_files = ('txt' => 1, 'spec' => 1);
+
+# files which don't get the license added
+my %no_license = (); # 'filename' => 1
+
+# ----------------------------------------------
+
+# filled in from the manifest file
+my %no_license_dir = ();
+
+# distribution name
+my $distribution = $ARGV[0];
+die "No distribution name specified on the command line" if $distribution eq '';
+my $dist_root = "distribution/$distribution";
+
+# check distribution exists
+die "Distribution '$distribution' does not exist" unless -d $dist_root;
+
+# get version
+open VERSION,"$dist_root/VERSION.txt" or die "Can't open $dist_root/VERSION.txt";
+my $version = <VERSION>;
+chomp $version;
+my $archive_name = <VERSION>;
+chomp $archive_name;
+close VERSION;
+
+# consistency check
+die "Archive name '$archive_name' is not equal to the distribution name '$distribution'"
+ unless $archive_name eq $distribution;
+
+# make initial directory
+my $base_name = "$archive_name-$version";
+system "rm -rf $base_name";
+system "rm $base_name.tgz";
+mkdir $base_name,0755;
+
+# get license file
+open LICENSE,"$dist_root/LICENSE.txt" or die "Can't open $dist_root/LICENSE.txt";
+my $license_f;
+read LICENSE,$license_f,100000;
+close LICENSE;
+my $svnversion = `svnversion .`;
+chomp $svnversion;
+my @license = ('distribution '.$base_name.' (svn version: '.$svnversion.')',split(/\n/,$license_f));
+
+# copy files, make a note of all the modules included
+my %modules_included;
+my $private_sections_removed = 0;
+my $non_distribution_sections_removed = 0;
+sub copy_from_list
+{
+ my $list = $_[0];
+ open LIST,$list or die "Can't open $list";
+
+ while(<LIST>)
+ {
+ next unless m/\S/;
+ chomp;
+ my ($src,$dst) = split /\s+/;
+ $dst = $src if $dst eq '';
+ if($src eq 'MKDIR')
+ {
+ # actually we just need to make a directory here
+ mkdir "$base_name/$dst",0755;
+ }
+ elsif($src eq 'NO-LICENSE-IN-DIR')
+ {
+ # record that this directory shouldn't have the license added
+ $no_license_dir{$dst} = 1;
+ }
+ elsif($src eq 'REPLACE-VERSION-IN')
+ {
+ replace_version_in($dst);
+ }
+ elsif($src eq 'NO-LICENSE')
+ {
+ $no_license{$dst} = 1;
+ }
+ elsif($src eq 'RUN')
+ {
+ print "Running $dst...\n";
+ if(system($dst) != 0)
+ {
+ print "Error running $dst. Aborting.\n";
+ exit(1);
+ }
+ }
+ elsif(-d $src)
+ {
+ $modules_included{$_} = 1;
+ copy_dir($src,$dst);
+ }
+ else
+ {
+ copy_file($src,$dst);
+ }
+ }
+
+ close LIST;
+}
+copy_from_list("distribution/COMMON-MANIFEST.txt");
+copy_from_list("$dist_root/DISTRIBUTION-MANIFEST.txt");
+
+# Copy in the root directory and delete the DISTRIBUTION-MANIFEST file
+(system("cp $dist_root/*.* $base_name/") == 0)
+ or die "Copy of root extra files failed";
+unlink "$base_name/DISTRIBUTION-MANIFEST.txt"
+ or die "Delete of DISTRIBUTION-MANIFEST.txt file failed";
+
+# produce a new modules file
+my $modules = gensym;
+open $modules,"modules.txt" or die "Can't open modules.txt for reading";
+open MODULES_OUT,">$base_name/modules.txt";
+
+while(<$modules>)
+{
+ # skip lines for modules which aren't included
+ next if m/\A(\w+\/\w+)\s/ && !exists $modules_included{$1};
+
+ # skip private sections
+ unless(skip_non_applicable_section($_, $modules, 'modules.txt'))
+ {
+ # copy line to out files
+ print MODULES_OUT
+ }
+}
+
+close MODULES_OUT;
+close $modules;
+
+# report on how many private sections were removed
+print "Private sections removed: $private_sections_removed\nNon-distribution sections removed: $non_distribution_sections_removed\n";
+
+# tar it up
+system "tar cf - $base_name | gzip -9 - > $base_name.tgz";
+
+sub copy_file
+{
+ my ($fn,$dst_fn) = @_;
+
+ my $ext;
+ $ext = $1 if $fn =~ m/\.(\w+)\Z/;
+
+ # licenses not used in this directory?
+ my $license_in_dir = 1;
+ $dst_fn =~ m~\A(.+)/[^/]+?\Z~;
+ $license_in_dir = 0 if exists $no_license_dir{$1};
+
+ # licensed or not?
+ if(exists $comment_chars{$ext} && !exists $no_license{$fn} && $license_in_dir)
+ {
+ my $b = $comment_chars{$ext};
+
+ # copy as text, inserting license
+ my $in = gensym;
+ open $in,$fn;
+ open OUT,">$base_name/$dst_fn";
+
+ my $first = <$in>;
+ if($first =~ m/\A#!/)
+ {
+ print OUT $first;
+ $first = '';
+ }
+
+ # write license
+ for(@license)
+ {
+ print OUT $b,$_,"\n"
+ }
+
+ if($first ne '')
+ {
+ print OUT $first;
+ }
+
+ while(<$in>)
+ {
+ unless(skip_non_applicable_section($_, $in, $fn))
+ {
+ print OUT
+ }
+ }
+
+ close OUT;
+ close $in;
+ }
+ else
+ {
+ if(exists $text_files{$ext})
+ {
+ # copy this as text, to remove private stuff
+ my $in = gensym;
+ open $in,$fn;
+ open OUT,">$base_name/$dst_fn";
+
+ while(<$in>)
+ {
+ unless(skip_non_applicable_section($_, $in, $fn))
+ {
+ print OUT
+ }
+ }
+
+ close OUT;
+ close $in;
+ }
+ else
+ {
+ # copy as binary
+ system 'cp',$fn,"$base_name/$dst_fn"
+ }
+ }
+
+ # copy executable bit from src
+ if(-x $fn)
+ {
+ system 'chmod','a+x',"$base_name/$dst_fn"
+ }
+ else
+ {
+ system 'chmod','a-x',"$base_name/$dst_fn"
+ }
+}
+
+sub skip_non_applicable_section
+{
+ my ($l, $filehandle, $filename) = @_;
+ if($l =~ m/BOX_PRIVATE_BEGIN/)
+ {
+ # skip private section
+ print "Removing private section from $filename\n";
+ $private_sections_removed++;
+ while(<$filehandle>) {last if m/BOX_PRIVATE_END/}
+
+ # skipped something
+ return 1;
+ }
+ elsif($l =~ m/IF_DISTRIBUTION\((.+?)\)/)
+ {
+ # which distributions does this apply to?
+ my $applies = 0;
+ for(split /,/,$1)
+ {
+ $applies = 1 if $_ eq $distribution
+ }
+ unless($applies)
+ {
+ # skip section?
+ print "Removing distribution specific section from $filename\n";
+ $non_distribution_sections_removed++;
+ while(<$filehandle>) {last if m/END_IF_DISTRIBUTION/}
+ }
+ # hide this line
+ return 1;
+ }
+ elsif($l =~ m/END_IF_DISTRIBUTION/)
+ {
+ # hide these lines
+ return 1;
+ }
+ else
+ {
+ # no skipping, return this line
+ return 0;
+ }
+}
+
+sub copy_dir
+{
+ my ($dir,$dst_dir) = @_;
+
+ # copy an entire directory... first make sure it exists
+ my @n = split /\//,$dst_dir;
+ my $d = $base_name;
+ for(@n)
+ {
+ $d .= '/';
+ $d .= $_;
+ mkdir $d,0755;
+ }
+
+ # then do each of the files within in
+ opendir DIR,$dir;
+ my @items = readdir DIR;
+ closedir DIR;
+
+ for(@items)
+ {
+ next if m/\A\./;
+ next if m/\A_/;
+ next if m/\AMakefile\Z/;
+ next if m/\Aautogen/;
+ next if !-f "$dir/$_";
+
+ copy_file("$dir/$_","$dst_dir/$_");
+ }
+}
+
+sub replace_version_in
+{
+ my ($file) = @_;
+
+ my $fn = $base_name . '/' . $file;
+ open IN,$fn or die "Can't open $fn";
+ open OUT,'>'.$fn.'.new' or die "Can't open $fn.new for writing";
+
+ while(<IN>)
+ {
+ s/###DISTRIBUTION-VERSION-NUMBER###/$version/g;
+ print OUT
+ }
+
+ close OUT;
+ close IN;
+
+ rename($fn.'.new', $fn) or die "Can't rename in place $fn";
+}
+
More information about the Boxbackup-commit
mailing list