use strict; use YAML qw[LoadFile]; use File::Basename qw[basename]; use Data::Dumper; use Cwd; BEGIN { use lib qw[bin]; require '_inc.pl'; protoconf->import(); } @ARGV or die 'Need at least one source dir'; for my $srcdir (@ARGV ) { ### XXX can be custom file & nicer object & error checking my $struct = LoadFile( "$srcdir/$Pms/$Metafile" ) or die "Could not read $Metafile"; my $path = $struct->{package}; ### create a buildroot my $builddir = $Build_prefix . basename( $srcdir ); { ### copy all the stuff over to another dir ### toss out old stuff system( qq[ rm -rf $builddir ] ) and die "$?"; ### XXX instead of cp -R, we can read manifest/metafile system( qq[mkdir -p $builddir/$path] ) and die "$?"; system( qq[ cp -R $srcdir/* $builddir/$path ] ) and die "$?"; chdir $builddir or die "Could not chdir to $builddir: $!"; } ### build an archive file my $archive = $path . $Ext; { system( qq[tar --exclude $Pms -czf $Data $path] ) and die $?; system( qq[tar -f $Control -C $path/$Pms -cz .] ) and die $?; system( qq[tar -czf $archive $Control $Data] ) and die $?; 1 while unlink $Data; 1 while unlink $Control } print -e $archive && -s _ ? "\n\tCreated '$builddir/$archive' from sourcedir '$srcdir'\n" : "\n\tFailed to created '$builddir/$archive' from '$srcdir'\n" ; chdir $Cwd or die "Could not chdir back to '$Cwd'\n"; }