Interfacing tkSquare.c with Perl/Tk
After creating the Tk-Square-1.0 directory structure depicted in Figure 21-2, copy the hand-edited tkSquare.c to pTk/mTk/generic. Create the MANIFEST file containing these lines:
MANIFEST Makefile.PL Square.pm Square.xs pTk/Makefile.PL pTk/mTk/generic/tkSquare.c t/square_demo.t
Makefile.PL
The topmost
Makefile.PL is a Perl program written in a
specialized MakeMaker language enhanced for generating Perl/Tk
Makefiles. The OBJECT
attribute includes
pTk/tkSquare.o to satisfy the external
Tk_SquareCmd
. For more information, read the
ExtUtils::MakeMaker documentation.
use Tk::MMutil; Tk::MMutil::TkExtMakefile( 'NAME' => 'Tk::Square', 'VERSION_FROM' => 'Square.pm', 'OBJECT' => '$(O_FILES) pTk/tkSquare.o', );
Square.xs
This
extension subroutine, or XSUB, lets Perl call
Tk_SquareCmd
. Of special note are Tk’s
VTABLES (vector tables), which are structs with pointers to functions
as their members. The vector tables provide a modular, operating
system-independent means for dynamically loadable Tk modules
(.so for Unix, .dll for
Win32) to call externals in other loadables. The
.m files define macros that transform apparent
function calls into vector table lookups.
#include <EXTERN.h> /* standard ... */ #include <perl.h> /* ... XSUB ... */ #include <XSUB.h> /* ... headers */ #include "tkGlue.def" /* map Tcl structs to Perl SV * etc. */ #include "pTk/tkPort.h" /* OS dependant definitions */ #include "pTk/tkInt.h" /* Tk widget internals */ #include "pTk/tkVMacro.h" ...
Get Mastering Perl/Tk now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.