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.