# Do not remove the following line; MakeMaker relies on it to identify
# this file as a template for defsubs.h
# Extracting defsubs.h (with variable substitutions)
-#!perl
+#!perl -w
+use File::Spec;
+my (undef, $headerpath) = @ARGV;
my ($out) = __FILE__ =~ /(^.*)\.PL/i;
$out =~ s/_h$/.h/;
+unlink $out if -l $out;
open(OUT,">$out") || die "Cannot open $file:$!";
print "Extracting $out...\n";
print OUT <<"END";
END
foreach my $const (qw(
- AVf_REAL
+ CVf_ANON
+ CVf_CLONE
+ CVf_CLONED
+ CVf_CONST
+ CVf_LVALUE
+ CVf_METHOD
+ CVf_NODEBUG
+ CVf_UNIQUE
+ CVf_WEAKOUTSIDE
+ GVf_IMPORTED_AV
+ GVf_IMPORTED_CV
+ GVf_IMPORTED_HV
+ GVf_IMPORTED_SV
HEf_SVKEY
- SVf_READONLY SVTYPEMASK
- GVf_IMPORTED_AV GVf_IMPORTED_HV
- GVf_IMPORTED_SV GVf_IMPORTED_CV
- CVf_CLONE CVf_CLONED CVf_ANON CVf_OLDSTYLE
- CVf_UNIQUE CVf_NODEBUG CVf_METHOD CVf_LOCKED
- CVf_LVALUE CVf_CONST CVf_WEAKOUTSIDE CVf_ASSERTION
- SVpad_OUR SVf_FAKE SVf_IVisUV
- SVf_IOK SVf_NOK SVf_POK SVf_ROK
- SVp_IOK SVp_NOK SVp_POK
- SVt_PVGV SVt_PVHV
- SVs_RMG SVs_SMG
+ SVTYPEMASK
+ SVf_FAKE
+ SVf_IOK
+ SVf_IVisUV
+ SVf_NOK
+ SVf_POK
+ SVf_READONLY
+ SVf_ROK
+ SVp_IOK
+ SVp_NOK
+ SVp_POK
+ SVpad_OUR
+ SVs_RMG
+ SVs_SMG
+ SVt_PVGV
+ SVt_PVHV
+ PAD_FAKELEX_ANON
+ PAD_FAKELEX_MULTI
))
{
doconst($const);
}
-foreach my $file (qw(op.h cop.h))
+
+if ($] < 5.009) {
+ # This is only present in 5.10, but it's useful to B::Deparse to be able
+ # to import a dummy value from B
+ doconst(OPpPAD_STATE);
+}
+
+if ($] >= 5.009) {
+ # Constant not present in 5.8.x
+ doconst(CVf_ISXSUB);
+} else {
+ # Constant not present after 5.8.x
+ doconst(AVf_REAL);
+}
+
+if ($] < 5.011) {
+ # Constant not present after 5.10.x
+ doconst(CVf_LOCKED);
+}
+
+foreach my $tuple (['op.h'],['cop.h'],['regexp.h','RXf_'])
{
- my $path = $^O eq 'MacOS' ? ":::$file" : "../../$file";
+ my $file = $tuple->[0];
+ my $pfx = $tuple->[1] || '';
+ my $path = File::Spec->catfile($headerpath, $file);
open(OPH,"$path") || die "Cannot open $path:$!";
while (<OPH>)
{
- doconst($1) if (/#define\s+(\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/);
+ doconst($1) if (/#define\s+($pfx\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/);
}
close(OPH);
}