The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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";
}