Add test for Net::protoent.
[p5sagit/p5-mst-13.2.git] / t / lib / extutils.t
CommitLineData
af6c647e 1#!./perl -w
2
0ddb8edc 3print "1..10\n";
af6c647e 4
5BEGIN {
6 chdir 't' if -d 't';
7 @INC = '../lib';
8}
9
10use warnings;
11use strict;
12use ExtUtils::MakeMaker;
13use ExtUtils::Constant qw (constant_types C_constant XS_constant autoload);
14use Config;
15
16my $runperl = $^X;
94b1a389 17
af6c647e 18$| = 1;
19
20my $dir = "ext-$$";
0ddb8edc 21my @files;
94b1a389 22
23print "# $dir being created...\n";
24mkdir $dir, 0777 or die "mkdir: $!\n";
25
26use File::Spec::Functions;
af6c647e 27
28END {
94b1a389 29 use File::Path;
30 print "# $dir being removed...\n";
31 rmtree($dir);
af6c647e 32}
33
af6c647e 34my @names = ("THREE", {name=>"OK4", type=>"PV",},
35 {name=>"OK5", type=>"PVN",
36 value=>['"not ok 5\\n\\0ok 5\\n"', 15]},
37 {name => "FARTHING", type=>"NV"},
7abfcde3 38 {name => "NOT_ZERO", type=>"UV", value=>"~(UV)0"});
af6c647e 39
40my @names_only = map {(ref $_) ? $_->{name} : $_} @names;
41
42my $package = "ExtTest";
43################ Header
94b1a389 44my $header = catfile($dir, "test.h");
0ddb8edc 45push @files, "test.h";
94b1a389 46open FH, ">$header" or die "open >$header: $!\n";
af6c647e 47print FH <<'EOT';
48#define THREE 3
49#define OK4 "ok 4\n"
50#define OK5 1
51#define FARTHING 0.25
52#define NOT_ZERO 1
53EOT
94b1a389 54close FH or die "close $header: $!\n";
af6c647e 55
56################ XS
94b1a389 57my $xs = catfile($dir, "$package.xs");
0ddb8edc 58push @files, "$package.xs";
94b1a389 59open FH, ">$xs" or die "open >$xs: $!\n";
af6c647e 60
61print FH <<'EOT';
62#include "EXTERN.h"
63#include "perl.h"
64#include "XSUB.h"
65EOT
66
67print FH "#include \"test.h\"\n\n";
68print FH constant_types(); # macro defs
69my $types = {};
70foreach (C_constant (undef, "IV", $types, undef, undef, @names) ) {
71 print FH $_, "\n"; # C constant subs
72}
73print FH "MODULE = $package PACKAGE = $package\n";
74print FH "PROTOTYPES: ENABLE\n";
75print FH XS_constant ($package, $types); # XS for ExtTest::constant
94b1a389 76close FH or die "close $xs: $!\n";
af6c647e 77
78################ PM
94b1a389 79my $pm = catfile($dir, "$package.pm");
0ddb8edc 80push @files, "$package.pm";
94b1a389 81open FH, ">$pm" or die "open >$pm: $!\n";
af6c647e 82print FH "package $package;\n";
83print FH "use $];\n";
84
85print FH <<'EOT';
86
87use strict;
88use warnings;
89use Carp;
90
91require Exporter;
92require DynaLoader;
93use AutoLoader;
94use vars qw ($VERSION @ISA @EXPORT_OK);
95
96$VERSION = '0.01';
97@ISA = qw(Exporter DynaLoader);
98@EXPORT_OK = qw(
99EOT
100
101print FH "\t$_\n" foreach (@names_only);
102print FH ");\n";
103print FH autoload ($package, $]);
104print FH "bootstrap $package \$VERSION;\n1;\n__END__\n";
94b1a389 105close FH or die "close $pm: $!\n";
af6c647e 106
107################ test.pl
94b1a389 108my $testpl = catfile($dir, "test.pl");
0ddb8edc 109push @files, "test.pl";
94b1a389 110open FH, ">$testpl" or die "open >$testpl: $!\n";
af6c647e 111
112print FH "use $package qw(@names_only);\n";
113print FH <<'EOT';
114
115my $three = THREE;
116if ($three == 3) {
117 print "ok 3\n";
118} else {
119 print "not ok 3 # $three\n";
120}
121
122print OK4;
123
124$_ = OK5;
125s/.*\0//s;
126print;
127
128my $farthing = FARTHING;
129if ($farthing == 0.25) {
130 print "ok 6\n";
131} else {
132 print "not ok 6 # $farthing\n";
133}
134
135my $not_zero = NOT_ZERO;
136if ($not_zero > 0 && $not_zero == ~0) {
137 print "ok 7\n";
138} else {
139 print "not ok 7 # \$not_zero=$not_zero ~0=" . (~0) . "\n";
140}
141
142
143EOT
144
94b1a389 145close FH or die "close $testpl: $!\n";
af6c647e 146
147################ dummy Makefile.PL
148# Keep the dependancy in the Makefile happy
94b1a389 149my $makefilePL = catfile($dir, "Makefile.PL");
0ddb8edc 150push @files, "Makefile.PL";
94b1a389 151open FH, ">$makefilePL" or die "open >$makefilePL: $!\n";
152close FH or die "close $makefilePL: $!\n";
af6c647e 153
154chdir $dir or die $!; push @INC, '../../lib';
155END {chdir ".." or warn $!};
156
94b1a389 157# Grr. MakeMaker hardwired to write its message to STDOUT.
158print "# ";
af6c647e 159WriteMakefile(
160 'NAME' => $package,
161 'VERSION_FROM' => "$package.pm", # finds $VERSION
162 ($] >= 5.005 ?
163 (#ABSTRACT_FROM => "$package.pm", # XXX add this
164 AUTHOR => $0) : ())
165 );
166if (-f "Makefile") {
167 print "ok 1\n";
168} else {
169 print "not ok 1\n";
170}
0ddb8edc 171push @files, "Makefile.old"; # Renamed by make clean
af6c647e 172
173my $make = $Config{make};
94b1a389 174
af6c647e 175$make = $ENV{MAKE} if exists $ENV{MAKE};
94b1a389 176
177my $makeout;
178
af6c647e 179print "# make = '$make'\n";
94b1a389 180$makeout = `$make`;
181if ($?) {
182 print "not ok 2 # $make failed: $?\n";
183 exit($?);
af6c647e 184} else {
185 print "ok 2\n";
186}
187
0ddb8edc 188my $maketest = "$make test";
189print "# make = '$maketest'\n";
190$makeout = `$maketest`;
94b1a389 191if ($?) {
192 print "not ok 8 # $make failed: $?\n";
af6c647e 193} else {
94b1a389 194 # Perl babblings
737e87b0 195 $makeout =~ s/^\s*PERL_DL_NONLAZY=.+?\n//m;
94b1a389 196
197 # GNU make babblings
198 $makeout =~ s/^\w*?make.+?(?:entering|leaving) directory.+?\n//mig;
199
200 print $makeout;
af6c647e 201 print "ok 8\n";
202}
0ddb8edc 203
204my $makeclean = "$make clean";
205print "# make = '$makeclean'\n";
206$makeout = `$makeclean`;
207if ($?) {
208 print "not ok 9 # $make failed: $?\n";
209} else {
210 print "ok 9\n";
211}
212
213foreach (@files) {
214 unlink $_ or warn "unlink $_: $!";
215}
216
217my $fail;
218opendir DIR, "." or die "opendir '.': $!";
219while (defined (my $entry = readdir DIR)) {
220 next if $entry =~ /^\.\.?$/;
221 print "# Extra file '$entry'\n";
222 $fail = 1;
223}
224closedir DIR or warn "closedir '.': $!";
225if ($fail) {
226 print "not ok 10\n";
227} else {
228 print "ok 10\n";
229}