xref: /openbsd-src/gnu/usr.bin/perl/t/porting/globvar.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1#!perl -w
2
3use TestInit qw(T);
4use strict;
5use Config;
6
7require 't/test.pl';
8
9skip_all("Code to read symbols not ported to $^O")
10    if $^O eq 'VMS' or $^O eq 'MSWin32';
11
12# Not investigated *why* we don't export these, but we don't, and we've not
13# received any bug reports about it causing problems:
14my %skip = map { ("PL_$_", 1) }
15    qw(
16	  DBcv bitcount cshname force_link_funcs generation lastgotoprobe
17	  mod_latin1_uc modcount no_symref_sv timesbuf uudmap
18	  watchaddr watchok warn_uninit_sv
19     );
20
21$skip{PL_hash_rand_bits}= $skip{PL_hash_rand_bits_enabled}= 1; # we can be compiled without these, so skip testing them
22
23
24my $trial = "nm globals$Config{_o} 2>&1";
25my $yes = `$trial`;
26
27skip_all("Could not run `$trial`") if $?;
28
29my $defined = qr/^[0-9a-fA-F]{8,16}\s+[^Uu]\s+_?/m;
30
31skip_all("Could not spot definition of PL_Yes in output of `$trial`")
32    unless $yes =~ /${defined}PL_Yes/m;
33
34my %exported;
35open my $fh, '-|', $^X, '-Ilib', './makedef.pl', 'PLATFORM=test'
36    or die "Can't run makedef.pl";
37
38while (<$fh>) {
39    next unless /^PL_/;
40    chomp;
41    ++$exported{$_};
42}
43
44close $fh or die "Problem running makedef.pl";
45
46my %unexported;
47
48foreach my $file (map {$_ . $Config{_o}} qw(globals regcomp)) {
49    open $fh, '-|', 'nm', $file
50	or die "Can't run nm $file";
51
52    while (<$fh>) {
53	next unless /$defined(PL_\S+)/;
54	if (delete $exported{$1}) {
55	    note("Seen definition of $1");
56	    next;
57	}
58	++$unexported{$1};
59    }
60    close $fh or die "Problem running nm $file";
61}
62
63foreach (sort keys %exported) {
64 SKIP: {
65    skip("We dont't export '$_' (Perl not built with this enabled?)",1) if $skip{$_};
66    fail("Attempting to export '$_' which is never defined");
67 }
68}
69
70foreach (sort keys %unexported) {
71 SKIP: {
72        skip("We don't export '$_'", 1) if $skip{$_};
73        fail("'$_' is defined, but we do not export it");
74    }
75}
76
77done_testing();
78