If you're using ActivePerl it should come bundled with shared objects for Tcl and Tk. The files are Tcl.so and tkkit.so (Tcl.dll and tkkit.dll on Windows). You'll want to configure pp to bundle them with your self-contained executable using the -l
option. For example (on Windows):
-l C:/Perl/lib/auto/Tcl/tkkit.dll
-l C:/Perl/lib/auto/Tcl/Tcl.dll
Unfortunately PAR doesn't unpack shared objects in the right place for Tkx applications to find them. You can get around this by setting $ENV{PERL_TCL_DL_PATH}
before loading Tkx. To make an application that is usable either with or without PAR, use a BEGIN block to detect when it's being run under PAR:
use strict;
use warnings;
use File::Spec::Functions;
BEGIN {
if (exists $ENV{PAR_PROGNAME}) {
use Config ();
$ENV{PERL_TCL_DL_PATH} = catfile(
$ENV{PAR_TEMP},
'tkkit.' . $Config::Config{dlext},
);
}
}
use Tkx;
# remainder of script...
pp
has a -g
(or --gui
) option to build applications without a console window but it only works on Windows. I don't know if there's a way to hid the console on OS X.
As for the application opening in a Tcl/Tk window with a default menu, I don't know. I suspect that's because you're using the ActiveTcl installation instead of the shared objects bundled with ActivePerl.