]>
Dogcows Code - chaz/homebank2ledger/blob - maint/fatpack.pl
3 # This script creates a fatpacked version of homebank2ledger. Much of this code was inspired by or
4 # blatantly copied from cpanminus build scripts, written by Tatsuhiko Miyagawa.
6 use warnings FATAL
=> 'all';
10 use App
::FatPacker
();
20 my $script_name = 'bin/homebank2ledger';
24 if (-d
"$distdir/blib") {
25 $script_name = "$distdir/blib/script/homebank2ledger";
26 $libdir = "$distdir/blib/lib";
29 $script_name = "$distdir/$script_name";
30 $libdir = "$distdir/$libdir";
40 # IO::Socket::IP requires newer Socket, which is C-based
41 $ENV{PERL_HTTP_TINY_IPV4_ONLY
} = 1;
46 unlink('homebank2ledger.tmp');
47 rmtree
('.fatpack-build');
56 open my $in, "<", $file;
58 /^\s*(?:use|require) (\S+)[^;]*;\s*$/
59 and $requires{$1} = 1;
85 exists $Module::CoreList
::version
{5.008001}{$module};
89 my($modules, $except) = @_;
90 my %exclude = map { $_ => 1 } @$except;
91 [ grep !$exclude{$_}, @$modules ];
95 my($path, $modules, $no_trace) = @_;
97 $modules = exclude_modules
($modules, $no_trace);
99 my $packer = App
::FatPacker-
>new;
100 my @requires = grep !is_core
(pm_to_mod
($_)), grep /\.pm$/, split /\n/,
101 $packer->trace(use => $modules, args
=> ['-e', 1]);
102 push @requires, map mod_to_pm
($_), @$no_trace;
104 my @packlists = $packer->packlists_containing(\
@requires);
105 for my $packlist (@packlists) {
106 print "Packing $packlist\n";
108 $packer->packlists_to_tree($path, \
@packlists);
112 my @modules = grep !in_lib
(mod_to_pm
($_)), find_requires
($script_name);
114 pack_modules
(cwd
. '/fatlib', \
@modules, []);
117 print "Remove fatlib/$Config{archname}\n";
118 rmtree
("fatlib/$Config{archname}");
119 rmtree
("fatlib/POD2");
128 find
({ wanted
=> $want, no_chdir
=> 1 }, 'fatlib');
133 my($base, $target, $fatpack) = @_;
135 open my $in, "<", $base;
136 open my $out, ">", "$target.tmp";
138 print STDERR
"Generating $target from $base\n";
141 s
|^#!\h*perl|#!/usr/bin/env perl|;
142 s
|^# FATPACK.*|$fatpack|;
148 eval { unlink $target };
149 rename "$target.tmp", $target;
153 mkdir '.fatpack-build';
154 system qw(cp -r fatlib), $libdir, qw(.fatpack-build/);
156 my $fatpack_compact = do {
157 my $dir = pushd
'.fatpack-build';
161 push @files, $_ if /\.pm$/;
168 find
({ wanted
=> $want, no_chdir
=> 1 }, 'fatlib', 'lib');
169 system qw(perlstrip --cache -v), @files;
174 my $filename = $script_name;
175 $filename =~ s!^.*/!!;
177 generate_file
($script_name, $filename, $fatpack_compact);
178 chmod 0755, $filename;
This page took 0.045805 seconds and 4 git commands to generate.