#!/usr/bin/perl -w
use strict;
(my $prog = $0) =~ s{.*/}{};
my $Usage =
qq{$prog [options] source.pl archive.zip
options:
--help:
Display this summary.
--output=FN, -o FN:
Create selfextracting script FN (default is to output to stdout).
--perlbin=PATH, -p PATH:
Use PATH for the #! line in output script (default is /usr/bin/perl).
};
my $OutputFile = undef;
my $PerlBin = undef;
my $ShowHelp = 0;
die $Usage
unless GetOptions( "help" => \$ShowHelp,
"perlbin=s" => \$PerlBin,
"output=s" => \$OutputFile,
);
die $Usage if $ShowHelp;
my $script = shift;
my $archive = shift;
die $Usage unless ( defined($script) && defined($archive) );
my %opts = ();
if ( defined($OutputFile) ) {
open( my $out, "> $OutputFile" ) ||
die "Can't open specified output file '$OutputFile' ($!)\n";
$opts{output_fh} = $out;
}
if ( defined($PerlBin) ) {
$opts{perlbin} = $PerlBin;
}
Archive::SelfExtract::createExtractor( $script, $archive, %opts );
close( $opts{output_fh} ) if defined($OutputFile);
__END__
=pod
=head1 NAME
mkselfextract - Creates a self-extracting perl script.
=head1 SYNOPSIS
mkselfextract source.pl archive.zip > output.pl
mkselfextract --output=output.pl source.pl archive.zip
=head1 DESCRIPTION
C<mkselfextract> combines a file containing Perl code and a compressed
zip archive into a single file. This file can be run as a Perl
program, which as its first action will extract the data in the zip
file into a temporary directory.
To create such a self-extracting script, you can do something like the
following:
% zip -r9 distrib.zip src/ doc/ lib/ bin/
% mkselfextract setup-script.pl distrib.zip > setup.pl
=head2 Options
C<mkselfextract> supports the following options:
=over 4
=item C<--output>, C<-o>
By default, C<mkselfextract> emits the created script on stdout. The
C<--output> option tells it to write the script to the given file
instead.
=item C<--perlbin>, C<-p>
If you need to specify the location of the C<perl> binary, you can
override the default C</usr/bin/perl> with this option. This value is
used only for the initial C<#!> line in the created script.
=back
=head1 SEE ALSO
L<Archive::SelfExtract>, L<perl>.
=head1 COPYRIGHT
Copyright 2004 Greg Fast (gdf@speakeasy.net)
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut