Wx-Perl-Packager
view release on metacpan or search on metacpan
lib/Wx/Perl/Packager.pm view on Meta::CPAN
e.g. wxpar --gui --icon=myicon.ico -o myprog.exe myscript.pl
At the start of your script ...
#!c:/path/to/perl.exe
use Wx::Perl::Packager;
use Wx;
.....
or if you use threads with your application
#!c:/path/to/perl.exe
use threads;
use threads::shared;
use Wx::Perl::Packager;
use Wx
Wx::Perl::Packager must be loaded before any part of Wx so should appear at the
top of your main script. If you load any part of Wx in a BEGIN block, then you
must load Wx::Perl::Packager before it in your first BEGIN block. This may cause
you problems if you use threads within your Wx application. The threads
documentation advises against loading threads in a BEGIN block - so don't do it.
wxpar will accept a single named argument that allows you to define how the
wxWidgets libraries are named on GTK.
wxpar ordinarily packages the libraries as wxbase28u_somename.so
This will always work if using Wx::Perl::Packager.
However, it maybe that you don't want to use Wx::Perl::Packager, in which case
you need the correct extension.
If you want librararies packaged as wxbase28u_somename.so.0, then pass the first
two arguments to wxpar as
wxpar wxextension .0
If you want wxbase28u_somename.so.0.6.0 , for example
wxpar wxextension .0.6.0
which would mean a full line something like
wxpar wxextension .0.6.0 -o myprog.exe myscript.pl
NOTE: the arguments must be FIRST and will break Wx::Perl::Packager (which should
not be needed in this case).
OF COURSE - the symlinks must actually exist. :-)
=head1 Nasty Internals
As Commented in Wx:Perl::Packager::Linux the packager is configured with several
options. Mix and match if you think there's a better way.
$self->set_so_module_suffix(''); # different linux dists symlink the .so libraries differently
# BAH. the loaders in Wx::Perl::Packager will look for
# modules ending in '.so' - If your modules get packaged
# differently, put the suffix here.
# e.g. if your module when packaged is
# wxlibs_gcc_base.so.0.6.0
# you should $self->set_so_module_suffix('.0.6.0')
$self->set_relocate_pdkcheck(0); # relocate the Wx dlls during PDK Check - never necessary it seems
$self->set_relocate_packaged(1); # relocate the Wx Dlls when running as PerlApp
$self->set_relocate_wx_main(1); # if set_relocate_packaged is true and we find 'wxmain.so'
# as a bound file, we load it as Wx.so ( which it should be
# if user as bound it). This is the current fix for PerlApp
# segmentation fault on exit in Linux. Makes no difference
# in MSWin
$self->set_unlink_relocated(1); # delete the extracted files - ensures relocated are loaded
$self->set_loadmode_pdkcheck('packload'); # standard | nullsub | packload during pdkcheck
# standard uses normal Wx loading
# nullsub - no extensions are loaded
# packload - extensions are loaded by Wx::Perl::Packager
$self->set_loadmode_packaged('packload');# as above, when running as PerlApp
$self->set_loadcore_pdkcheck(1); # use DynaLoader to load wx modules listed by
# get_core_modules method (below)during pdkcheck
$self->set_loadcore_packaged(1); # as above, when running as PerlApp
$self->set_unload_loaded_core(1);# unload any librefs we loaded
# (uses DynaLoader in an END block )
$self->set_unload_loaded_plugins(1); # unload plugins ( html, stc, gl .. etc) that are
# loaded via 'packload'. This seems to be necessary
# to ensure correct unloading order.
# Note - plugins are loaded using
# Wx::_load_plugin (not DynaLoader);
$self->set_pdkcheck_exit(1); # because of the current seg fault on exit in linux
# you can't package using PerlApp
# this setting calls 'exit(0)' after
# Wx has loaded.
# Drastic - but it is the current hack for this failure on linux
=head1 Packaging Test Script
There is a test script at Wx/Perl/Packager/resource/packtest.pl that you can
use to test your packaging method. (i.e. package it and check if it runs);
=head1 Methods
=item Wx::Perl::Packager::runtime()
returns PERLAPP, PARLEXE, or PERL to indicate how the script was executed.
(Under PerlApp, pp packaged PAR, or as a Perl script.
my $env = Wx::Perl::Packager::runtime();
=item Wx::Perl::Packager::packaged()
returns 1 or 0 (for true / false ) to indicate if script is running packaged or as
a Perl script.
my $packaged = Wx::Perl::Packager::packaged();
=item Wx::Perl::Packager::get_wxpath()
returns the path to the directory where wxWidgets library modules are stored.
Only useful when packaging a script.
my $wxpath = Wx::Perl::Packager::get_wxpath();
=item Wx::Perl::Packager::get_wxboundfiles()
returns a list of hashrefs where the key value pairs are:
( run in 0.512 second using v1.01-cache-2.11-cpan-85f18b9d64f )