summaryrefslogtreecommitdiff
path: root/lib/h2xs.t
blob: 8935711ddd083e29b3395834ea03a65b014e9530 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!./perl

# Some quick tests to see if h2xs actually runs and creates files as 
# expected.  File contents include date stamps and/or usernames
# hence are not checked.  File existence is checked with -e though.
# This test depends on File::Path::rmtree() to clean up with.
#  - pvhp

BEGIN {
    chdir 't' if -d 't';
    @INC = '../lib';
}

# use strict; # we are not really testing this
use File::Path;  # for cleaning up with rmtree()

my $extracted_program = '../utils/h2xs'; # unix, nt, ...
if ($^O eq 'VMS') { $extracted_program = '[-.utils]h2xs.com'; }
if ($^O eq 'MacOS') { $extracted_program = '::utils:h2xs'; }
if (!(-e $extracted_program)) {
    print "1..0 # Skip: $extracted_program was not built\n";
    exit 0;
}
# You might also wish to bail out if your perl platform does not
# do `$^X -e 'warn "Writing h2xst"' 2>&1`; duplicity.

my $dupe = '2>&1'; # ok on unix, nt, VMS, ...
my $lib = '"-I../lib"'; # ok on unix, nt, The extra \" are for VMS
# The >&1 would create a file named &1 on MPW (STDERR && STDOUT are
# already merged).
if ($^O eq 'MacOS') {
    $dupe = '';
    $lib = '-x -I::lib:'; # -x overcomes MPW $Config{startperl} anomaly
}
# $name should differ from system header file names and must
# not already be found in the t/ subdirectory for perl.
my $name = 'h2xst';

print "1..17\n";

my @result = ();
my $result = '';
my $expectation = '';

# h2xs warns about what it is writing hence the (possibly unportable)
# 2>&1 dupe:
# does it run?
@result = `$^X $lib $extracted_program -f -n $name $dupe`;
print(((!$?) ? "" : "not "), "ok 1\n");
$result = join("",@result);

$expectation = <<"EOXSFILES";
Writing $name/$name.pm
Writing $name/$name.xs
Writing $name/Makefile.PL
Writing $name/README
Writing $name/t/1.t
Writing $name/Changes
Writing $name/MANIFEST
EOXSFILES

# accomodate MPW # comment character prependage
if ($^O eq 'MacOS') {
    $result =~ s/#\s*//gs;
}

#print "# expectation is >$expectation<\n";
#print "# result is >$result<\n";
# Was the output the list of files that were expected?
print((($result eq $expectation) ? "" : "not "), "ok 2\n");
# Were the files created?
my $t = 3;
$expectation =~ s/Writing //; # remove leader
foreach (split(/Writing /,$expectation)) {
    chomp;  # remove \n
    if ($^O eq 'MacOS') {
        $_ = ':' . join(':',split(/\//,$_));
        $_ =~ s/$name:t:1.t/$name:t\/1.t/; # is this an h2xs bug?
    }
    print(((-e $_) ? "" : "not "), "ok $t\n");
    $t++;
}

# clean up
rmtree($name);

# does it run with -X and omit the h2xst.xs file?
@result = ();
$result = '';
# The extra \" around -X are for VMS but do no harm on NT or Unix
@result = `$^X $lib $extracted_program \"-X\" -f -n $name $dupe`;
print(((!$?) ? "" : "not "), "ok $t\n");
$t++;
$result = join("",@result);

$expectation = <<"EONOXSFILES";
Writing $name/$name.pm
Writing $name/Makefile.PL
Writing $name/README
Writing $name/t/1.t
Writing $name/Changes
Writing $name/MANIFEST
EONOXSFILES

if ($^O eq 'MacOS') { $result =~ s/#\s*//gs; }
#print $expectation;
#print $result;
print((($result eq $expectation) ? "" : "not "), "ok $t\n");
$t++;
$expectation =~ s/Writing //; # remove leader
foreach (split(/Writing /,$expectation)) {
    chomp;  # remove \n
    if ($^O eq 'MacOS') {
        $_ = ':' . join(':',split(/\//,$_));
        $_ =~ s/$name:t:1.t/$name:t\/1.t/; # is this an h2xs bug?
    }
    print(((-e $_) ? "" : "not "), "ok $t\n");
    $t++;
}

# clean up
rmtree($name);