summaryrefslogtreecommitdiff
path: root/configpm
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-02-19 14:58:36 +0000
committerNicholas Clark <nick@ccl4.org>2011-02-19 14:58:36 +0000
commit1f0fc1c94b0da3182a0963953d7c62e0b6a20afe (patch)
treed33c4f7ed640fef665916850bf23a04fe621c0bd /configpm
parentac2c13e80f4a2afce325daa310dd1d247110403b (diff)
downloadperl-1f0fc1c94b0da3182a0963953d7c62e0b6a20afe.tar.gz
Add Config::header_files() to list the header dependencies for XS code.
Currently ExtUtils::MM_{Unix,VMS} contain hard-coded lists, which omit some headers, and include other headers that we would like to like to eliminate. Having the Perl installation providing the canonical list for itself allows us to avoid the these problems.
Diffstat (limited to 'configpm')
-rwxr-xr-xconfigpm41
1 files changed, 40 insertions, 1 deletions
diff --git a/configpm b/configpm
index 5ca58c7312..097537379a 100755
--- a/configpm
+++ b/configpm
@@ -61,6 +61,36 @@ $Common{$_} = $_ foreach qw(dlext so);
my %Extensions = map {($_,$_)}
qw(dynamic_ext static_ext extensions known_extensions);
+# The plan is that this information is used by ExtUtils::MakeMaker to generate
+# Makefile dependencies, rather than hardcoding a list, which has become out
+# of date. However, currently, MM_Unix.pm and MM_VMS.pm have *different* lists,
+# *and* descrip_mms.template doesn't actually install all the headers.
+# The "Unix" list seems to (attempt to) avoid the generated headers, which I'm
+# not sure is the right thing to do. Also, not certain whether it would be
+# easier to parse MANIFEST to get these (adding config.h, and potentially
+# removing others), but for now, stick to a hard coded list.
+
+# Could use a map to add ".h", but I suspect that it's easier to use literals,
+# so that anyone using grep will find them
+# This is the list from MM_VMS, plus pad.h, parser.h, perlsfio.h utf8.h
+# which it installs. It *doesn't* install perliol.h - FIXME.
+my @header_files = qw(EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h
+ embed.h embedvar.h form.h gv.h handy.h hv.h intrpvar.h
+ iperlsys.h keywords.h mg.h nostdio.h op.h opcode.h
+ pad.h parser.h patchlevel.h perl.h perlio.h perlsdio.h
+ perlsfio.h perlvars.h perly.h pp.h pp_proto.h proto.h
+ regcomp.h regexp.h regnodes.h scope.h sv.h thread.h utf8.h
+ util.h);
+
+# No point in adding fakethr.h, as it no longer works
+push @header_files,
+ $^O eq 'VMS' ? 'vmsish.h' : qw(dosish.h perliol.h time64.h unixish.h);
+
+my $header_files = ' return qw(' . join(' ', sort @header_files) . ');';
+$header_files =~ s/(?=.{64}) # If line is still overlength
+ (.{1,64})\ # Split at the last convenient space
+ /$1\n /gx;
+
# allowed opts as well as specifies default and initial values
my %Allowed_Opts = (
'cross' => '', # --cross=PLATFORM - crosscompiling for PLATFORM
@@ -183,13 +213,17 @@ sub _V {
print " $_\n" foreach @INC;
}
+sub header_files {
ENDOFBEG
+$heavy_txt .= $header_files . "\n}\n\n";
+
my $export_funcs = <<'EOT';
my %Export_Cache = (myconfig => 1,
config_sh => 1, config_vars => 1, config_re => 1,
bincompat_options => 1, non_bincompat_options => 1,
- compile_date => 1, local_patches => 1);
+ compile_date => 1, local_patches => 1,
+ header_files => 1);
EOT
my %export_ok = eval $export_funcs or die;
@@ -886,6 +920,11 @@ C<perl -V>
Returns a list of the names of locally applied patches, equivalent to what
is shown by C<perl -V>.
+=item header_files()
+
+Returns a list of the header files that should be used as dependencies for
+XS code, for this version of Perl on this platform.
+
=back
=head1 EXAMPLE