This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta: Minor pod fixes
[perl5.git] / pod / perlxstut.pod
CommitLineData
4633a7c4
LW
1=head1 NAME
2
adc5c68a 3perlxstut - Tutorial for writing XSUBs
4633a7c4
LW
4
5=head1 DESCRIPTION
6
7This tutorial will educate the reader on the steps involved in creating
171891c7
GS
8a Perl extension. The reader is assumed to have access to L<perlguts>,
9L<perlapi> and L<perlxs>.
4633a7c4
LW
10
11This tutorial starts with very simple examples and becomes more complex,
c07a80fd 12with each new example adding new features. Certain concepts may not be
360e660c
GS
13completely explained until later in the tutorial in order to slowly ease
14the reader into building extensions.
4633a7c4 15
360e660c
GS
16This tutorial was written from a Unix point of view. Where I know them
17to be otherwise different for other platforms (e.g. Win32), I will list
18them. If you find something that was missed, please let me know.
4633a7c4 19
360e660c 20=head1 SPECIAL NOTES
c07a80fd 21
360e660c 22=head2 make
c07a80fd 23
360e660c
GS
24This tutorial assumes that the make program that Perl is configured to
25use is called C<make>. Instead of running "make" in the examples that
26follow, you may have to substitute whatever make program Perl has been
5a3e7812 27configured to use. Running B<perl -V:make> should tell you what it is.
c07a80fd 28
360e660c 29=head2 Version caveat
c07a80fd 30
beb31b0b
GS
31When writing a Perl extension for general consumption, one should expect that
32the extension will be used with versions of Perl different from the
33version available on your machine. Since you are reading this document,
34the version of Perl on your machine is probably 5.005 or later, but the users
35of your extension may have more ancient versions.
36
37To understand what kinds of incompatibilities one may expect, and in the rare
38case that the version of Perl on your machine is older than this document,
39see the section on "Troubleshooting these Examples" for more information.
40
41If your extension uses some features of Perl which are not available on older
42releases of Perl, your users would appreciate an early meaningful warning.
43You would probably put this information into the F<README> file, but nowadays
44installation of extensions may be performed automatically, guided by F<CPAN.pm>
45module or other tools.
46
47In MakeMaker-based installations, F<Makefile.PL> provides the earliest
48opportunity to perform version checks. One can put something like this
49in F<Makefile.PL> for this purpose:
50
51 eval { require 5.007 }
52 or die <<EOD;
53 ############
54 ### This module uses frobnication framework which is not available before
55 ### version 5.007 of Perl. Upgrade your Perl before installing Kara::Mba.
56 ############
57 EOD
c07a80fd 58
360e660c 59=head2 Dynamic Loading versus Static Loading
c07a80fd 60
61It is commonly thought that if a system does not have the capability to
360e660c
GS
62dynamically load a library, you cannot build XSUBs. This is incorrect.
63You I<can> build them, but you must link the XSUBs subroutines with the
c07a80fd 64rest of Perl, creating a new executable. This situation is similar to
65Perl 4.
66
67This tutorial can still be used on such a system. The XSUB build mechanism
68will check the system and build a dynamically-loadable library if possible,
69or else a static library and then, optionally, a new statically-linked
70executable with that static library linked in.
71
72Should you wish to build a statically-linked executable on a system which
73can dynamically load libraries, you may, in all the following examples,
360e660c
GS
74where the command "C<make>" with no arguments is executed, run the command
75"C<make perl>" instead.
c07a80fd 76
77If you have generated such a statically-linked executable by choice, then
360e660c
GS
78instead of saying "C<make test>", you should say "C<make test_static>".
79On systems that cannot build dynamically-loadable libraries at all, simply
80saying "C<make test>" is sufficient.
81
82=head1 TUTORIAL
83
84Now let's go on with the show!
c07a80fd 85
86=head2 EXAMPLE 1
4633a7c4
LW
87
88Our first extension will be very simple. When we call the routine in the
c07a80fd 89extension, it will print out a well-known message and return.
4633a7c4 90
360e660c
GS
91Run "C<h2xs -A -n Mytest>". This creates a directory named Mytest,
92possibly under ext/ if that directory exists in the current working
21afb104
YST
93directory. Several files will be created under the Mytest dir, including
94MANIFEST, Makefile.PL, lib/Mytest.pm, Mytest.xs, t/Mytest.t, and Changes.
4633a7c4 95
360e660c
GS
96The MANIFEST file contains the names of all the files just created in the
97Mytest directory.
4633a7c4
LW
98
99The file Makefile.PL should look something like this:
100
eb3fb7ac
RB
101 use ExtUtils::MakeMaker;
102 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
103 # the contents of the Makefile that is written.
104 WriteMakefile(
105 NAME => 'Mytest',
106 VERSION_FROM => 'Mytest.pm', # finds $VERSION
107 LIBS => [''], # e.g., '-lm'
108 DEFINE => '', # e.g., '-DHAVE_SOMETHING'
109 INC => '', # e.g., '-I/usr/include/other'
110 );
4633a7c4 111
791fa977 112The file Mytest.pm should start with something like this:
c07a80fd 113
eb3fb7ac 114 package Mytest;
4633a7c4 115
eb3fb7ac
RB
116 use 5.008008;
117 use strict;
118 use warnings;
360e660c 119
eb3fb7ac 120 require Exporter;
c07a80fd 121
eb3fb7ac
RB
122 our @ISA = qw(Exporter);
123 our %EXPORT_TAGS = ( 'all' => [ qw(
c07a80fd 124
eb3fb7ac
RB
125 ) ] );
126
127 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
c07a80fd 128
eb3fb7ac 129 our @EXPORT = qw(
c07a80fd 130
eb3fb7ac 131 );
c07a80fd 132
eb3fb7ac 133 our $VERSION = '0.01';
c07a80fd 134
eb3fb7ac
RB
135 require XSLoader;
136 XSLoader::load('Mytest', $VERSION);
137
138 # Preloaded methods go here.
139
140 1;
141 __END__
142 # Below is the stub of documentation for your module. You better edit it!
4633a7c4 143
360e660c
GS
144The rest of the .pm file contains sample code for providing documentation for
145the extension.
146
147Finally, the Mytest.xs file should look something like this:
4633a7c4 148
eb3fb7ac
RB
149 #include "EXTERN.h"
150 #include "perl.h"
151 #include "XSUB.h"
791fa977 152
eb3fb7ac
RB
153 #include "ppport.h"
154
155 MODULE = Mytest PACKAGE = Mytest
4633a7c4
LW
156
157Let's edit the .xs file by adding this to the end of the file:
158
eb3fb7ac
RB
159 void
160 hello()
161 CODE:
162 printf("Hello, world!\n");
4633a7c4 163
360e660c
GS
164It is okay for the lines starting at the "CODE:" line to not be indented.
165However, for readability purposes, it is suggested that you indent CODE:
166one level and the lines following one more level.
167
168Now we'll run "C<perl Makefile.PL>". This will create a real Makefile,
d9d2a7fb 169which make needs. Its output looks something like:
4633a7c4 170
eb3fb7ac
RB
171 % perl Makefile.PL
172 Checking if your kit is complete...
173 Looks good
174 Writing Makefile for Mytest
175 %
4633a7c4 176
360e660c
GS
177Now, running make will produce output that looks something like this (some
178long lines have been shortened for clarity and some extraneous lines have
179been deleted):
4633a7c4 180
eb3fb7ac
RB
181 % make
182 cp lib/Mytest.pm blib/lib/Mytest.pm
183 perl xsubpp -typemap typemap Mytest.xs > Mytest.xsc && mv Mytest.xsc Mytest.c
184 Please specify prototyping behavior for Mytest.xs (see perlxs manual)
185 cc -c Mytest.c
186 Running Mkbootstrap for Mytest ()
187 chmod 644 Mytest.bs
188 rm -f blib/arch/auto/Mytest/Mytest.so
189 cc -shared -L/usr/local/lib Mytest.o -o blib/arch/auto/Mytest/Mytest.so \
190 \
191
192 chmod 755 blib/arch/auto/Mytest/Mytest.so
193 cp Mytest.bs blib/arch/auto/Mytest/Mytest.bs
194 chmod 644 blib/arch/auto/Mytest/Mytest.bs
195 Manifying blib/man3/Mytest.3pm
196 %
360e660c 197
171891c7 198You can safely ignore the line about "prototyping behavior" - it is
5a7d1118 199explained in L<perlxs/"The PROTOTYPES: Keyword">.
360e660c 200
360e660c
GS
201Perl has its own special way of easily writing test scripts, but for this
202example only, we'll create our own test script. Create a file called hello
c07a80fd 203that looks like this:
204
eb3fb7ac 205 #! /opt/perl5/bin/perl
c47ff5f1 206
eb3fb7ac 207 use ExtUtils::testlib;
c47ff5f1 208
eb3fb7ac 209 use Mytest;
c47ff5f1 210
eb3fb7ac 211 Mytest::hello();
4633a7c4 212
f4987be3 213Now we make the script executable (C<chmod +x hello>), run the script
360e660c 214and we should see the following output:
4633a7c4 215
eb3fb7ac
RB
216 % ./hello
217 Hello, world!
218 %
4633a7c4 219
c07a80fd 220=head2 EXAMPLE 2
4633a7c4 221
360e660c 222Now let's add to our extension a subroutine that will take a single numeric
010f0c4b 223argument as input and return 1 if the number is even or 0 if the number
360e660c 224is odd.
4633a7c4 225
791fa977 226Add the following to the end of Mytest.xs:
4633a7c4 227
eb3fb7ac
RB
228 int
229 is_even(input)
230 int input
231 CODE:
232 RETVAL = (input % 2 == 0);
233 OUTPUT:
234 RETVAL
4633a7c4 235
6b0ac556 236There does not need to be whitespace at the start of the "C<int input>"
360e660c 237line, but it is useful for improving readability. Placing a semi-colon at
6b0ac556 238the end of that line is also optional. Any amount and kind of whitespace
360e660c 239may be placed between the "C<int>" and "C<input>".
4633a7c4 240
360e660c 241Now re-run make to rebuild our new shared library.
4633a7c4 242
c07a80fd 243Now perform the same steps as before, generating a Makefile from the
244Makefile.PL file, and running make.
4633a7c4 245
360e660c 246In order to test that our extension works, we now need to look at the
eb3fb7ac 247file Mytest.t. This file is set up to imitate the same kind of testing
c07a80fd 248structure that Perl itself has. Within the test script, you perform a
249number of tests to confirm the behavior of the extension, printing "ok"
eb3fb7ac
RB
250when the test is correct, "not ok" when it is not.
251
252 use Test::More tests => 4;
253 BEGIN { use_ok('Mytest') };
254
255 #########################
c07a80fd 256
eb3fb7ac
RB
257 # Insert your test code below, the Test::More module is use()ed here so read
258 # its man page ( perldoc Test::More ) for help writing this test script.
259
260 is(&Mytest::is_even(0), 1);
261 is(&Mytest::is_even(1), 0);
262 is(&Mytest::is_even(2), 1);
c07a80fd 263
360e660c 264We will be calling the test script through the command "C<make test>". You
c07a80fd 265should see output that looks something like this:
266
eb3fb7ac
RB
267 %make test
268 PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
269 t/Mytest....ok
270 All tests successful.
271 Files=1, Tests=4, 0 wallclock secs ( 0.03 cusr + 0.00 csys = 0.03 CPU)
272 %
4633a7c4 273
360e660c 274=head2 What has gone on?
4633a7c4
LW
275
276The program h2xs is the starting point for creating extensions. In later
c07a80fd 277examples we'll see how we can use h2xs to read header files and generate
4633a7c4
LW
278templates to connect to C routines.
279
280h2xs creates a number of files in the extension directory. The file
281Makefile.PL is a perl script which will generate a true Makefile to build
282the extension. We'll take a closer look at it later.
283
360e660c
GS
284The .pm and .xs files contain the meat of the extension. The .xs file holds
285the C routines that make up the extension. The .pm file contains routines
286that tell Perl how to load your extension.
287
288Generating the Makefile and running C<make> created a directory called blib
289(which stands for "build library") in the current working directory. This
290directory will contain the shared library that we will build. Once we have
291tested it, we can install it into its final location.
292
293Invoking the test script via "C<make test>" did something very important.
294It invoked perl with all those C<-I> arguments so that it could find the
295various files that are part of the extension. It is I<very> important that
296while you are still testing extensions that you use "C<make test>". If you
297try to run the test script all by itself, you will get a fatal error.
298Another reason it is important to use "C<make test>" to run your test
299script is that if you are testing an upgrade to an already-existing version,
6985a70b 300using "C<make test>" ensures that you will test your new extension, not the
360e660c 301already-existing version.
4633a7c4 302
c07a80fd 303When Perl sees a C<use extension;>, it searches for a file with the same name
360e660c 304as the C<use>'d extension that has a .pm suffix. If that file cannot be found,
c07a80fd 305Perl dies with a fatal error. The default search path is contained in the
360e660c 306C<@INC> array.
4633a7c4 307
791fa977 308In our case, Mytest.pm tells perl that it will need the Exporter and Dynamic
360e660c
GS
309Loader extensions. It then sets the C<@ISA> and C<@EXPORT> arrays and the
310C<$VERSION> scalar; finally it tells perl to bootstrap the module. Perl
311will call its dynamic loader routine (if there is one) and load the shared
312library.
4633a7c4 313
360e660c 314The two arrays C<@ISA> and C<@EXPORT> are very important. The C<@ISA>
c07a80fd 315array contains a list of other packages in which to search for methods (or
360e660c
GS
316subroutines) that do not exist in the current package. This is usually
317only important for object-oriented extensions (which we will talk about
318much later), and so usually doesn't need to be modified.
4633a7c4 319
360e660c
GS
320The C<@EXPORT> array tells Perl which of the extension's variables and
321subroutines should be placed into the calling package's namespace. Because
322you don't know if the user has already used your variable and subroutine
323names, it's vitally important to carefully select what to export. Do I<not>
324export method or variable names I<by default> without a good reason.
4633a7c4 325
c07a80fd 326As a general rule, if the module is trying to be object-oriented then don't
360e660c
GS
327export anything. If it's just a collection of functions and variables, then
328you can export them via another array, called C<@EXPORT_OK>. This array
329does not automatically place its subroutine and variable names into the
330namespace unless the user specifically requests that this be done.
4633a7c4 331
c07a80fd 332See L<perlmod> for more information.
4633a7c4 333
360e660c 334The C<$VERSION> variable is used to ensure that the .pm file and the shared
791fa977 335library are "in sync" with each other. Any time you make changes to
336the .pm or .xs files, you should increment the value of this variable.
337
360e660c 338=head2 Writing good test scripts
791fa977 339
353c6505 340The importance of writing good test scripts cannot be over-emphasized. You
791fa977 341should closely follow the "ok/not ok" style that Perl itself uses, so that
342it is very easy and unambiguous to determine the outcome of each test case.
343When you find and fix a bug, make sure you add a test case for it.
344
eb3fb7ac
RB
345By running "C<make test>", you ensure that your Mytest.t script runs and uses
346the correct version of your extension. If you have many test cases,
347save your test files in the "t" directory and use the suffix ".t".
348When you run "C<make test>", all of these test files will be executed.
4633a7c4 349
c07a80fd 350=head2 EXAMPLE 3
4633a7c4
LW
351
352Our third extension will take one argument as its input, round off that
c07a80fd 353value, and set the I<argument> to the rounded value.
4633a7c4 354
791fa977 355Add the following to the end of Mytest.xs:
4633a7c4
LW
356
357 void
358 round(arg)
359 double arg
360e660c 360 CODE:
4633a7c4
LW
361 if (arg > 0.0) {
362 arg = floor(arg + 0.5);
363 } else if (arg < 0.0) {
364 arg = ceil(arg - 0.5);
365 } else {
366 arg = 0.0;
367 }
360e660c 368 OUTPUT:
4633a7c4
LW
369 arg
370
c07a80fd 371Edit the Makefile.PL file so that the corresponding line looks like this:
4633a7c4
LW
372
373 'LIBS' => ['-lm'], # e.g., '-lm'
374
eb3fb7ac
RB
375Generate the Makefile and run make. Change the test number in Mytest.t to
376"9" and add the following tests:
4633a7c4 377
eb3fb7ac
RB
378 $i = -1.5; &Mytest::round($i); is( $i, -2.0 );
379 $i = -1.1; &Mytest::round($i); is( $i, -1.0 );
380 $i = 0.0; &Mytest::round($i); is( $i, 0.0 );
381 $i = 0.5; &Mytest::round($i); is( $i, 1.0 );
382 $i = 1.2; &Mytest::round($i); is( $i, 1.0 );
c07a80fd 383
360e660c 384Running "C<make test>" should now print out that all nine tests are okay.
4633a7c4 385
360e660c
GS
386Notice that in these new test cases, the argument passed to round was a
387scalar variable. You might be wondering if you can round a constant or
eb3fb7ac 388literal. To see what happens, temporarily add the following line to Mytest.t:
4633a7c4 389
791fa977 390 &Mytest::round(3);
4633a7c4 391
360e660c
GS
392Run "C<make test>" and notice that Perl dies with a fatal error. Perl won't
393let you change the value of constants!
4633a7c4 394
360e660c 395=head2 What's new here?
4633a7c4 396
360e660c 397=over 4
4633a7c4 398
360e660c 399=item *
4633a7c4 400
360e660c
GS
401We've made some changes to Makefile.PL. In this case, we've specified an
402extra library to be linked into the extension's shared library, the math
403library libm in this case. We'll talk later about how to write XSUBs that
404can call every routine in a library.
4633a7c4 405
360e660c
GS
406=item *
407
408The value of the function is not being passed back as the function's return
409value, but by changing the value of the variable that was passed into the
410function. You might have guessed that when you saw that the return value
411of round is of type "void".
412
413=back
414
415=head2 Input and Output Parameters
4633a7c4 416
360e660c
GS
417You specify the parameters that will be passed into the XSUB on the line(s)
418after you declare the function's return value and name. Each input parameter
6b0ac556 419line starts with optional whitespace, and may have an optional terminating
360e660c 420semicolon.
4633a7c4 421
360e660c 422The list of output parameters occurs at the very end of the function, just
5a7d1118 423after the OUTPUT: directive. The use of RETVAL tells Perl that you
360e660c
GS
424wish to send this value back as the return value of the XSUB function. In
425Example 3, we wanted the "return value" placed in the original variable
426which we passed in, so we listed it (and not RETVAL) in the OUTPUT: section.
4633a7c4 427
360e660c
GS
428=head2 The XSUBPP Program
429
beb31b0b 430The B<xsubpp> program takes the XS code in the .xs file and translates it into
4633a7c4
LW
431C code, placing it in a file whose suffix is .c. The C code created makes
432heavy use of the C functions within Perl.
433
360e660c 434=head2 The TYPEMAP file
4633a7c4 435
beb31b0b 436The B<xsubpp> program uses rules to convert from Perl's data types (scalar,
360e660c 437array, etc.) to C's data types (int, char, etc.). These rules are stored
4633a7c4
LW
438in the typemap file ($PERLLIB/ExtUtils/typemap). This file is split into
439three parts.
440
360e660c
GS
441The first section maps various C data types to a name, which corresponds
442somewhat with the various Perl types. The second section contains C code
beb31b0b
GS
443which B<xsubpp> uses to handle input parameters. The third section contains
444C code which B<xsubpp> uses to handle output parameters.
4633a7c4 445
360e660c
GS
446Let's take a look at a portion of the .c file created for our extension.
447The file name is Mytest.c:
4633a7c4 448
791fa977 449 XS(XS_Mytest_round)
4633a7c4
LW
450 {
451 dXSARGS;
c07a80fd 452 if (items != 1)
eb3fb7ac
RB
453 Perl_croak(aTHX_ "Usage: Mytest::round(arg)");
454 PERL_UNUSED_VAR(cv); /* -W */
4633a7c4 455 {
c07a80fd 456 double arg = (double)SvNV(ST(0)); /* XXXXX */
4633a7c4
LW
457 if (arg > 0.0) {
458 arg = floor(arg + 0.5);
459 } else if (arg < 0.0) {
460 arg = ceil(arg - 0.5);
c07a80fd 461 } else {
462 arg = 0.0;
4633a7c4 463 }
360e660c 464 sv_setnv(ST(0), (double)arg); /* XXXXX */
eb3fb7ac 465 SvSETMAGIC(ST(0));
4633a7c4 466 }
eb3fb7ac 467 XSRETURN_EMPTY;
4633a7c4 468 }
4633a7c4 469
360e660c
GS
470Notice the two lines commented with "XXXXX". If you check the first section
471of the typemap file, you'll see that doubles are of type T_DOUBLE. In the
4633a7c4
LW
472INPUT section, an argument that is T_DOUBLE is assigned to the variable
473arg by calling the routine SvNV on something, then casting it to double,
474then assigned to the variable arg. Similarly, in the OUTPUT section,
ef50df4b
GS
475once arg has its final value, it is passed to the sv_setnv function to
476be passed back to the calling subroutine. These two functions are explained
477in L<perlguts>; we'll talk more later about what that "ST(0)" means in the
478section on the argument stack.
4633a7c4 479
360e660c 480=head2 Warning about Output Arguments
4633a7c4 481
c07a80fd 482In general, it's not a good idea to write extensions that modify their input
360e660c
GS
483parameters, as in Example 3. Instead, you should probably return multiple
484values in an array and let the caller handle them (we'll do this in a later
a2293a43 485example). However, in order to better accommodate calling pre-existing C
360e660c
GS
486routines, which often do modify their input parameters, this behavior is
487tolerated.
791fa977 488
489=head2 EXAMPLE 4
490
68dc0745 491In this example, we'll now begin to write XSUBs that will interact with
360e660c 492pre-defined C libraries. To begin with, we will build a small library of
791fa977 493our own, then let h2xs write our .pm and .xs files for us.
494
495Create a new directory called Mytest2 at the same level as the directory
496Mytest. In the Mytest2 directory, create another directory called mylib,
497and cd into that directory.
498
499Here we'll create some files that will generate a test library. These will
500include a C source file and a header file. We'll also create a Makefile.PL
501in this directory. Then we'll make sure that running make at the Mytest2
502level will automatically run this Makefile.PL file and the resulting Makefile.
503
9693b09d 504In the mylib directory, create a file mylib.h that looks like this:
791fa977 505
506 #define TESTVAL 4
507
508 extern double foo(int, long, const char*);
509
510Also create a file mylib.c that looks like this:
511
512 #include <stdlib.h>
513 #include "./mylib.h"
c47ff5f1 514
791fa977 515 double
360e660c 516 foo(int a, long b, const char *c)
791fa977 517 {
518 return (a + b + atof(c) + TESTVAL);
519 }
520
521And finally create a file Makefile.PL that looks like this:
522
523 use ExtUtils::MakeMaker;
524 $Verbose = 1;
525 WriteMakefile(
360e660c
GS
526 NAME => 'Mytest2::mylib',
527 SKIP => [qw(all static static_lib dynamic dynamic_lib)],
49733319 528 clean => {'FILES' => 'libmylib$(LIB_EXT)'},
791fa977 529 );
530
531
8227f81c 532 sub MY::top_targets {
791fa977 533 '
534 all :: static
535
360e660c
GS
536 pure_all :: static
537
791fa977 538 static :: libmylib$(LIB_EXT)
539
540 libmylib$(LIB_EXT): $(O_FILES)
541 $(AR) cr libmylib$(LIB_EXT) $(O_FILES)
542 $(RANLIB) libmylib$(LIB_EXT)
543
544 ';
545 }
546
360e660c
GS
547Make sure you use a tab and not spaces on the lines beginning with "$(AR)"
548and "$(RANLIB)". Make will not function properly if you use spaces.
549It has also been reported that the "cr" argument to $(AR) is unnecessary
550on Win32 systems.
551
791fa977 552We will now create the main top-level Mytest2 files. Change to the directory
553above Mytest2 and run the following command:
554
d9d2a7fb 555 % h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h
791fa977 556
557This will print out a warning about overwriting Mytest2, but that's okay.
558Our files are stored in Mytest2/mylib, and will be untouched.
559
560The normal Makefile.PL that h2xs generates doesn't know about the mylib
561directory. We need to tell it that there is a subdirectory and that we
360e660c
GS
562will be generating a library in it. Let's add the argument MYEXTLIB to
563the WriteMakefile call so that it looks like this:
4633a7c4 564
360e660c
GS
565 WriteMakefile(
566 'NAME' => 'Mytest2',
567 'VERSION_FROM' => 'Mytest2.pm', # finds $VERSION
568 'LIBS' => [''], # e.g., '-lm'
569 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING'
570 'INC' => '', # e.g., '-I/usr/include/other'
571 'MYEXTLIB' => 'mylib/libmylib$(LIB_EXT)',
572 );
791fa977 573
360e660c
GS
574and then at the end add a subroutine (which will override the pre-existing
575subroutine). Remember to use a tab character to indent the line beginning
576with "cd"!
791fa977 577
578 sub MY::postamble {
579 '
580 $(MYEXTLIB): mylib/Makefile
360e660c 581 cd mylib && $(MAKE) $(PASSTHRU)
791fa977 582 ';
583 }
584
791fa977 585Let's also fix the MANIFEST file so that it accurately reflects the contents
586of our extension. The single line that says "mylib" should be replaced by
587the following three lines:
588
589 mylib/Makefile.PL
590 mylib/mylib.c
591 mylib/mylib.h
592
593To keep our namespace nice and unpolluted, edit the .pm file and change
77ca0c92 594the variable C<@EXPORT> to C<@EXPORT_OK>. Finally, in the
d9d2a7fb 595.xs file, edit the #include line to read:
791fa977 596
597 #include "mylib/mylib.h"
598
599And also add the following function definition to the end of the .xs file:
600
601 double
602 foo(a,b,c)
603 int a
604 long b
605 const char * c
360e660c 606 OUTPUT:
791fa977 607 RETVAL
608
609Now we also need to create a typemap file because the default Perl doesn't
360e660c
GS
610currently support the const char * type. Create a file called typemap in
611the Mytest2 directory and place the following in it:
791fa977 612
613 const char * T_PV
614
615Now run perl on the top-level Makefile.PL. Notice that it also created a
360e660c 616Makefile in the mylib directory. Run make and watch that it does cd into
791fa977 617the mylib directory and run make in there as well.
618
eb3fb7ac 619Now edit the Mytest2.t script and change the number of tests to "4",
791fa977 620and add the following lines to the end of the script:
621
eb3fb7ac
RB
622 is( &Mytest2::foo(1, 2, "Hello, world!"), 7 );
623 is( &Mytest2::foo(1, 2, "0.0"), 7 );
624 ok( abs(&Mytest2::foo(0, 0, "-3.4") - 0.6) <= 0.01 );
791fa977 625
360e660c
GS
626(When dealing with floating-point comparisons, it is best to not check for
627equality, but rather that the difference between the expected and actual
628result is below a certain amount (called epsilon) which is 0.01 in this case)
791fa977 629
eb3fb7ac
RB
630Run "C<make test>" and all should be well. There are some warnings on missing tests
631for the Mytest2::mylib extension, but you can ignore them.
791fa977 632
360e660c 633=head2 What has happened here?
791fa977 634
635Unlike previous examples, we've now run h2xs on a real include file. This
636has caused some extra goodies to appear in both the .pm and .xs files.
637
84dc3c4d 638=over 4
639
791fa977 640=item *
641
360e660c
GS
642In the .xs file, there's now a #include directive with the absolute path to
643the mylib.h header file. We changed this to a relative path so that we
644could move the extension directory if we wanted to.
791fa977 645
646=item *
647
648There's now some new C code that's been added to the .xs file. The purpose
649of the C<constant> routine is to make the values that are #define'd in the
360e660c
GS
650header file accessible by the Perl script (by calling either C<TESTVAL> or
651C<&Mytest2::TESTVAL>). There's also some XS code to allow calls to the
791fa977 652C<constant> routine.
653
654=item *
655
360e660c
GS
656The .pm file originally exported the name C<TESTVAL> in the C<@EXPORT> array.
657This could lead to name clashes. A good rule of thumb is that if the #define
658is only going to be used by the C routines themselves, and not by the user,
659they should be removed from the C<@EXPORT> array. Alternately, if you don't
660mind using the "fully qualified name" of a variable, you could move most
661or all of the items from the C<@EXPORT> array into the C<@EXPORT_OK> array.
791fa977 662
d9d2a7fb 663=item *
664
360e660c
GS
665If our include file had contained #include directives, these would not have
666been processed by h2xs. There is no good solution to this right now.
d9d2a7fb 667
360e660c 668=item *
791fa977 669
670We've also told Perl about the library that we built in the mylib
360e660c 671subdirectory. That required only the addition of the C<MYEXTLIB> variable
791fa977 672to the WriteMakefile call and the replacement of the postamble subroutine
673to cd into the subdirectory and run make. The Makefile.PL for the
674library is a bit more complicated, but not excessively so. Again we
675replaced the postamble subroutine to insert our own code. This code
360e660c
GS
676simply specified that the library to be created here was a static archive
677library (as opposed to a dynamically loadable library) and provided the
791fa977 678commands to build it.
4633a7c4 679
360e660c
GS
680=back
681
beb31b0b
GS
682=head2 Anatomy of .xs file
683
684The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand
685the meaning of these elements, pay attention to the line which reads
686
eb3fb7ac 687 MODULE = Mytest2 PACKAGE = Mytest2
beb31b0b
GS
688
689Anything before this line is plain C code which describes which headers
690to include, and defines some convenience functions. No translations are
7817ba4d
NC
691performed on this part, apart from having embedded POD documentation
692skipped over (see L<perlpod>) it goes into the generated output C file as is.
beb31b0b
GS
693
694Anything after this line is the description of XSUB functions.
695These descriptions are translated by B<xsubpp> into C code which
696implements these functions using Perl calling conventions, and which
697makes these functions visible from Perl interpreter.
698
699Pay a special attention to the function C<constant>. This name appears
700twice in the generated .xs file: once in the first part, as a static C
f4987be3 701function, then another time in the second part, when an XSUB interface to
beb31b0b
GS
702this static C function is defined.
703
704This is quite typical for .xs files: usually the .xs file provides
705an interface to an existing C function. Then this C function is defined
706somewhere (either in an external library, or in the first part of .xs file),
707and a Perl interface to this function (i.e. "Perl glue") is described in the
708second part of .xs file. The situation in L<"EXAMPLE 1">, L<"EXAMPLE 2">,
709and L<"EXAMPLE 3">, when all the work is done inside the "Perl glue", is
710somewhat of an exception rather than the rule.
711
712=head2 Getting the fat out of XSUBs
713
714In L<"EXAMPLE 4"> the second part of .xs file contained the following
715description of an XSUB:
716
717 double
718 foo(a,b,c)
719 int a
720 long b
721 const char * c
722 OUTPUT:
723 RETVAL
724
725Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">,
726this description does not contain the actual I<code> for what is done
313ce23f 727during a call to Perl function foo(). To understand what is going
beb31b0b
GS
728on here, one can add a CODE section to this XSUB:
729
730 double
731 foo(a,b,c)
732 int a
733 long b
734 const char * c
735 CODE:
736 RETVAL = foo(a,b,c);
737 OUTPUT:
738 RETVAL
739
740However, these two XSUBs provide almost identical generated C code: B<xsubpp>
741compiler is smart enough to figure out the C<CODE:> section from the first
742two lines of the description of XSUB. What about C<OUTPUT:> section? In
743fact, that is absolutely the same! The C<OUTPUT:> section can be removed
744as well, I<as far as C<CODE:> section or C<PPCODE:> section> is not
745specified: B<xsubpp> can see that it needs to generate a function call
746section, and will autogenerate the OUTPUT section too. Thus one can
747shortcut the XSUB to become:
748
749 double
750 foo(a,b,c)
751 int a
752 long b
753 const char * c
754
755Can we do the same with an XSUB
756
757 int
758 is_even(input)
759 int input
760 CODE:
761 RETVAL = (input % 2 == 0);
762 OUTPUT:
763 RETVAL
764
765of L<"EXAMPLE 2">? To do this, one needs to define a C function C<int
766is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place
767for this definition is in the first part of .xs file. In fact a C function
768
769 int
770 is_even(int arg)
771 {
772 return (arg % 2 == 0);
773 }
774
775is probably overkill for this. Something as simple as a C<#define> will
776do too:
777
778 #define is_even(arg) ((arg) % 2 == 0)
779
780After having this in the first part of .xs file, the "Perl glue" part becomes
781as simple as
782
783 int
784 is_even(input)
785 int input
786
787This technique of separation of the glue part from the workhorse part has
788obvious tradeoffs: if you want to change a Perl interface, you need to
789change two places in your code. However, it removes a lot of clutter,
790and makes the workhorse part independent from idiosyncrasies of Perl calling
791convention. (In fact, there is nothing Perl-specific in the above description,
792a different version of B<xsubpp> might have translated this to TCL glue or
793Python glue as well.)
794
795=head2 More about XSUB arguments
4633a7c4 796
791fa977 797With the completion of Example 4, we now have an easy way to simulate some
c07a80fd 798real-life libraries whose interfaces may not be the cleanest in the world.
799We shall now continue with a discussion of the arguments passed to the
beb31b0b 800B<xsubpp> compiler.
4633a7c4 801
360e660c
GS
802When you specify arguments to routines in the .xs file, you are really
803passing three pieces of information for each argument listed. The first
804piece is the order of that argument relative to the others (first, second,
805etc). The second is the type of argument, and consists of the type
806declaration of the argument (e.g., int, char*, etc). The third piece is
8dcb5783 807the calling convention for the argument in the call to the library function.
beb31b0b
GS
808
809While Perl passes arguments to functions by reference,
810C passes arguments by value; to implement a C function which modifies data
811of one of the "arguments", the actual argument of this C function would be
812a pointer to the data. Thus two C functions with declarations
813
814 int string_length(char *s);
815 int upper_case_char(char *cp);
816
817may have completely different semantics: the first one may inspect an array
818of chars pointed by s, and the second one may immediately dereference C<cp>
819and manipulate C<*cp> only (using the return value as, say, a success
820indicator). From Perl one would use these functions in
821a completely different manner.
822
823One conveys this info to B<xsubpp> by replacing C<*> before the
824argument by C<&>. C<&> means that the argument should be passed to a library
825function by its address. The above two function may be XSUB-ified as
826
827 int
828 string_length(s)
829 char * s
830
831 int
832 upper_case_char(cp)
833 char &cp
4633a7c4 834
beb31b0b 835For example, consider:
4633a7c4 836
4633a7c4 837 int
c07a80fd 838 foo(a,b)
839 char &a
840 char * b
4633a7c4 841
beb31b0b 842The first Perl argument to this function would be treated as a char and assigned
c07a80fd 843to the variable a, and its address would be passed into the function foo.
beb31b0b 844The second Perl argument would be treated as a string pointer and assigned to the
c07a80fd 845variable b. The I<value> of b would be passed into the function foo. The
beb31b0b 846actual call to the function foo that B<xsubpp> generates would look like this:
4633a7c4 847
c07a80fd 848 foo(&a, b);
4633a7c4 849
beb31b0b 850B<xsubpp> will parse the following function argument lists identically:
791fa977 851
852 char &a
853 char&a
854 char & a
855
856However, to help ease understanding, it is suggested that you place a "&"
857next to the variable name and away from the variable type), and place a
858"*" near the variable type, but away from the variable name (as in the
360e660c 859call to foo above). By doing so, it is easy to understand exactly what
ac036724 860will be passed to the C function; it will be whatever is in the "last
360e660c 861column".
4633a7c4 862
c07a80fd 863You should take great pains to try to pass the function the type of variable
864it wants, when possible. It will save you a lot of trouble in the long run.
4633a7c4 865
360e660c 866=head2 The Argument Stack
4633a7c4 867
c07a80fd 868If we look at any of the C code generated by any of the examples except
869example 1, you will notice a number of references to ST(n), where n is
360e660c
GS
870usually 0. "ST" is actually a macro that points to the n'th argument
871on the argument stack. ST(0) is thus the first argument on the stack and
872therefore the first argument passed to the XSUB, ST(1) is the second
873argument, and so on.
4633a7c4 874
beb31b0b 875When you list the arguments to the XSUB in the .xs file, that tells B<xsubpp>
c07a80fd 876which argument corresponds to which of the argument stack (i.e., the first
877one listed is the first argument, and so on). You invite disaster if you
878do not list them in the same order as the function expects them.
4633a7c4 879
360e660c
GS
880The actual values on the argument stack are pointers to the values passed
881in. When an argument is listed as being an OUTPUT value, its corresponding
882value on the stack (i.e., ST(0) if it was the first argument) is changed.
883You can verify this by looking at the C code generated for Example 3.
884The code for the round() XSUB routine contains lines that look like this:
885
886 double arg = (double)SvNV(ST(0));
887 /* Round the contents of the variable arg */
888 sv_setnv(ST(0), (double)arg);
889
890The arg variable is initially set by taking the value from ST(0), then is
891stored back into ST(0) at the end of the routine.
892
beb31b0b
GS
893XSUBs are also allowed to return lists, not just scalars. This must be
894done by manipulating stack values ST(0), ST(1), etc, in a subtly
895different way. See L<perlxs> for details.
896
897XSUBs are also allowed to avoid automatic conversion of Perl function arguments
898to C function arguments. See L<perlxs> for details. Some people prefer
899manual conversion by inspecting C<ST(i)> even in the cases when automatic
900conversion will do, arguing that this makes the logic of an XSUB call clearer.
901Compare with L<"Getting the fat out of XSUBs"> for a similar tradeoff of
902a complete separation of "Perl glue" and "workhorse" parts of an XSUB.
903
904While experts may argue about these idioms, a novice to Perl guts may
905prefer a way which is as little Perl-guts-specific as possible, meaning
906automatic conversion and automatic call generation, as in
907L<"Getting the fat out of XSUBs">. This approach has the additional
908benefit of protecting the XSUB writer from future changes to the Perl API.
909
360e660c 910=head2 Extending your Extension
4633a7c4 911
c07a80fd 912Sometimes you might want to provide some extra methods or subroutines
913to assist in making the interface between Perl and your extension simpler
914or easier to understand. These routines should live in the .pm file.
915Whether they are automatically loaded when the extension itself is loaded
360e660c 916or only loaded when called depends on where in the .pm file the subroutine
4a4eefd0 917definition is placed. You can also consult L<AutoLoader> for an alternate
360e660c 918way to store and load your extra subroutines.
4633a7c4 919
360e660c 920=head2 Documenting your Extension
4633a7c4 921
c07a80fd 922There is absolutely no excuse for not documenting your extension.
923Documentation belongs in the .pm file. This file will be fed to pod2man,
3958b146
JH
924and the embedded documentation will be converted to the manpage format,
925then placed in the blib directory. It will be copied to Perl's
926manpage directory when the extension is installed.
4633a7c4 927
c07a80fd 928You may intersperse documentation and Perl code within the .pm file.
929In fact, if you want to use method autoloading, you must do this,
930as the comment inside the .pm file explains.
4633a7c4 931
c07a80fd 932See L<perlpod> for more information about the pod format.
4633a7c4 933
360e660c 934=head2 Installing your Extension
4633a7c4 935
c07a80fd 936Once your extension is complete and passes all its tests, installing it
8dcb5783 937is quite simple: you simply run "make install". You will either need
c07a80fd 938to have write permission into the directories where Perl is installed,
939or ask your system administrator to run the make for you.
4633a7c4 940
360e660c
GS
941Alternately, you can specify the exact directory to place the extension's
942files by placing a "PREFIX=/destination/directory" after the make install.
943(or in between the make and install if you have a brain-dead version of make).
944This can be very useful if you are building an extension that will eventually
945be distributed to multiple systems. You can then just archive the files in
946the destination directory and distribute them to your destination systems.
947
948=head2 EXAMPLE 5
949
950In this example, we'll do some more work with the argument stack. The
951previous examples have all returned only a single value. We'll now
952create an extension that returns an array.
953
954This extension is very Unix-oriented (struct statfs and the statfs system
955call). If you are not running on a Unix system, you can substitute for
956statfs any other function that returns multiple values, you can hard-code
957values to be returned to the caller (although this will be a bit harder
958to test the error case), or you can simply not do this example. If you
959change the XSUB, be sure to fix the test cases to match the changes.
960
961Return to the Mytest directory and add the following code to the end of
962Mytest.xs:
963
964 void
965 statfs(path)
966 char * path
beb31b0b 967 INIT:
360e660c
GS
968 int i;
969 struct statfs buf;
970
971 PPCODE:
972 i = statfs(path, &buf);
973 if (i == 0) {
974 XPUSHs(sv_2mortal(newSVnv(buf.f_bavail)));
975 XPUSHs(sv_2mortal(newSVnv(buf.f_bfree)));
976 XPUSHs(sv_2mortal(newSVnv(buf.f_blocks)));
977 XPUSHs(sv_2mortal(newSVnv(buf.f_bsize)));
978 XPUSHs(sv_2mortal(newSVnv(buf.f_ffree)));
979 XPUSHs(sv_2mortal(newSVnv(buf.f_files)));
980 XPUSHs(sv_2mortal(newSVnv(buf.f_type)));
360e660c
GS
981 } else {
982 XPUSHs(sv_2mortal(newSVnv(errno)));
983 }
984
985You'll also need to add the following code to the top of the .xs file, just
986after the include of "XSUB.h":
987
988 #include <sys/vfs.h>
989
eb3fb7ac
RB
990Also add the following code segment to Mytest.t while incrementing the "9"
991tests to "11":
360e660c
GS
992
993 @a = &Mytest::statfs("/blech");
eb3fb7ac 994 ok( scalar(@a) == 1 && $a[0] == 2 );
360e660c 995 @a = &Mytest::statfs("/");
eb3fb7ac 996 is( scalar(@a), 7 );
360e660c
GS
997
998=head2 New Things in this Example
999
1000This example added quite a few new concepts. We'll take them one at a time.
1001
1002=over 4
1003
1004=item *
1005
beb31b0b
GS
1006The INIT: directive contains code that will be placed immediately after
1007the argument stack is decoded. C does not allow variable declarations at
1008arbitrary locations inside a function,
360e660c 1009so this is usually the best way to declare local variables needed by the XSUB.
beb31b0b
GS
1010(Alternatively, one could put the whole C<PPCODE:> section into braces, and
1011put these declarations on top.)
360e660c
GS
1012
1013=item *
1014
1015This routine also returns a different number of arguments depending on the
1016success or failure of the call to statfs. If there is an error, the error
1017number is returned as a single-element array. If the call is successful,
256771e2
HQ
1018then a 7-element array is returned. Since only one argument is passed into
1019this function, we need room on the stack to hold the 7 values which may be
360e660c
GS
1020returned.
1021
1022We do this by using the PPCODE: directive, rather than the CODE: directive.
beb31b0b 1023This tells B<xsubpp> that we will be managing the return values that will be
360e660c
GS
1024put on the argument stack by ourselves.
1025
1026=item *
1027
1028When we want to place values to be returned to the caller onto the stack,
1029we use the series of macros that begin with "XPUSH". There are five
1030different versions, for placing integers, unsigned integers, doubles,
1031strings, and Perl scalars on the stack. In our example, we placed a
beb31b0b
GS
1032Perl scalar onto the stack. (In fact this is the only macro which
1033can be used to return multiple values.)
360e660c
GS
1034
1035The XPUSH* macros will automatically extend the return stack to prevent
1036it from being overrun. You push values onto the stack in the order you
1037want them seen by the calling program.
1038
1039=item *
1040
1041The values pushed onto the return stack of the XSUB are actually mortal SV's.
1042They are made mortal so that once the values are copied by the calling
1043program, the SV's that held the returned values can be deallocated.
1044If they were not mortal, then they would continue to exist after the XSUB
1045routine returned, but would not be accessible. This is a memory leak.
1046
beb31b0b
GS
1047=item *
1048
1049If we were interested in performance, not in code compactness, in the success
1050branch we would not use C<XPUSHs> macros, but C<PUSHs> macros, and would
1051pre-extend the stack before pushing the return values:
1052
eb3fb7ac 1053 EXTEND(SP, 7);
beb31b0b
GS
1054
1055The tradeoff is that one needs to calculate the number of return values
1056in advance (though overextending the stack will not typically hurt
1057anything but memory consumption).
1058
1059Similarly, in the failure branch we could use C<PUSHs> I<without> extending
1060the stack: the Perl function reference comes to an XSUB on the stack, thus
1061the stack is I<always> large enough to take one return value.
1062
360e660c
GS
1063=back
1064
171891c7 1065=head2 EXAMPLE 6
360e660c 1066
171891c7
GS
1067In this example, we will accept a reference to an array as an input
1068parameter, and return a reference to an array of hashes. This will
1069demonstrate manipulation of complex Perl data types from an XSUB.
1070
1071This extension is somewhat contrived. It is based on the code in
1072the previous example. It calls the statfs function multiple times,
1073accepting a reference to an array of filenames as input, and returning
1074a reference to an array of hashes containing the data for each of the
1075filesystems.
1076
1077Return to the Mytest directory and add the following code to the end of
1078Mytest.xs:
1079
eb3fb7ac
RB
1080 SV *
1081 multi_statfs(paths)
1082 SV * paths
1083 INIT:
1084 AV * results;
1085 I32 numpaths = 0;
1086 int i, n;
1087 struct statfs buf;
1088
1089 if ((!SvROK(paths))
1090 || (SvTYPE(SvRV(paths)) != SVt_PVAV)
1091 || ((numpaths = av_len((AV *)SvRV(paths))) < 0))
1092 {
1093 XSRETURN_UNDEF;
1094 }
1095 results = (AV *)sv_2mortal((SV *)newAV());
1096 CODE:
1097 for (n = 0; n <= numpaths; n++) {
1098 HV * rh;
1099 STRLEN l;
1100 char * fn = SvPV(*av_fetch((AV *)SvRV(paths), n, 0), l);
1101
1102 i = statfs(fn, &buf);
1103 if (i != 0) {
1104 av_push(results, newSVnv(errno));
1105 continue;
1106 }
171891c7 1107
eb3fb7ac
RB
1108 rh = (HV *)sv_2mortal((SV *)newHV());
1109
1110 hv_store(rh, "f_bavail", 8, newSVnv(buf.f_bavail), 0);
1111 hv_store(rh, "f_bfree", 7, newSVnv(buf.f_bfree), 0);
1112 hv_store(rh, "f_blocks", 8, newSVnv(buf.f_blocks), 0);
1113 hv_store(rh, "f_bsize", 7, newSVnv(buf.f_bsize), 0);
1114 hv_store(rh, "f_ffree", 7, newSVnv(buf.f_ffree), 0);
1115 hv_store(rh, "f_files", 7, newSVnv(buf.f_files), 0);
1116 hv_store(rh, "f_type", 6, newSVnv(buf.f_type), 0);
1117
1118 av_push(results, newRV((SV *)rh));
1119 }
1120 RETVAL = newRV((SV *)results);
1121 OUTPUT:
1122 RETVAL
1123
1124And add the following code to Mytest.t, while incrementing the "11"
1125tests to "13":
171891c7
GS
1126
1127 $results = Mytest::multi_statfs([ '/', '/blech' ]);
256771e2 1128 ok( ref $results->[0] );
eb3fb7ac 1129 ok( ! ref $results->[1] );
171891c7
GS
1130
1131=head2 New Things in this Example
1132
1133There are a number of new concepts introduced here, described below:
1134
1135=over 4
1136
1137=item *
1138
1139This function does not use a typemap. Instead, we declare it as accepting
1140one SV* (scalar) parameter, and returning an SV* value, and we take care of
1141populating these scalars within the code. Because we are only returning
1142one value, we don't need a C<PPCODE:> directive - instead, we use C<CODE:>
1143and C<OUTPUT:> directives.
1144
1145=item *
1146
1147When dealing with references, it is important to handle them with caution.
1148The C<INIT:> block first checks that
1149C<SvROK> returns true, which indicates that paths is a valid reference. It
1150then verifies that the object referenced by paths is an array, using C<SvRV>
1151to dereference paths, and C<SvTYPE> to discover its type. As an added test,
1152it checks that the array referenced by paths is non-empty, using the C<av_len>
1153function (which returns -1 if the array is empty). The XSRETURN_UNDEF macro
1154is used to abort the XSUB and return the undefined value whenever all three of
1155these conditions are not met.
1156
1157=item *
1158
1159We manipulate several arrays in this XSUB. Note that an array is represented
1160internally by an AV* pointer. The functions and macros for manipulating
1161arrays are similar to the functions in Perl: C<av_len> returns the highest
1162index in an AV*, much like $#array; C<av_fetch> fetches a single scalar value
1163from an array, given its index; C<av_push> pushes a scalar value onto the
1164end of the array, automatically extending the array as necessary.
1165
1166Specifically, we read pathnames one at a time from the input array, and
1167store the results in an output array (results) in the same order. If
1168statfs fails, the element pushed onto the return array is the value of
1169errno after the failure. If statfs succeeds, though, the value pushed
1170onto the return array is a reference to a hash containing some of the
1171information in the statfs structure.
1172
1173As with the return stack, it would be possible (and a small performance win)
1174to pre-extend the return array before pushing data into it, since we know
1175how many elements we will return:
1176
1177 av_extend(results, numpaths);
1178
1179=item *
1180
1181We are performing only one hash operation in this function, which is storing
1182a new scalar under a key using C<hv_store>. A hash is represented by an HV*
1183pointer. Like arrays, the functions for manipulating hashes from an XSUB
1184mirror the functionality available from Perl. See L<perlguts> and L<perlapi>
1185for details.
1186
1187=item *
1188
1189To create a reference, we use the C<newRV> function. Note that you can
1190cast an AV* or an HV* to type SV* in this case (and many others). This
1191allows you to take references to arrays, hashes and scalars with the same
1192function. Conversely, the C<SvRV> function always returns an SV*, which may
da75cd15 1193need to be cast to the appropriate type if it is something other than a
171891c7
GS
1194scalar (check with C<SvTYPE>).
1195
1196=item *
1197
1198At this point, xsubpp is doing very little work - the differences between
1199Mytest.xs and Mytest.c are minimal.
1200
1201=back
360e660c
GS
1202
1203=head2 EXAMPLE 7 (Coming Soon)
1204
1205XPUSH args AND set RETVAL AND assign return value to array
1206
1207=head2 EXAMPLE 8 (Coming Soon)
1208
1209Setting $!
1210
8dcb5783
NIS
1211=head2 EXAMPLE 9 Passing open files to XSes
1212
1213You would think passing files to an XS is difficult, with all the
1214typeglobs and stuff. Well, it isn't.
1215
1216Suppose that for some strange reason we need a wrapper around the
1217standard C library function C<fputs()>. This is all we need:
1218
1219 #define PERLIO_NOT_STDIO 0
1220 #include "EXTERN.h"
1221 #include "perl.h"
1222 #include "XSUB.h"
1223
1224 #include <stdio.h>
1225
1226 int
1227 fputs(s, stream)
1228 char * s
1229 FILE * stream
1230
1231The real work is done in the standard typemap.
1232
1233B<But> you loose all the fine stuff done by the perlio layers. This
1234calls the stdio function C<fputs()>, which knows nothing about them.
1235
e8a52a58
LC
1236The standard typemap offers three variants of PerlIO *:
1237C<InputStream> (T_IN), C<InOutStream> (T_INOUT) and C<OutputStream>
1238(T_OUT). A bare C<PerlIO *> is considered a T_INOUT. If it matters
1239in your code (see below for why it might) #define or typedef
1240one of the specific names and use that as the argument or result
1241type in your XS file.
1242
1243The standard typemap does not contain PerlIO * before perl 5.7,
1244but it has the three stream variants. Using a PerlIO * directly
1245is not backwards compatible unless you provide your own typemap.
22569500
NIS
1246
1247For streams coming I<from> perl the main difference is that
1248C<OutputStream> will get the output PerlIO * - which may make
e8a52a58 1249a difference on a socket. Like in our example...
22569500
NIS
1250
1251For streams being handed I<to> perl a new file handle is created
1252(i.e. a reference to a new glob) and associated with the PerlIO *
1253provided. If the read/write state of the PerlIO * is not correct then you
1254may get errors or warnings from when the file handle is used.
1255So if you opened the PerlIO * as "w" it should really be an
1256C<OutputStream> if open as "r" it should be an C<InputStream>.
1257
8dcb5783
NIS
1258Now, suppose you want to use perlio layers in your XS. We'll use the
1259perlio C<PerlIO_puts()> function as an example.
1260
22569500
NIS
1261In the C part of the XS file (above the first MODULE line) you
1262have
1263
1264 #define OutputStream PerlIO *
1265 or
1266 typedef PerlIO * OutputStream;
8dcb5783 1267
8dcb5783
NIS
1268
1269And this is the XS code:
1270
1271 int
1272 perlioputs(s, stream)
1273 char * s
22569500 1274 OutputStream stream
8dcb5783
NIS
1275 CODE:
1276 RETVAL = PerlIO_puts(stream, s);
1277 OUTPUT:
1278 RETVAL
1279
1280We have to use a C<CODE> section because C<PerlIO_puts()> has the arguments
1281reversed compared to C<fputs()>, and we want to keep the arguments the same.
1282
1283Wanting to explore this thoroughly, we want to use the stdio C<fputs()>
e8a52a58
LC
1284on a PerlIO *. This means we have to ask the perlio system for a stdio
1285C<FILE *>:
8dcb5783
NIS
1286
1287 int
1288 perliofputs(s, stream)
1289 char * s
e8a52a58 1290 OutputStream stream
8dcb5783
NIS
1291 PREINIT:
1292 FILE *fp = PerlIO_findFILE(stream);
1293 CODE:
1294 if (fp != (FILE*) 0) {
1295 RETVAL = fputs(s, fp);
1296 } else {
1297 RETVAL = -1;
1298 }
1299 OUTPUT:
1300 RETVAL
1301
1302Note: C<PerlIO_findFILE()> will search the layers for a stdio
1303layer. If it can't find one, it will call C<PerlIO_exportFILE()> to
1304generate a new stdio C<FILE>. Please only call C<PerlIO_exportFILE()> if
1305you want a I<new> C<FILE>. It will generate one on each call and push a
1306new stdio layer. So don't call it repeatedly on the same
256771e2 1307file. C<PerlIO_findFILE()> will retrieve the stdio layer once it has been
8dcb5783
NIS
1308generated by C<PerlIO_exportFILE()>.
1309
1310This applies to the perlio system only. For versions before 5.7,
1311C<PerlIO_exportFILE()> is equivalent to C<PerlIO_findFILE()>.
1312
360e660c
GS
1313=head2 Troubleshooting these Examples
1314
1315As mentioned at the top of this document, if you are having problems with
1316these example extensions, you might see if any of these help you.
1317
1318=over 4
1319
1320=item *
1321
1322In versions of 5.002 prior to the gamma version, the test script in Example
13231 will not function properly. You need to change the "use lib" line to
1324read:
1325
1326 use lib './blib';
1327
1328=item *
1329
1330In versions of 5.002 prior to version 5.002b1h, the test.pl file was not
1331automatically created by h2xs. This means that you cannot say "make test"
1332to run the test script. You will need to add the following line before the
1333"use extension" statement:
1334
1335 use lib './blib';
1336
1337=item *
1338
1339In versions 5.000 and 5.001, instead of using the above line, you will need
1340to use the following line:
1341
1342 BEGIN { unshift(@INC, "./blib") }
1343
1344=item *
1345
8dcb5783 1346This document assumes that the executable named "perl" is Perl version 5.
360e660c
GS
1347Some systems may have installed Perl version 5 as "perl5".
1348
1349=back
1350
1351=head1 See also
4633a7c4 1352
171891c7 1353For more information, consult L<perlguts>, L<perlapi>, L<perlxs>, L<perlmod>,
c07a80fd 1354and L<perlpod>.
4633a7c4 1355
360e660c 1356=head1 Author
4633a7c4 1357
9607fc9c 1358Jeff Okamoto <F<okamoto@corp.hp.com>>
4633a7c4 1359
c07a80fd 1360Reviewed and assisted by Dean Roehrich, Ilya Zakharevich, Andreas Koenig,
1361and Tim Bunce.
4633a7c4 1362
22569500
NIS
1363PerlIO material contributed by Lupe Christoph, with some clarification
1364by Nick Ing-Simmons.
8dcb5783 1365
eb3fb7ac
RB
1366Changes for h2xs as of Perl 5.8.x by Renee Baecker
1367
c07a80fd 1368=head2 Last Changed
4633a7c4 1369
eb3fb7ac 13702007/10/11