Probably better to make PAD_FAKELEX_ANON and PAD_FAKELEX_MULTI special
[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_ISXSUB
27                       CVf_UNIQUE
28                       CVf_WEAKOUTSIDE
29                       GVf_IMPORTED_AV
30                       GVf_IMPORTED_CV
31                       GVf_IMPORTED_HV
32                       GVf_IMPORTED_SV
33                       HEf_SVKEY
34                       SVTYPEMASK
35                       SVf_FAKE
36                       SVf_IOK
37                       SVf_IVisUV
38                       SVf_NOK
39                       SVf_POK
40                       SVf_READONLY
41                       SVf_ROK
42                       SVp_IOK
43                       SVp_NOK
44                       SVp_POK
45                       SVpad_OUR
46                       SVs_RMG
47                       SVs_SMG
48                       SVt_PVGV
49                       SVt_PVHV
50                       PAD_FAKELEX_ANON
51                       PAD_FAKELEX_MULTI
52                       ))
53  {
54   doconst($const);
55  }
56 foreach my $file (qw(op.h cop.h))
57  {
58   my $path = $^O eq 'MacOS' ? ":::$file" : "../../$file";
59   open(OPH,"$path") || die "Cannot open $path:$!";
60   while (<OPH>)
61    {  
62     doconst($1) if (/#define\s+(\w+)\s+([\(\)\|\dx]+)\s*(?:$|\/\*)/);
63    }  
64   close(OPH);
65  }
66 close(OUT);
67                
68 sub doconst
69 {
70  my $sym = shift;
71  my $l = length($sym);
72  print OUT <<"END";
73  newCONSTSUB(stash,"$sym",newSViv($sym)); 
74  av_push(export_ok,newSVpvn("$sym",$l));
75 END
76 }