Get B compiling and passing all tests on both 5.9.x and 5.8.x
[p5sagit/p5-mst-13.2.git] / ext / B / defsubs_h.PL
1 # Do not remove the following line; MakeMaker relies on it to identify
2 # this file as a template for defsubs.h
3 # Extracting defsubs.h (with variable substitutions)
4 #!perl
5 my ($out) = __FILE__ =~ /(^.*)\.PL/i;
6 $out =~ s/_h$/.h/;
7 unlink $out if -l $out;
8 open(OUT,">$out") || die "Cannot open $file:$!";
9 print "Extracting $out...\n";
10 print OUT <<"END";
11 /*
12  !!! Don't modify this file - it's autogenerated from $0 !!!
13  */
14 END
15
16 foreach my $const (qw(
17                       CVf_ANON
18                       CVf_ASSERTION
19                       CVf_CLONE
20                       CVf_CLONED
21                       CVf_CONST
22                       CVf_LOCKED
23                       CVf_LVALUE
24                       CVf_METHOD
25                       CVf_NODEBUG
26                       CVf_UNIQUE
27                       CVf_WEAKOUTSIDE
28                       GVf_IMPORTED_AV
29                       GVf_IMPORTED_CV
30                       GVf_IMPORTED_HV
31                       GVf_IMPORTED_SV
32                       HEf_SVKEY
33                       SVTYPEMASK
34                       SVf_FAKE
35                       SVf_IOK
36                       SVf_IVisUV
37                       SVf_NOK
38                       SVf_POK
39                       SVf_READONLY
40                       SVf_ROK
41                       SVp_IOK
42                       SVp_NOK
43                       SVp_POK
44                       SVpad_OUR
45                       SVs_RMG
46                       SVs_SMG
47                       SVt_PVGV
48                       SVt_PVHV
49                       PAD_FAKELEX_ANON
50                       PAD_FAKELEX_MULTI
51                       ))
52  {
53   doconst($const);
54  }
55
56 if ($] < 5.009) {
57     # This is only present in 5.10, but it's useful to B::Deparse to be able
58     # to import a dummy value from B
59     doconst(OPpPAD_STATE);
60 }
61
62 if ($] >= 5.009) {
63     # Constant not present in 5.8.x
64     doconst(CVf_ISXSUB);
65 }
66
67 foreach my $file (qw(op.h cop.h))
68  {
69   my $path = $^O eq 'MacOS' ? ":::$file" : "../../$file";
70   open(OPH,"$path") || die "Cannot open $path:$!";
71   while (<OPH>)
72    {  
73     doconst($1) if (/#define\s+(\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/);
74    }  
75   close(OPH);
76  }
77 close(OUT);
78                
79 sub doconst
80 {
81  my $sym = shift;
82  my $l = length($sym);
83  print OUT <<"END";
84  newCONSTSUB(stash,"$sym",newSViv($sym)); 
85  av_push(export_ok,newSVpvn("$sym",$l));
86 END
87 }