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" ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access