4 use File::Basename qw(&basename &dirname);
7 # List explicitly here the variables you want Configure to
8 # generate. Metaconfig only looks for shell variables, so you
9 # have to mention them as if they were shell variables, not
10 # %Config entries. Thus you write
12 # to ensure Configure will look for $Config{startperl}.
14 # This forces PL files to create target in same directory as PL file.
15 # This is so that make depend always knows where to find PL derivatives.
18 my $file = basename($0, '.PL');
19 $file .= '.com' if $^O eq 'VMS';
21 open OUT,">$file" or die "Can't create $file: $!";
23 print "Extracting $file (with variable substitutions)\n";
25 # In this section, perl variables will be expanded during extraction.
26 # You can use $Config{...} to use Configure variables.
28 print OUT <<"!GROK!THIS!";
30 eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
31 if \$running_under_some_shell;
34 # In the following, perl variables are not expanded during extraction.
36 print OUT <<'!NO!SUBS!';
42 h2xs - convert .h C header files to Perl extensions
46 B<h2xs> [B<OPTIONS> ...] [headerfile ... [extra_libraries]]
48 B<h2xs> B<-h>|B<-?>|B<--help>
52 I<h2xs> builds a Perl extension from C header files. The extension
53 will include functions which can be used to retrieve the value of any
54 #define statement which was in the C header files.
56 The I<module_name> will be used for the name of the extension. If
57 module_name is not supplied then the name of the first header file
58 will be used, with the first character capitalized.
60 If the extension might need extra libraries, they should be included
61 here. The extension Makefile.PL will take care of checking whether
62 the libraries actually exist and how they should be loaded. The extra
63 libraries should be specified in the form -lm -lposix, etc, just as on
64 the cc command line. By default, the Makefile.PL will search through
65 the library path determined by Configure. That path can be augmented
66 by including arguments of the form B<-L/another/library/path> in the
67 extra-libraries argument.
73 =item B<-A>, B<--omit-autoload>
75 Omit all autoload facilities. This is the same as B<-c> but also
76 removes the S<C<use AutoLoader>> statement from the .pm file.
78 =item B<-C>, B<--omit-changes>
80 Omits creation of the F<Changes> file, and adds a HISTORY section to
83 =item B<-F>, B<--cpp-flags>=I<addflags>
85 Additional flags to specify to C preprocessor when scanning header for
86 function declarations. Should not be used without B<-x>.
88 =item B<-M>, B<--func-mask>=I<regular expression>
90 selects functions/macros to process.
92 =item B<-O>, B<--overwrite-ok>
94 Allows a pre-existing extension directory to be overwritten.
96 =item B<-P>, B<--omit-pod>
98 Omit the autogenerated stub POD section.
100 =item B<-X>, B<--omit-XS>
102 Omit the XS portion. Used to generate templates for a module which is not
103 XS-based. C<-c> and C<-f> are implicitly enabled.
105 =item B<-a>, B<--gen-accessors>
107 Generate an accessor method for each element of structs and unions. The
108 generated methods are named after the element name; will return the current
109 value of the element if called without additional arguments; and will set
110 the element to the supplied value (and return the new value) if called with
111 an additional argument. Embedded structures and unions are returned as a
112 pointer rather than the complete structure, to facilitate chained calls.
114 These methods all apply to the Ptr type for the structure; additionally
115 two methods are constructed for the structure type itself, C<_to_ptr>
116 which returns a Ptr type pointing to the same structure, and a C<new>
117 method to construct and return a new structure, initialised to zeroes.
119 =item B<-b>, B<--compat-version>=I<version>
121 Generates a .pm file which is backwards compatible with the specified
124 For versions < 5.6.0, the changes are.
125 - no use of 'our' (uses 'use vars' instead)
128 Specifying a compatibility version higher than the version of perl you
129 are using to run h2xs will have no effect. If unspecified h2xs will default
130 to compatibility with the version of perl you are using to run h2xs.
132 =item B<-c>, B<--omit-constant>
134 Omit C<constant()> from the .xs file and corresponding specialised
135 C<AUTOLOAD> from the .pm file.
137 =item B<-d>, B<--debugging>
139 Turn on debugging messages.
141 =item B<-f>, B<--force>
143 Allows an extension to be created for a header even if that header is
144 not found in standard include directories.
146 =item B<-g>, B<--global>
148 Include code for safely storing static data in the .xs file.
149 Extensions that do no make use of static data can ignore this option.
151 =item B<-h>, B<-?>, B<--help>
153 Print the usage, help and version for this h2xs and exit.
155 =item B<-k>, B<--omit-const-func>
157 For function arguments declared as C<const>, omit the const attribute in the
160 =item B<-m>, B<--gen-tied-var>
162 B<Experimental>: for each variable declared in the header file(s), declare
163 a perl variable of the same name magically tied to the C variable.
165 =item B<-n>, B<--name>=I<module_name>
167 Specifies a name to be used for the extension, e.g., S<-n RPC::DCE>
169 =item B<-o>, B<--opaque-re>=I<regular expression>
171 Use "opaque" data type for the C types matched by the regular
172 expression, even if these types are C<typedef>-equivalent to types
173 from typemaps. Should not be used without B<-x>.
175 This may be useful since, say, types which are C<typedef>-equivalent
176 to integers may represent OS-related handles, and one may want to work
177 with these handles in OO-way, as in C<$handle-E<gt>do_something()>.
178 Use C<-o .> if you want to handle all the C<typedef>ed types as opaque
181 The type-to-match is whitewashed (except for commas, which have no
182 whitespace before them, and multiple C<*> which have no whitespace
185 =item B<-p>, B<--remove-prefix>=I<prefix>
187 Specify a prefix which should be removed from the Perl function names,
188 e.g., S<-p sec_rgy_> This sets up the XS B<PREFIX> keyword and removes
189 the prefix from functions that are autoloaded via the C<constant()>
192 =item B<-s>, B<--const-subs>=I<sub1,sub2>
194 Create a perl subroutine for the specified macros rather than autoload
195 with the constant() subroutine. These macros are assumed to have a
196 return type of B<char *>, e.g.,
197 S<-s sec_rgy_wildcard_name,sec_rgy_wildcard_sid>.
199 =item B<-t>, B<--default-type>=I<type>
201 Specify the internal type that the constant() mechanism uses for macros.
202 The default is IV (signed integer). Currently all macros found during the
203 header scanning process will be assumed to have this type. Future versions
204 of C<h2xs> may gain the ability to make educated guesses.
206 =item B<--use-new-tests>
208 When B<--compat-version> (B<-b>) is present the generated tests will use
209 C<Test::More> rather then C<Test> which is the default for versions before
210 5.7.2 . C<Test::More> will be added to PREREQ_PM in the generated
213 =item B<--use-old-tests>
215 Will force the generation of test code that uses the older C<Test> module.
217 =item B<-v>, B<--version>=I<version>
219 Specify a version number for this extension. This version number is added
220 to the templates. The default is 0.01.
222 =item B<-x>, B<--autogen-xsubs>
224 Automatically generate XSUBs basing on function declarations in the
225 header file. The package C<C::Scan> should be installed. If this
226 option is specified, the name of the header file may look like
227 C<NAME1,NAME2>. In this case NAME1 is used instead of the specified
228 string, but XSUBs are emitted only for the declarations included from
231 Note that some types of arguments/return-values for functions may
232 result in XSUB-declarations/typemap-entries which need
233 hand-editing. Such may be objects which cannot be converted from/to a
234 pointer (like C<long long>), pointers to functions, or arrays. See
235 also the section on L<LIMITATIONS of B<-x>>.
242 # Default behavior, extension is Rusers
245 # Same, but extension is RUSERS
246 h2xs -n RUSERS rpcsvc/rusers
248 # Extension is rpcsvc::rusers. Still finds <rpcsvc/rusers.h>
251 # Extension is ONC::RPC. Still finds <rpcsvc/rusers.h>
252 h2xs -n ONC::RPC rpcsvc/rusers
254 # Without constant() or AUTOLOAD
255 h2xs -c rpcsvc/rusers
257 # Creates templates for an extension named RPC
260 # Extension is ONC::RPC.
263 # Makefile.PL will look for library -lrpc in
264 # additional directory /opt/net/lib
265 h2xs rpcsvc/rusers -L/opt/net/lib -lrpc
267 # Extension is DCE::rgynbase
268 # prefix "sec_rgy_" is dropped from perl function names
269 h2xs -n DCE::rgynbase -p sec_rgy_ dce/rgynbase
271 # Extension is DCE::rgynbase
272 # prefix "sec_rgy_" is dropped from perl function names
273 # subroutines are created for sec_rgy_wildcard_name and sec_rgy_wildcard_sid
274 h2xs -n DCE::rgynbase -p sec_rgy_ \
275 -s sec_rgy_wildcard_name,sec_rgy_wildcard_sid dce/rgynbase
277 # Make XS without defines in perl.h, but with function declarations
278 # visible from perl.h. Name of the extension is perl1.
279 # When scanning perl.h, define -DEXT=extern -DdEXT= -DINIT(x)=
280 # Extra backslashes below because the string is passed to shell.
281 # Note that a directory with perl header files would
282 # be added automatically to include path.
283 h2xs -xAn perl1 -F "-DEXT=extern -DdEXT= -DINIT\(x\)=" perl.h
285 # Same with function declaration in proto.h as visible from perl.h.
286 h2xs -xAn perl2 perl.h,proto.h
288 # Same but select only functions which match /^av_/
289 h2xs -M '^av_' -xAn perl2 perl.h,proto.h
291 # Same but treat SV* etc as "opaque" types
292 h2xs -o '^[S]V \*$' -M '^av_' -xAn perl2 perl.h,proto.h
294 =head2 Extension based on F<.h> and F<.c> files
296 Suppose that you have some C files implementing some functionality,
297 and the corresponding header files. How to create an extension which
298 makes this functionality accessable in Perl? The example below
299 assumes that the header files are F<interface_simple.h> and
300 I<interface_hairy.h>, and you want the perl module be named as
301 C<Ext::Ension>. If you need some preprocessor directives and/or
302 linking with external libraries, see the flags C<-F>, C<-L> and C<-l>
307 =item Find the directory name
309 Start with a dummy run of h2xs:
311 h2xs -Afn Ext::Ension
313 The only purpose of this step is to create the needed directories, and
314 let you know the names of these directories. From the output you can
315 see that the directory for the extension is F<Ext/Ension>.
319 Copy your header files and C files to this directory F<Ext/Ension>.
321 =item Create the extension
323 Run h2xs, overwriting older autogenerated files:
325 h2xs -Oxan Ext::Ension interface_simple.h interface_hairy.h
327 h2xs looks for header files I<after> changing to the extension
328 directory, so it will find your header files OK.
330 =item Archive and test
342 It is important to do C<make dist> as early as possible. This way you
343 can easily merge(1) your changes to autogenerated files if you decide
344 to edit your C<.h> files and rerun h2xs.
346 Do not forget to edit the documentation in the generated F<.pm> file.
348 Consider the autogenerated files as skeletons only, you may invent
349 better interfaces than what h2xs could guess.
351 Consider this section as a guideline only, some other options of h2xs
352 may better suit your needs.
358 No environment variables are used.
362 Larry Wall and others
366 L<perl>, L<perlxstut>, L<ExtUtils::MakeMaker>, and L<AutoLoader>.
370 The usual warnings if it cannot read or write the files involved.
372 =head1 LIMITATIONS of B<-x>
374 F<h2xs> would not distinguish whether an argument to a C function
375 which is of the form, say, C<int *>, is an input, output, or
376 input/output parameter. In particular, argument declarations of the
383 should be better rewritten as
389 if C<n> is an input parameter.
391 Additionally, F<h2xs> has no facilities to intuit that a function
398 takes a pair of address and length of data at this address, so it is better
399 to rewrite this function as
409 RETVAL = foo(s, len);
419 char *s = SvPV(sv,len);
424 MODULE = foo PACKAGE = foo PREFIX = my_
430 See L<perlxs> and L<perlxstut> for additional details.
438 my( $H2XS_VERSION ) = ' $Revision: 1.21 $ ' =~ /\$Revision:\s+([^\s]+)/;
439 my $TEMPLATE_VERSION = '0.01';
441 my $compat_version = $];
446 $Text::Wrap::huge = 'overflow';
447 $Text::Wrap::columns = 80;
448 use ExtUtils::Constant qw (WriteConstants WriteMakefileSnippet autoload);
455 h2xs [OPTIONS ... ] [headerfile [extra_libraries]]
456 version: $H2XS_VERSION
458 -A, --omit-autoload Omit all autoloading facilities (implies -c).
459 -C, --omit-changes Omit creating the Changes file, add HISTORY heading
461 -F, --cpp-flags Additional flags for C preprocessor (used with -x).
462 -M, --func-mask Mask to select C functions/macros
463 (default is select all).
464 -O, --overwrite-ok Allow overwriting of a pre-existing extension directory.
465 -P, --omit-pod Omit the stub POD section.
466 -X, --omit-XS Omit the XS portion (implies both -c and -f).
467 -a, --gen-accessors Generate get/set accessors for struct and union members (used with -x).
468 -b, --compat-version Specify a perl version to be backwards compatibile with
469 -c, --omit-constant Omit the constant() function and specialised AUTOLOAD
471 -d, --debugging Turn on debugging messages.
472 -f, --force Force creation of the extension even if the C header
474 -g, --global Include code for safely storing static data in the .xs file.
475 -h, -?, --help Display this help message
476 -k, --omit-const-func Omit 'const' attribute on function arguments
478 -m, --gen-tied-var Generate tied variables for access to declared
480 -n, --name Specify a name to use for the extension (recommended).
481 -o, --opaque-re Regular expression for \"opaque\" types.
482 -p, --remove-prefix Specify a prefix which should be removed from the
484 -s, --const-subs Create subroutines for specified macros.
485 -t, --default-type Default type for autoloaded constants (default is IV)
486 --use-new-tests Use Test::More in backward compatible modules
487 --use-old-tests Use the module Test rather than Test::More
488 -v, --version Specify a version number for this extension.
489 -x, --autogen-xsubs Autogenerate XSUBs using C::Scan.
492 are any libraries that might be needed for loading the
493 extension, e.g. -lm would try to link in the math library.
524 Getopt::Long::Configure('bundling');
527 'omit-autoload|A' => \$opt_A,
528 'omit-changes|C' => \$opt_C,
529 'cpp-flags|F=s' => \$opt_F,
530 'func-mask|M=s' => \$opt_M,
531 'overwrite_ok|O' => \$opt_O,
532 'omit-pod|P' => \$opt_P,
533 'omit-XS|X' => \$opt_X,
534 'gen-accessors|a' => \$opt_a,
535 'compat-version|b=s' => \$opt_b,
536 'omit-constant|c' => \$opt_c,
537 'debugging|d' => \$opt_d,
538 'force|f' => \$opt_f,
539 'global|g' => \$opt_g,
540 'help|h|?' => \$opt_h,
541 'omit-const-func|k' => \$opt_k,
542 'gen-tied-var|m' => \$opt_m,
543 'name|n=s' => \$opt_n,
544 'opaque-re|o=s' => \$opt_o,
545 'remove-prefix|p=s' => \$opt_p,
546 'const-subs|s=s' => \$opt_s,
547 'default-type|t=s' => \$opt_t,
548 'version|v=s' => \$opt_v,
549 'autogen-xsubs|x' => \$opt_x,
550 'use-new-tests' => \$new_test,
551 'use-old-tests' => \$old_test
554 GetOptions(%options) || usage;
559 usage "You cannot use -b and -m at the same time.\n" if ($opt_b && $opt_m);
560 $opt_b =~ /^\d+\.\d+\.\d+/ ||
561 usage "You must provide the backwards compatibility version in X.Y.Z form. "
563 my ($maj,$min,$sub) = split(/\./,$opt_b,3);
564 if ($maj < 5 || ($maj == 5 && $min < 6)) {
565 $compat_version = sprintf("%d.%03d%02d",$maj,$min,$sub);
567 $compat_version = sprintf("%d.%03d%03d",$maj,$min,$sub);
570 my ($maj,$min,$sub) = $compat_version =~ /(\d+)\.(\d\d\d)(\d\d\d?)/;
571 warn sprintf <<'EOF', $maj,$min,$sub;
572 Defaulting to backwards compatibility with perl %d.%d.%d
573 If you intend this module to be compatible with earlier perl versions, please
574 specify a minimum perl version with the -b option.
580 $TEMPLATE_VERSION = $opt_v;
584 $opt_c = 1 if $opt_A;
586 # -X implies -c and -f
587 $opt_c = $opt_f = 1 if $opt_X;
591 my %const_xsub = map { $_,1 } split(/,+/, $opt_s) if $opt_s;
597 while (my $arg = shift) {
598 if ($arg =~ /^-l/i) {
599 $extralibs = "$arg @ARGV";
605 usage "Must supply header file or module name\n"
606 unless (@path_h or $opt_n);
611 $fmask = qr{$opt_M} if defined $opt_M;
612 $tmask = qr{$opt_o} if defined $opt_o;
613 my $tmask_all = $tmask && $opt_o eq '.';
616 eval {require C::Scan; 1}
618 C::Scan required if you use -x option.
619 To install C::Scan, execute
620 perl -MCPAN -e "install C::Scan"
622 unless ($tmask_all) {
623 $C::Scan::VERSION >= 0.70
625 C::Scan v. 0.70 or later required unless you use -o . option.
626 You have version $C::Scan::VERSION installed as $INC{'C/Scan.pm'}.
627 To install C::Scan, execute
628 perl -MCPAN -e "install C::Scan"
631 if (($opt_m || $opt_a) && $C::Scan::VERSION < 0.73) {
633 C::Scan v. 0.73 or later required to use -m or -a options.
634 You have version $C::Scan::VERSION installed as $INC{'C/Scan.pm'}.
635 To install C::Scan, execute
636 perl -MCPAN -e "install C::Scan"
640 elsif ($opt_o or $opt_F) {
642 Options -o and -F do not make sense without -x.
646 my @path_h_ini = @path_h;
647 my ($name, %fullpath, %prefix, %seen_define, %prefixless, %const_names);
655 my $pre_sub_tri_graphs = 1;
656 if ($^O eq 'VMS') { # Consider overrides of default location
657 # XXXX This is not equivalent to what the older version did:
658 # it was looking at $hadsys header-file per header-file...
659 my($hadsys) = grep s!^sys/!!i , @path_h;
660 @paths = qw( Sys$Library VAXC$Include );
661 push @paths, ($hadsys ? 'GNU_CC_Include[vms]' : 'GNU_CC_Include[000000]');
662 push @paths, qw( DECC$Library_Include DECC$System_Include );
665 @paths = (File::Spec->curdir(), $Config{usrinc},
666 (split ' ', $Config{locincpth}), '/usr/include');
668 foreach my $path_h (@path_h) {
672 if ( $name !~ /::/ ) {
679 if( $path_h =~ s#::#/#g && $opt_n ){
680 warn "Nesting of headerfile ignored with -n\n";
682 $path_h .= ".h" unless $path_h =~ /\.h$/;
683 my $fullpath = $path_h;
684 $path_h =~ s/,.*$// if $opt_x;
685 $fullpath{$path_h} = $fullpath;
687 # Minor trickery: we can't chdir() before we processed the headers
688 # (so know the name of the extension), but the header may be in the
689 # extension directory...
690 my $tmp_path_h = $path_h;
691 my $rel_path_h = $path_h;
693 if (not -f $path_h) {
695 for my $dir (@paths) {
697 if -f ($path_h = File::Spec->catfile($dir, $tmp_path_h));
700 $rel_path_h = $path_h;
701 $fullpath{$path_h} = $fullpath;
703 (my $epath = $module) =~ s,::,/,g;
704 $epath = File::Spec->catdir('ext', $epath) if -d 'ext';
705 $rel_path_h = File::Spec->catfile($epath, $tmp_path_h);
706 $path_h = $tmp_path_h; # Used during -x
712 die "Can't find $tmp_path_h in @dirs\n"
713 if ( ! $opt_f && ! -f "$rel_path_h" );
714 # Scan the header file (we should deal with nested header files)
715 # Record the names of simple #define constants into const_names
716 # Function prototypes are processed below.
717 open(CH, "<$rel_path_h") || die "Can't open $rel_path_h: $!\n";
720 if ($pre_sub_tri_graphs) {
721 # Preprocess all tri-graphs
722 # including things stuck in quoted string constants.
723 s/\?\?=/#/g; # | ??=| #|
724 s/\?\?\!/|/g; # | ??!| ||
725 s/\?\?'/^/g; # | ??'| ^|
726 s/\?\?\(/[/g; # | ??(| [|
727 s/\?\?\)/]/g; # | ??)| ]|
728 s/\?\?\-/~/g; # | ??-| ~|
729 s/\?\?\//\\/g; # | ??/| \|
730 s/\?\?</{/g; # | ??<| {|
731 s/\?\?>/}/g; # | ??>| }|
733 if (/^[ \t]*#[ \t]*define\s+([\$\w]+)\b(?!\()\s*(?=[^"\s])(.*)/) {
736 $rest =~ s!/\*.*?(\*/|\n)|//.*!!g; # Remove comments
739 # Cannot do: (-1) and ((LHANDLE)3) are OK:
740 #print("Skip non-wordy $def => $rest\n"),
741 # next defines if $rest =~ /[^\w\$]/;
743 print("Skip stringy $def => $rest\n") if $opt_d;
746 print "Matched $_ ($def)\n" if $opt_d;
747 $seen_define{$def} = $rest;
749 next if /^_.*_h_*$/i; # special case, but for what?
750 if (defined $opt_p) {
751 if (!/^$opt_p(\d)/) {
752 ++$prefix{$_} if s/^$opt_p//;
755 warn "can't remove $opt_p prefix from '$_'!\n";
758 $prefixless{$def} = $_;
759 if (!$fmask or /$fmask/) {
760 print "... Passes mask of -M.\n" if $opt_d and $fmask;
770 # Save current directory so that C::Scan can use it
771 my $cwd = File::Spec->rel2abs( File::Spec->curdir );
773 my ($ext, $nested, @modparts, $modfname, $modpname, $constsfname);
775 $ext = chdir 'ext' ? 'ext/' : '';
777 if( $module =~ /::/ ){
779 @modparts = split(/::/,$module);
780 $modfname = $modparts[-1];
781 $modpname = join('/',@modparts);
786 $modfname = $modpname = $module;
788 # Don't trip up if someone calls their module 'constants'
789 $constsfname = $modfname eq 'constants' ? 'constdefs' : 'constants';
793 warn "Overwriting existing $ext$modpname!!!\n" if -e $modpname;
796 die "Won't overwrite existing $ext$modpname\n" if -e $modpname;
801 -d "$modpath$_" || mkdir("$modpath$_", 0777);
805 -d "$modpname" || mkdir($modpname, 0777);
806 chdir($modpname) || die "Can't chdir $ext$modpname: $!\n";
811 my $fdecls_parsed = [];
818 my @fnames_no_prefix;
822 if( ! $opt_X ){ # use XS, unless it was disabled
823 warn "Writing $ext$modpname/ppport.h\n";
824 Devel::PPPort::WriteFile('ppport.h')
825 || die "Can't create $ext$modpname/ppport.h: $!\n";
827 open(XS, ">$modfname.xs") || die "Can't create $ext$modpname/$modfname.xs: $!\n";
829 require Config; # Run-time directive
830 warn "Scanning typemaps...\n";
834 my $addflags = $opt_F || '';
836 foreach my $filename (@path_h) {
840 if ($fullpath{$filename} =~ /,/) {
844 warn "Scanning $filename for functions...\n";
845 my @styles = $Config{gccversion} ? qw(C++ C9X GNU) : qw(C++ C9X);
846 $c = new C::Scan 'filename' => $filename, 'filename_filter' => $filter,
847 'add_cppflags' => $addflags, 'c_styles' => \@styles;
848 $c->set('includeDirs' => ["$Config::Config{archlib}/CORE", $cwd]);
850 push @$fdecls_parsed, @{ $c->get('parsed_fdecls') };
851 push(@$fdecls, @{$c->get('fdecls')});
853 push @td, @{$c->get('typedefs_maybe')};
855 my $structs = $c->get('typedef_structs');
856 @structs{keys %$structs} = values %$structs;
860 %vdecl_hash = %{ $c->get('vdecl_hash') };
861 @vdecls = sort keys %vdecl_hash;
862 for (local $_ = 0; $_ < @vdecls; ++$_) {
863 my $var = $vdecls[$_];
864 my($type, $post) = @{ $vdecl_hash{$var} };
866 warn "Can't handle variable '$type $var $post', skipping.\n";
867 splice @vdecls, $_, 1;
870 $type = normalize_type($type);
871 $vdecl_hash{$var} = $type;
875 unless ($tmask_all) {
876 warn "Scanning $filename for typedefs...\n";
877 my $td = $c->get('typedef_hash');
878 # eval {require 'dumpvar.pl'; ::dumpValue($td)} or warn $@ if $opt_d;
879 my @f_good_td = grep $td->{$_}[1] eq '', keys %$td;
880 push @good_td, @f_good_td;
881 @typedefs_pre{@f_good_td} = map $_->[0], @$td{@f_good_td};
885 $typedef_rex = qr(\b(?<!struct )(?:@good_td)\b) if @good_td;
887 %known_fnames = map @$_[1,3], @$fdecls_parsed; # [1,3] is NAME, FULLTEXT
890 for my $i (0..$#$fdecls_parsed) {
891 next unless $fdecls_parsed->[$i][1] =~ /$fmask/; # [1] is NAME
893 print "... Function $fdecls_parsed->[$i][1] passes -M mask.\n"
896 $fdecls = [@$fdecls[@good]];
897 $fdecls_parsed = [@$fdecls_parsed[@good]];
899 @fnames = sort map $_->[1], @$fdecls_parsed; # 1 is NAME
902 my %h = map( ($_->[1], $_), @$fdecls_parsed);
903 $fdecls_parsed = [ @h{@fnames} ];
905 @fnames_no_prefix = @fnames;
907 = sort map { ++$prefix{$_} if s/^$opt_p(?!\d)//; $_ } @fnames_no_prefix
909 # Remove macros which expand to typedefs
910 print "Typedefs are @td.\n" if $opt_d;
911 my %td = map {($_, $_)} @td;
912 # Add some other possible but meaningless values for macros
913 for my $k (qw(char double float int long short unsigned signed void)) {
914 $td{"$_$k"} = "$_$k" for ('', 'signed ', 'unsigned ');
916 # eval {require 'dumpvar.pl'; ::dumpValue( [\@td, \%td] ); 1} or warn $@;
919 while (keys %td > $n) {
922 while (($k, $v) = each %seen_define) {
923 # print("found '$k'=>'$v'\n"),
924 $bad_macs{$k} = $td{$k} = $td{$v} if exists $td{$v};
927 # Now %bad_macs contains names of bad macros
928 for my $k (keys %bad_macs) {
929 delete $const_names{$prefixless{$k}};
930 print "Ignoring macro $k which expands to a typedef name '$bad_macs{$k}'\n" if $opt_d;
934 my @const_names = sort keys %const_names;
936 open(PM, ">$modfname.pm") || die "Can't create $ext$modpname/$modfname.pm: $!\n";
939 warn "Writing $ext$modpname/$modfname.pm\n";
947 print PM "use warnings;\n" unless $compat_version < 5.006;
949 unless( $opt_X || $opt_c || $opt_A ){
950 # we'll have an AUTOLOAD(), and it will have $AUTOLOAD and
962 print PM <<"END" if ! $opt_X; # use DynaLoader, unless XS was disabled
967 # Are we using AutoLoader or not?
968 unless ($opt_A) { # no autoloader whatsoever.
969 unless ($opt_c) { # we're doing the AUTOLOAD
970 print PM "use AutoLoader;\n";
973 print PM "use AutoLoader qw(AUTOLOAD);\n"
977 if ( $compat_version < 5.006 ) {
978 if ( $opt_X || $opt_c || $opt_A ) {
979 print PM 'use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);';
981 print PM 'use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);';
986 my $myISA = 'our @ISA = qw(Exporter'; # We seem to always want this.
987 $myISA .= ' DynaLoader' unless $opt_X; # no XS
989 $myISA =~ s/^our // if $compat_version < 5.006;
991 print PM "\n$myISA\n\n";
993 my @exported_names = (@const_names, @fnames_no_prefix, map '$'.$_, @vdecls);
996 # Items to export into callers namespace by default. Note: do not export
997 # names by default without a very good reason. Use EXPORT_OK instead.
998 # Do not simply export all your public functions/methods/constants.
1000 # This allows declaration use $module ':all';
1001 # If you do not need this, moving things directly into \@EXPORT or \@EXPORT_OK
1003 our %EXPORT_TAGS = ( 'all' => [ qw(
1007 our \@EXPORT_OK = ( \@{ \$EXPORT_TAGS{'all'} } );
1012 our \$VERSION = '$TEMPLATE_VERSION';
1016 $tmp =~ s/^our //mg if $compat_version < 5.006;
1020 printf PM "our(@{[ join ', ', map '$'.$_, @vdecls ]});\n\n";
1024 print PM autoload ($module, $compat_version) unless $opt_c or $opt_X;
1026 if( ! $opt_X ){ # print bootstrap, unless XS is disabled
1028 bootstrap $module \$VERSION;
1032 # tying the variables can happen only after bootstrap
1036 @{[ join "\n", map " _tievar_$_(\$$_);", @vdecls ]}
1043 if( $opt_P ){ # if POD is disabled
1052 # Preloaded methods go here.
1055 print PM <<"END" unless $opt_A;
1057 # Autoload methods go after $after, and are processed by the autosplit program.
1066 my ($email,$author);
1070 ($username,$author) = (getpwuid($>))[0,6];
1071 if (defined $username && defined $author) {
1072 $author =~ s/,.*$//; # in case of sub fields
1073 my $domain = $Config{'mydomain'};
1075 $email = "$username\@$domain";
1079 $author ||= "A. U. Thor";
1080 $email ||= 'a.u.thor@a.galaxy.far.far.away';
1083 $revhist = <<EOT if $opt_C;
1089 #=item $TEMPLATE_VERSION
1091 #Original version; created by h2xs $H2XS_VERSION with options
1099 my $exp_doc = <<EOD;
1107 if (@const_names and not $opt_P) {
1109 #=head2 Exportable constants
1111 # @{[join "\n ", @const_names]}
1116 if (defined $fdecls and @$fdecls and not $opt_P) {
1118 #=head2 Exportable functions
1122 # $exp_doc .= <<EOD if $opt_p;
1123 #When accessing these functions from Perl, prefix C<$opt_p> should be removed.
1127 # @{[join "\n ", @known_fnames{@fnames}]}
1134 if ($opt_x && $opt_a) {
1136 $meth_doc .= accessor_docs($name, $struct)
1137 while ($name, $struct) = each %structs;
1140 my $pod = <<"END" unless $opt_P;
1141 ## Below is stub documentation for your module. You'd better edit it!
1145 #$module - Perl extension for blah blah blah
1154 # This should be the abstract for $module.
1155 # The abstract is used when making PPD (Perl Package Description) files.
1156 # If you don't want an ABSTRACT you should also edit Makefile.PL to
1157 # remove the ABSTRACT_FROM option.
1161 #Stub documentation for $module, created by h2xs. It looks like the
1162 #author of the extension was negligent enough to leave the stub
1166 $exp_doc$meth_doc$revhist
1170 #Mention other useful documentation such as the documentation of
1171 #related modules or operating system documentation (such as man pages
1172 #in UNIX), or any relevant external documentation such as RFCs or
1175 #If you have a mailing list set up for your module, mention it here.
1177 #If you have a web site set up for your module, mention it here.
1181 #$author, E<lt>${email}E<gt>
1183 #=head1 COPYRIGHT AND LICENSE
1185 #Copyright ${\(1900 + (localtime) [5])} by $author
1187 #This library is free software; you can redistribute it and/or modify
1188 #it under the same terms as Perl itself.
1193 $pod =~ s/^\#//gm unless $opt_P;
1194 print PM $pod unless $opt_P;
1199 if( ! $opt_X ){ # print XS, unless it is disabled
1200 warn "Writing $ext$modpname/$modfname.xs\n";
1210 foreach my $path_h (@path_h_ini) {
1212 $h =~ s#^/usr/include/##;
1213 if ($^O eq 'VMS') { $h =~ s#.*vms\]#sys/# or $h =~ s#.*[:>\]]##; }
1214 print XS qq{#include <$h>\n};
1219 print XS <<"END" if $opt_g;
1223 #define MY_CXT_KEY "${module}::_guts" XS_VERSION
1226 /* Put Global Data in here */
1227 int dummy; /* you can access this elsewhere as MY_CXT.dummy */
1234 my %pointer_typedefs;
1235 my %struct_typedefs;
1239 my $out = $pointer_typedefs{$type};
1240 return $out if defined $out;
1242 $out = ($type =~ /\*$/);
1243 # This converts only the guys which do not have trailing part in the typedef
1245 and $typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
1246 $type = normalize_type($type);
1247 print "Is-Pointer: Type mutation via typedefs: $otype ==> $type\n"
1249 $out = td_is_pointer($type);
1251 return ($pointer_typedefs{$otype} = $out);
1256 my $out = $struct_typedefs{$type};
1257 return $out if defined $out;
1259 $out = ($type =~ /^(struct|union)\b/) && !td_is_pointer($type);
1260 # This converts only the guys which do not have trailing part in the typedef
1262 and $typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
1263 $type = normalize_type($type);
1264 print "Is-Struct: Type mutation via typedefs: $otype ==> $type\n"
1266 $out = td_is_struct($type);
1268 return ($struct_typedefs{$otype} = $out);
1271 print_tievar_subs(\*XS, $_, $vdecl_hash{$_}) for @vdecls;
1274 # We write the "sample" files used when this module is built by perl without
1275 # ExtUtils::Constant.
1276 # h2xs will later check that these are the same as those generated by the
1277 # code embedded into Makefile.PL
1278 warn "Writing $ext$modpname/fallback.c\n";
1279 warn "Writing $ext$modpname/fallback.xs\n";
1280 WriteConstants ( C_FILE => "fallback.c",
1281 XS_FILE => "fallback.xs",
1282 DEFAULT_TYPE => $opt_t,
1284 NAMES => \@const_names,
1286 print XS "#include \"$constsfname.c\"\n";
1290 my $prefix = defined $opt_p ? "PREFIX = $opt_p" : '';
1292 # Now switch from C to XS by issuing the first MODULE declaration:
1295 MODULE = $module PACKAGE = $module $prefix
1299 # If a constant() function was #included then output a corresponding
1301 print XS "INCLUDE: $constsfname.xs\n" unless $opt_c;
1303 print XS <<"END" if $opt_g;
1308 /* If any of the fields in the my_cxt_t struct need
1309 to be initialised, do it here.
1315 foreach (sort keys %const_xsub) {
1324 croak("Your vendor has not defined the $module macro $_");
1339 my ($type, $name, $args) = @$decl;
1340 return if $seen_decl{$name}++; # Need to do the same for docs as well?
1342 my @argnames = map {$_->[1]} @$args;
1343 my @argtypes = map { normalize_type( $_->[0], 1 ) } @$args;
1345 s/^\s*const\b\s*// for @argtypes;
1347 my @argarrays = map { $_->[4] || '' } @$args;
1348 my $numargs = @$args;
1349 if ($numargs and $argtypes[-1] eq '...') {
1351 $argnames[-1] = '...';
1354 $type = normalize_type($type, 1);
1362 for my $arg (0 .. $numargs - 1) {
1364 $argtypes[$arg] $argnames[$arg]$argarrays[$arg]
1369 sub print_tievar_subs {
1370 my($fh, $name, $type) = @_;
1373 _get_$name(IV index, SV *sv) {
1378 (void)call_pv("$module\::_get_$name", G_DISCARD);
1383 _set_$name(IV index, SV *sv) {
1388 (void)call_pv("$module\::_set_$name", G_DISCARD);
1395 sub print_tievar_xsubs {
1396 my($fh, $name, $type) = @_;
1404 uf.uf_val = &_get_$name;
1405 uf.uf_set = &_set_$name;
1406 uf.uf_index = (IV)&_get_$name;
1407 sv_magic(sv, 0, 'U', (char*)&uf, sizeof(uf));
1411 $type THIS = NO_INIT
1427 sub print_accessors {
1428 my($fh, $name, $struct) = @_;
1429 return unless defined $struct && $name !~ /\s|_ANON/;
1430 $name = normalize_type($name);
1431 my $ptrname = normalize_type("$name *");
1434 MODULE = $module PACKAGE = ${name} $prefix
1438 $name THIS = NO_INIT
1441 if (sv_derived_from(ST(0), "$name")) {
1443 char *s = SvPV((SV*)SvRV(ST(0)), len);
1444 if (len != sizeof(THIS))
1445 croak("Size \%d of packed data != expected \%d",
1447 RETVAL = ($name *)s;
1450 croak("THIS is not of type $name");
1456 char *CLASS = NO_INIT
1459 Zero((void*)&RETVAL, sizeof(RETVAL), char);
1463 MODULE = $module PACKAGE = ${name}Ptr $prefix
1466 my @items = @$struct;
1468 my $item = shift @items;
1469 if ($item->[0] =~ /_ANON/) {
1470 if (defined $item->[2]) {
1472 @$_[0, 1], "$item->[2]_$_->[2]", "$item->[2].$_->[2]",
1473 ], @{ $structs{$item->[0]} };
1475 push @items, @{ $structs{$item->[0]} };
1478 my $type = normalize_type($item->[0]);
1479 my $ttype = $structs{$type} ? normalize_type("$type *") : $type;
1482 $item->[2](THIS, __value = NO_INIT)
1488 THIS->$item->[-1] = __value;
1490 $type eq $ttype ? "THIS->$item->[-1]" : "&(THIS->$item->[-1])"
1501 my($name, $struct) = @_;
1502 return unless defined $struct && $name !~ /\s|_ANON/;
1503 $name = normalize_type($name);
1504 my $ptrname = $name . 'Ptr';
1505 my @items = @$struct;
1508 my $item = shift @items;
1509 if ($item->[0] =~ /_ANON/) {
1510 if (defined $item->[2]) {
1512 @$_[0, 1], "$item->[2]_$_->[2]", "$item->[2].$_->[2]",
1513 ], @{ $structs{$item->[0]} };
1515 push @items, @{ $structs{$item->[0]} };
1518 push @list, $item->[2];
1521 my $methods = (join '(...)>, C<', @list) . '(...)';
1525 #=head2 Object and class methods for C<$name>/C<$ptrname>
1527 #The principal Perl representation of a C object of type C<$name> is an
1528 #object of class C<$ptrname> which is a reference to an integer
1529 #representation of a C pointer. To create such an object, one may use
1532 # my \$buffer = $name->new();
1533 # my \$obj = \$buffer->_to_ptr();
1535 #This exersizes the following two methods, and an additional class
1536 #C<$name>, the internal representation of which is a reference to a
1537 #packed string with the C structure. Keep in mind that \$buffer should
1538 #better survive longer than \$obj.
1542 #=item C<\$object_of_type_$name-E<gt>_to_ptr()>
1544 #Converts an object of type C<$name> to an object of type C<$ptrname>.
1546 #=item C<$name-E<gt>new()>
1548 #Creates an empty object of type C<$name>. The corresponding packed
1549 #string is zeroed out.
1553 #return the current value of the corresponding element if called
1554 #without additional arguments. Set the element to the supplied value
1555 #(and return the new value) if called with an additional argument.
1557 #Applicable to objects of type C<$ptrname>.
1566 # Should be called before any actual call to normalize_type().
1568 # We do not want to read ./typemap by obvios reasons.
1569 my @tm = qw(../../../typemap ../../typemap ../typemap);
1570 my $stdtypemap = "$Config::Config{privlib}/ExtUtils/typemap";
1571 unshift @tm, $stdtypemap;
1572 my $proto_re = "[" . quotemeta('\$%&*@;') . "]" ;
1574 # Start with useful default values
1575 $typemap{float} = 'T_NV';
1577 foreach my $typemap (@tm) {
1578 next unless -e $typemap ;
1579 # skip directories, binary files etc.
1580 warn " Scanning $typemap\n";
1581 warn("Warning: ignoring non-text typemap file '$typemap'\n"), next
1582 unless -T $typemap ;
1583 open(TYPEMAP, $typemap)
1584 or warn ("Warning: could not open typemap file '$typemap': $!\n"), next;
1585 my $mode = 'Typemap';
1588 if (/^INPUT\s*$/) { $mode = 'Input'; next; }
1589 elsif (/^OUTPUT\s*$/) { $mode = 'Output'; next; }
1590 elsif (/^TYPEMAP\s*$/) { $mode = 'Typemap'; next; }
1591 elsif ($mode eq 'Typemap') {
1592 next if /^\s*($|\#)/ ;
1594 if ( ($type, $image) =
1595 /^\s*(.*?\S)\s+(\S+)\s*($proto_re*)\s*$/o
1596 # This may reference undefined functions:
1597 and not ($image eq 'T_PACKED' and $typemap eq $stdtypemap)) {
1598 $typemap{normalize_type($type)} = $image;
1602 close(TYPEMAP) or die "Cannot close $typemap: $!";
1604 %std_types = %types_seen;
1609 sub normalize_type { # Second arg: do not strip const's before \*
1611 my $do_keep_deep_const = shift;
1612 # If $do_keep_deep_const this is heuristical only
1613 my $keep_deep_const = ($do_keep_deep_const ? '\b(?![^(,)]*\*)' : '');
1615 = "(?:\\b(?:(?:__const__|const)$keep_deep_const|static|inline|__inline__)\\b\\s*)*";
1616 if ($do_keep_deep_const) { # Keep different compiled /RExen/o separately!
1617 $type =~ s/$ignore_mods//go;
1620 $type =~ s/$ignore_mods//go;
1622 $type =~ s/([^\s\w])/ $1 /g;
1626 $type =~ s/\* (?=\*)/*/g;
1627 $type =~ s/\. \. \./.../g;
1629 $types_seen{$type}++
1630 unless $type eq '...' or $type eq 'void' or $std_types{$type};
1636 sub assign_typemap_entry {
1640 if ($tmask and $type =~ /$tmask/) {
1641 print "Type $type matches -o mask\n" if $opt_d;
1642 $entry = (td_is_struct($type) ? "T_OPAQUE_STRUCT" : "T_PTROBJ");
1644 elsif ($typedef_rex and $type =~ s/($typedef_rex)/$typedefs_pre{$1}/go) {
1645 $type = normalize_type $type;
1646 print "Type mutation via typedefs: $otype ==> $type\n" if $opt_d;
1647 $entry = assign_typemap_entry($type);
1649 # XXX good do better if our UV happens to be long long
1650 return "T_NV" if $type =~ /^(unsigned\s+)?long\s+(long|double)\z/;
1651 $entry ||= $typemap{$otype}
1652 || (td_is_struct($type) ? "T_OPAQUE_STRUCT" : "T_PTROBJ");
1653 $typemap{$otype} = $entry;
1654 $need_opaque = 1 if $entry eq "T_OPAQUE_STRUCT";
1659 print_tievar_xsubs(\*XS, $_, $vdecl_hash{$_});
1663 for my $decl (@$fdecls_parsed) { print_decl(\*XS, $decl) }
1665 while (my($name, $struct) = each %structs) {
1666 print_accessors(\*XS, $name, $struct);
1675 warn "Writing $ext$modpname/typemap\n";
1676 open TM, ">typemap" or die "Cannot open typemap file for write: $!";
1678 for $type (sort keys %types_seen) {
1679 my $entry = assign_typemap_entry $type;
1680 print TM $type, "\t" x (5 - int((length $type)/8)), "\t$entry\n"
1683 print TM <<'EOP' if $need_opaque; # Older Perls do not have correct entry
1684 #############################################################################
1687 if (sv_derived_from($arg, \"${ntype}\")) {
1689 char *s = SvPV((SV*)SvRV($arg), len);
1691 if (len != sizeof($var))
1692 croak(\"Size %d of packed data != expected %d\",
1697 croak(\"$var is not of type ${ntype}\")
1698 #############################################################################
1701 sv_setref_pvn($arg, \"${ntype}\", (char *)&$var, sizeof($var));
1704 close TM or die "Cannot close typemap file for write: $!";
1709 warn "Writing $ext$modpname/Makefile.PL\n";
1710 open(PL, ">Makefile.PL") || die "Can't create $ext$modpname/Makefile.PL: $!\n";
1714 if ( $compat_version < 5.00702 and $new_test )
1716 $prereq_pm = q%'Test::More' => 0%;
1724 use $compat_version;
1725 use ExtUtils::MakeMaker;
1726 # See lib/ExtUtils/MakeMaker.pm for details of how to influence
1727 # the contents of the Makefile that is written.
1729 'NAME' => '$module',
1730 'VERSION_FROM' => '$modfname.pm', # finds \$VERSION
1731 'PREREQ_PM' => {$prereq_pm}, # e.g., Module::Name => 1.1
1732 (\$] >= 5.005 ? ## Add these new keywords supported since 5.005
1733 (ABSTRACT_FROM => '$modfname.pm', # retrieve abstract from module
1734 AUTHOR => '$author <$email>') : ()),
1736 if (!$opt_X) { # print C stuff, unless XS is disabled
1737 $opt_F = '' unless defined $opt_F;
1738 my $I = (((glob '*.h') || (glob '*.hh')) ? '-I.' : '');
1739 my $Ihelp = ($I ? '-I. ' : '');
1740 my $Icomment = ($I ? '' : <<EOC);
1741 # Insert -I. if you add *.h files later:
1745 'LIBS' => ['$extralibs'], # e.g., '-lm'
1746 'DEFINE' => '$opt_F', # e.g., '-DHAVE_SOMETHING'
1747 $Icomment 'INC' => '$I', # e.g., '${Ihelp}-I/usr/include/other'
1752 # Without this the constants xs files are spotted, and cause rules to be
1753 # added to delete the similarly names C files, which isn't what we want.
1754 'XS' => {'$modfname.xs' => '$modfname.c'},
1755 realclean => {FILES => '$constsfname.c $constsfname.xs'},
1759 my $C = grep {$_ ne "$modfname.c" && $_ ne "fallback.c"}
1760 (glob '*.c'), (glob '*.cc'), (glob '*.C');
1761 my $Cpre = ($C ? '' : '# ');
1762 my $Ccomment = ($C ? '' : <<EOC);
1763 # Un-comment this if you add C files to link with later:
1767 $Ccomment $Cpre\'OBJECT' => '\$(O_FILES)', # link all the C files too
1773 WriteMakefileSnippet ( C_FILE => "$constsfname.c",
1774 XS_FILE => "$constsfname.xs",
1775 DEFAULT_TYPE => $opt_t,
1777 NAMES => \@const_names,
1780 if (eval {require ExtUtils::Constant; 1}) {
1781 # If you edit these definitions to change the constants used by this module,
1782 # you will need to use the generated $constsfname.c and $constsfname.xs
1783 # files to replace their "fallback" counterparts before distributing your
1789 copy ('fallback.c', '$constsfname.c')
1790 or die "Can't copy fallback.c to $constsfname.c: \$!";
1791 copy ('fallback.xs', '$constsfname.xs')
1792 or die "Can't copy fallback.xs to $constsfname.xs: \$!";
1796 eval $generate_code;
1799 Attempting to test constant code in $ext$modpname/Makefile.PL:
1802 gave unexpected error $@
1803 Please report the circumstances of this bug in h2xs version $H2XS_VERSION
1804 using the perlbug script.
1809 foreach ('c', 'xs') {
1810 if (compare("fallback.$_", "$constsfname.$_")) {
1812 Files "$ext$modpname/fallback.$_" and "$ext$modpname/$constsfname.$_" differ.
1818 warn fill ('','', <<"EOM") . "\n";
1819 It appears that the code in $ext$modpname/Makefile.PL does not autogenerate
1820 the files $ext$modpname/$constsfname.c and $ext$modpname/$constsfname.xs
1823 Please report the circumstances of this bug in h2xs version $H2XS_VERSION
1824 using the perlbug script.
1827 unlink "$constsfname.c", "$constsfname.xs";
1831 close(PL) || die "Can't close $ext$modpname/Makefile.PL: $!\n";
1833 # Create a simple README since this is a CPAN requirement
1834 # and it doesnt hurt to have one
1835 warn "Writing $ext$modpname/README\n";
1836 open(RM, ">README") || die "Can't create $ext$modpname/README:$!\n";
1837 my $thisyear = (gmtime)[5] + 1900;
1838 my $rmhead = "$modpname version $TEMPLATE_VERSION";
1839 my $rmheadeq = "=" x length($rmhead);
1843 if ( $compat_version < 5.00702 and $new_test )
1845 $rm_prereq = 'Test::More';
1849 $rm_prereq = 'blah blah blah';
1856 The README is used to introduce the module and provide instructions on
1857 how to install the module, any machine dependencies it may have (for
1858 example C compilers and installed libraries) and any other information
1859 that should be provided before the module is installed.
1861 A README file is required for CPAN modules since CPAN extracts the
1862 README file from a module distribution so that people browsing the
1863 archive can use it get an idea of the modules uses. It is usually a
1864 good idea to provide version information here so that people can
1865 decide whether fixes for the module are worth downloading.
1869 To install this module type the following:
1878 This module requires these other modules and libraries:
1882 COPYRIGHT AND LICENCE
1884 Put the correct copyright and licence information here.
1886 Copyright (C) $thisyear $author
1888 This library is free software; you can redistribute it and/or modify
1889 it under the same terms as Perl itself.
1892 close(RM) || die "Can't close $ext$modpname/README: $!\n";
1895 my $testfile = "$testdir/1.t";
1896 unless (-d "$testdir") {
1897 mkdir "$testdir" or die "Cannot mkdir $testdir: $!\n";
1899 warn "Writing $ext$modpname/$testfile\n";
1900 my $tests = @const_names ? 2 : 1;
1902 open EX, ">$testfile" or die "Can't create $ext$modpname/$testfile: $!\n";
1905 # Before `make install' is performed this script should be runnable with
1906 # `make test'. After `make install' it should work as `perl 1.t'
1908 #########################
1910 # change 'tests => $tests' to 'tests => last_test_to_print';
1914 my $test_mod = 'Test::More';
1916 if ( $old_test or ($compat_version < 5.007 and not $new_test ))
1918 my $test_mod = 'Test';
1922 BEGIN { plan tests => $tests };
1924 ok(1); # If we made it this far, we're ok.
1929 my $const_names = join " ", @const_names;
1933 foreach my $constname (qw(
1936 print EX wrap ("\t", "\t", $const_names);
1937 print EX (")) {\n");
1940 next if (eval "my \\\$a = \$constname; 1");
1941 if (\$\@ =~ /^Your vendor has not defined $module macro \$constname/) {
1942 print "# pass: \$\@";
1944 print "# fail: \$\@";
1949 print "not ok 2\\n";
1960 use Test::More tests => $tests;
1961 BEGIN { use_ok('$module') };
1966 my $const_names = join " ", @const_names;
1970 foreach my $constname (qw(
1973 print EX wrap ("\t", "\t", $const_names);
1974 print EX (")) {\n");
1977 next if (eval "my \\\$a = \$constname; 1");
1978 if (\$\@ =~ /^Your vendor has not defined $module macro \$constname/) {
1979 print "# pass: \$\@";
1981 print "# fail: \$\@";
1987 ok( \$fail == 0 , 'Constants' );
1993 #########################
1995 # Insert your test code below, the $test_mod module is use()ed here so read
1996 # its man page ( perldoc $test_mod ) for help writing this test script.
2000 close(EX) || die "Can't close $ext$modpname/$testfile: $!\n";
2003 warn "Writing $ext$modpname/Changes\n";
2005 open(EX, ">Changes") || die "Can't create $ext$modpname/Changes: $!\n";
2006 @ARGS = map {/[\s\"\'\`\$*?^|&<>\[\]\{\}\(\)]/ ? "'$_'" : $_} @ARGS;
2008 Revision history for Perl extension $module.
2010 $TEMPLATE_VERSION @{[scalar localtime]}
2011 \t- original version; created by h2xs $H2XS_VERSION with options
2015 close(EX) || die "Can't close $ext$modpname/Changes: $!\n";
2018 warn "Writing $ext$modpname/MANIFEST\n";
2019 open(MANI,'>MANIFEST') or die "Can't create MANIFEST: $!";
2020 my @files = grep { -f } (<*>, <t/*>);
2022 eval {opendir(D,'.');};
2023 unless ($@) { @files = readdir(D); closedir(D); }
2025 if (!@files) { @files = map {chomp && $_} `ls`; }
2028 # Clip trailing '.' for portability -- non-VMS OSs don't expect it
2030 # Fix up for case-sensitive file systems
2031 s/$modfname/$modfname/i && next;
2032 $_ = "\U$_" if $_ eq 'manifest' or $_ eq 'changes';
2033 $_ = 'Makefile.PL' if $_ eq 'makefile.pl';
2037 @files = grep {$_ ne "$constsfname.c" and $_ ne "$constsfname.xs"} @files;
2039 print MANI join("\n",@files), "\n";
2043 close OUT or die "Can't close $file: $!";
2044 chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
2045 exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';