5 die "Can't fork" unless $Config{d_fork};
7 # Brute force testing for makedef.pl
11 # Before modifying makedef.pl, create your golden results:
14 # $ ./perl -Ilib Porting/exercise_makedef.pl Gold/
18 # then modify makedef.pl
22 # $ ./perl -Ilib Porting/exercise_makedef.pl Test
23 # $ diff -rpu Gold Test
26 die "$0 prefix" unless $prefix;
27 die "No such directory $prefix" unless -d $prefix;
34 $SIG{INT} = sub { die }; # Trigger END processing
37 # needed for OS/2, so fake one up
38 my $mpm = 'miniperl.map';
40 die "$mpm exists" if -e $mpm;
42 open my $in, '<', 'av.c' or die "Can't open av.c: $!";
44 open my $out, '>', $mpm or die "Can't open $mpm: $!";
46 print $out "f $1\n" if /^(Perl_[A-Za-z_0-9]+)\(pTHX/;
48 close $out or die "Can't close $mpm: $!";
51 my @args = (platform => [map {"PLATFORM=$_"} qw(aix win32 os2 vms test)],
52 cflags => ['', 'CCFLAGS=-Dperl=rules -Dzzz'],
53 Deq => ['', '-Dbeer=foamy'],
54 D => ['', '-DPERL_IMPLICIT_SYS'],
55 cctype => ['', 'CCTYPE=GCC'],
56 filetype => ['', 'FILETYPE=def', 'FILETYPE=imp'],
57 targ_dir => ['', 'TARG_DIR=t/../'],
61 my ($names, $args, $key, $vals, @rest) = @_;
64 while (my ($i, $v) = each @$vals) {
65 $bad += expand([@$names, "$key=$i"], [@$args, $v], @rest);
69 # time to process something:
70 my $name = join ',', @$names;
71 my @args = grep {length} @$args;
73 $ENV{PERL5LIB} = join $Config{path_sep}, @INC;
76 open STDOUT, '>', "$prefix/$name.out"
77 or die "Can't open $prefix/$name.out: $!";
78 open STDERR, '>', "$prefix/$name.err"
79 or die "Can't open $prefix/$name.err: $!";
80 exec $^X, 'makedef.pl', @args;
81 die "Something went horribly wrong: $!";
83 die "Bad waitpid: $!" unless waitpid $pid, 0 == $pid;
85 print STDERR "`$^X makedef.pl @args` failed with $?\n";
86 print STDERR "See output in $prefix/$name.err\n";
92 my $bad = expand([], [], @args);
93 exit($bad > 255 ? 255 : $bad);