use strict;
use warnings FATAL => 'all';
+use 5.008001;
use Getopt::Long;
use Cwd qw(cwd);
use File::Find qw(find);
catdir splitpath splitdir catpath rel2abs abs2rel
);
use File::Copy qw(copy);
-use File::Path qw(make_path remove_tree);
+use File::Path qw(mkpath rmtree);
use B qw(perlstring);
+our $VERSION = '0.009006'; # 0.9.6
+
+$VERSION = eval $VERSION;
+
my $option_parser = Getopt::Long::Parser->new(
config => [ qw(require_order pass_through bundling no_auto_abbrev) ]
);
$text;
}
-our $VERSION = '0.009001'; # 0.9.1
-
-$VERSION = eval $VERSION;
-
sub import {
$_[1] eq '-run_script'
and return shift->new->run_script;
sub run_script {
my ($self, $args) = @_;
my @args = $args ? @$args : @ARGV;
- (my $cmd = shift @args) =~ s/-/_/g;
+ (my $cmd = shift @args || 'help') =~ s/-/_/g;
if (my $meth = $self->can("script_command_${cmd}")) {
$self->$meth(\@args);
} else {
}
}
+sub script_command_help {
+ print "Try `perldoc fatpack` for how to use me\n";
+}
+
sub script_command_trace {
my ($self, $args) = @_;
$pack_rev{$_} = $File::Find::name for lines_of $File::Find::name;
}, @search);
chdir($cwd) or die "Couldn't chdir back to ${cwd} after find: $!";
- my %found; @found{map $pack_rev{$INC{$_}}, @targets} = ();
+ my %found; @found{map +($pack_rev{$INC{$_}}||()), @targets} = ();
sort keys %found;
}
sub packlists_to_tree {
my ($self, $where, $packlists) = @_;
- remove_tree $where;
- make_path $where;
+ rmtree $where;
+ mkpath $where;
foreach my $pl (@$packlists) {
my ($vol, $dirs, $file) = splitpath $pl;
my @dir_parts = splitdir $dirs;
next unless substr($source,0,length $pack_base) eq $pack_base;
my $target = rel2abs( abs2rel($source, $pack_base), $where );
my $target_dir = catpath((splitpath $target)[0,1]);
- make_path $target_dir;
+ mkpath $target_dir;
copy $source => $target;
}
}
unshift @INC, sub {
if (my $fat = $fatpacked{$_[1]}) {
- open my $fh, '<', \$fat;
+ open my $fh, '<', \$fat
+ or die "FatPacker error loading $_[1] (could be a perl installation issue?)";
return $fh;
}
return
my @segments = map {
(my $stub = $_) =~ s/\.pm$//;
my $name = uc join '_', split '/', $stub;
- my $data = $files{$_}; $data =~ s/^/ /mg;
+ my $data = $files{$_}; $data =~ s/^/ /mg; $data =~ s/(?<!\n)\z/\n/;
'$fatpacked{'.perlstring($_).qq!} = <<'${name}';\n!
.qq!${data}${name}\n!;
} sort keys %files;
print join "\n", $start, @segments, $end;
}
+
+=head1 NAME
+
+App::FatPacker - pack your dependencies onto your script file
+
+=head1 SYNOPSIS
+
+ $ fatpack trace myscript.pl
+ $ fatpack packlists-for `cat fatpacker.trace` >packlists
+ $ fatpack tree `cat packlists`
+ $ (fatpack file; cat myscript.pl) >myscript.packed.pl
+
+See the documentation for the L<fatpack> script itself for more information.
+
+The programmatic API for this code is not yet fully decided, hence the 0.9.1
+release version. Expect that to be cleaned up for 1.0.
+
+=head1 SUPPORT
+
+Your current best avenue is to come annoy annoy mst on #toolchain on
+irc.perl.org. There should be a non-IRC means of support by 1.0.
+
+=head1 AUTHOR
+
+Matt S. Trout (mst) <mst@shadowcat.co.uk>
+
+=head2 CONTRIBUTORS
+
+None as yet, though I probably owe lots of people thanks for ideas. Yet
+another doc nit to fix.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2010 the App::FatPacker L</AUTHOR> and L</CONTRIBUTORS>
+as listed above.
+
+=head1 LICENSE
+
+This library is free software and may be distributed under the same terms
+as perl itself.
+
+=cut
+
1;