… | |
… | |
6 | use Urlader; |
6 | use Urlader; |
7 | |
7 | |
8 | my $verbose = 1; |
8 | my $verbose = 1; |
9 | |
9 | |
10 | my $URLADER; |
10 | my $URLADER; |
11 | my $OUTPUT = "-"; |
11 | my $OUTPUT; |
12 | my $WINDOWS_ICON; |
12 | my $WINDOWS_ICON; |
13 | my $MODE = "pack"; |
13 | my $MODE = "pack"; |
14 | |
14 | |
15 | Getopt::Long::Configure ("bundling", "no_ignore_case"); |
15 | Getopt::Long::Configure ("bundling", "no_ignore_case"); |
16 | GetOptions( |
16 | GetOptions( |
… | |
… | |
34 | |
34 | |
35 | my $out = *STDOUT; |
35 | my $out = *STDOUT; |
36 | |
36 | |
37 | if (length $OUTPUT) { |
37 | if (length $OUTPUT) { |
38 | undef $out; |
38 | undef $out; |
39 | open $out, ">:perlio", $OUTPUT |
39 | open $out, ">:raw:perlio", $OUTPUT |
40 | or die "$OUTPUT: $!"; |
40 | or die "$OUTPUT: $!"; |
41 | } |
41 | } |
42 | |
42 | |
43 | ############################################################################# |
43 | ############################################################################# |
44 | # for now, $MODE is --pack |
44 | # for now, $MODE is --pack |
… | |
… | |
49 | ############################################################################# |
49 | ############################################################################# |
50 | |
50 | |
51 | my $urlader_md5 = "\x00" x 16; |
51 | my $urlader_md5 = "\x00" x 16; |
52 | |
52 | |
53 | if (length $URLADER) { |
53 | if (length $URLADER) { |
54 | open my $fh, "<:perlio", $URLADER |
54 | open my $fh, "<:raw:perlio", $URLADER |
55 | or die "$URLADER: $!"; |
55 | or die "$URLADER: $!"; |
56 | my $urlader = do { local $/; <$fh> }; |
56 | my $urlader = do { local $/; <$fh> }; |
57 | |
57 | |
58 | if (length $WINDOWS_ICON) { |
58 | if (length $WINDOWS_ICON) { |
59 | require Win32::Exe; |
59 | require Win32::Exe; |
60 | if (my $exe = eval { Win32::Exe->new (\$urlader) }) { |
60 | if (my $exe = eval { Win32::Exe->new (\$urlader) }) { |
61 | $exe->set_icons (Win32::Exe::IconFile->new ($WINDOWS_ICON)->icons); |
61 | $exe->set_icons ([Win32::Exe::IconFile->new ($WINDOWS_ICON)->icons]); |
62 | $exe->write (\$urlader); |
62 | $exe->write (\$urlader); |
63 | } else { |
63 | } else { |
64 | print "unable to set icon ($@)\n" if $verbose >= 2; |
64 | print "unable to set icon ($@)\n" if $verbose >= 2; |
65 | } |
65 | } |
66 | } |
66 | } |
… | |
… | |
125 | my $len = -s _; |
125 | my $len = -s _; |
126 | |
126 | |
127 | $datasize += $len; |
127 | $datasize += $len; |
128 | $max_uncomp = $len if $max_uncomp < $len; |
128 | $max_uncomp = $len if $max_uncomp < $len; |
129 | |
129 | |
130 | open my $fh2, "<", "$path/$file" |
130 | open my $fh2, "<:raw:perlio", "$path/$file" |
131 | or die "$path/$file: $!"; |
131 | or die "$path/$file: $!"; |
132 | |
132 | |
133 | $len == sysread $fh2, my $data, $len |
133 | $len == sysread $fh2, my $data, $len |
134 | or die "$path/$file: read error"; |
134 | or die "$path/$file: read error"; |
135 | |
135 | |
… | |
… | |
220 | |
220 | |
221 | =back |
221 | =back |
222 | |
222 | |
223 | =head2 MODES |
223 | =head2 MODES |
224 | |
224 | |
|
|
225 | =over 4 |
|
|
226 | |
225 | =item --pack <exe_id> <exe_ver> <path> [env-vars...] <program> [arguments...] |
227 | =item --pack <exe_id> <exe_ver> <path> [env-vars...] <program> [arguments...] |
226 | |
228 | |
227 | Packs the given directory tree, env-variable assignments, program path |
229 | Packs the given directory tree, env-variable assignments, program path |
228 | and arguments into an urlader archive and optionally prepend the urlader |
230 | and arguments into an urlader archive and optionally prepend the urlader |
229 | binary (see C<--urlader>) and output the whole blob. |
231 | binary (see C<--urlader>) and output the whole blob. |