X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=vms%2Fgen_shrfls.pl;h=8e89348ae4c42459c5fd7f29e891803f420c6002;hb=13e080377416312a935982b1a5c15673e6ce0d66;hp=807ce59a90c8d14bfd9b15ad7bc6e28dd965b101;hpb=61bb59065bf1b12edab39b124e7373fb357e2d73;p=p5sagit%2Fp5-mst-13.2.git diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl index 807ce59..8e89348 100644 --- a/vms/gen_shrfls.pl +++ b/vms/gen_shrfls.pl @@ -33,13 +33,13 @@ # library has everything old one did # (i.e. /Define=DEBUGGING,EMBED,MULTIPLICITY)? # -# Author: Charles Bailey bailey@genetics.upenn.edu +# Author: Charles Bailey bailey@newman.upenn.edu require 5.000; $debug = $ENV{'GEN_SHRFLS_DEBUG'}; -print "gen_shrfls.pl Rev. 03-Nov-1997\n" if $debug; +print "gen_shrfls.pl Rev. 14-Dec-1997\n" if $debug; if ($ARGV[0] eq '-f') { open(INP,$ARGV[1]) or die "Can't read input file $ARGV[1]: $!\n"; @@ -64,10 +64,23 @@ $docc = ($cc_cmd !~ /^~~/); print "\$docc = $docc\n" if $debug; if ($docc) { + if (-f 'perl.h') { $dir = '[]'; } + elsif (-f '[-]perl.h') { $dir = '[-]'; } + else { die "$0: Can't find perl.h\n"; } + + # Go see if debugging is enabled in config.h + $config = $dir . "config.h"; + open CONFIG, "< $config"; + while() { + $debugging_enabled++ if /define\s+DEBUGGING/; + $use_mymalloc++ if /define\s+MYMALLOC/; + } + # put quotes back onto defines - they were removed by DCL on the way in if (($prefix,$defines,$suffix) = ($cc_cmd =~ m#(.*)/Define=(.*?)([/\s].*)#i)) { $defines =~ s/^\((.*)\)$/$1/; + $debugging_enabled ||= $defines =~ /\bDEBUGGING\b/; @defines = split(/,/,$defines); $cc_cmd = "$prefix/Define=(" . join(',',grep($_ = "\"$_\"",@defines)) . ')' . $suffix; @@ -85,10 +98,8 @@ if ($docc) { or 0; # again, make debug output nice print "\$isgcc: $isgcc\n" if $debug; print "\$isvaxc: $isvaxc\n" if $debug; + print "\$debugging_enabled: $debugging_enabled\n" if $debug; - if (-f 'perl.h') { $dir = '[]'; } - elsif (-f '[-]perl.h') { $dir = '[-]'; } - else { die "$0: Can't find perl.h\n"; } } else { ($junk,$junk,$cpp_file,$cc_cmd) = split(/~~/,$cc_cmd,4); @@ -96,8 +107,10 @@ else { or 0; # for nice debug output $isvaxc = (!$isgcc && $cc_cmd !~ /standard=/i) or 0; # again, for nice debug output + $debugging_enabled = $cc_cmd =~ /\bdebugging\b/i; print "\$isgcc: \\$isgcc\\\n" if $debug; print "\$isvaxc: \\$isvaxc\\\n" if $debug; + print "\$debugging_enabled: \\$debugging_enabled\\\n" if $debug; print "Not running cc, preprocesor output in \\$cpp_file\\\n" if $debug; } @@ -184,6 +197,14 @@ sub scan_func { } } +# Go add some right up front if we need 'em +if ($use_mymalloc) { + $fcns{'Perl_malloc'}++; + $fcns{'Perl_calloc'}++; + $fcns{'Perl_realloc'}++; + $fcns{'Perl_mfree'}++; +} + $used_expectation_enum = $used_opcode_enum = 0; # avoid warnings if ($docc) { open(CPP,"${cc_cmd}/NoObj/PreProc=Sys\$Output ${dir}perl.h|") @@ -192,62 +213,75 @@ if ($docc) { else { open(CPP,"$cpp_file") or die "$0: Can't read preprocessed file $cpp_file: $!\n"; } +%checkh = map { $_,1 } qw( thread bytecode byterun proto ); +$ckfunc = 0; LINE: while () { while (/^#.*vmsish\.h/i .. /^#.*perl\.h/i) { while (/__VMS_PROTOTYPES__/i .. /__VMS_SEPYTOTORP__/i) { print "vms_proto>> $_" if $debug > 2; if (/^\s*EXT/) { &scan_var($_); } else { &scan_func($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } print "vmsish.h>> $_" if $debug > 2; if (/^\s*EXT/) { &scan_var($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } while (/^#.*opcode\.h/i .. /^#.*perl\.h/i) { print "opcode.h>> $_" if $debug > 2; if (/^OP \*\s/) { &scan_func($_); } if (/^\s*EXT/) { &scan_var($_); } if (/^\s+OP_/) { &scan_enum($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } - while (/^typedef enum/ .. /^\}/) { + while (/^typedef enum/ .. /^\s*\}/) { print "global enum>> $_" if $debug > 2; &scan_enum($_); - last LINE unless $_ = ; + last LINE unless defined($_ = ); } - while (/^#.*thread\.h/i .. /^#.*perl\.h/i) { - print "thread.h>> $_" if $debug > 2; - if (/\s*^EXT/) { &scan_var($_); } - else { &scan_func($_); } - last LINE unless $_ = ; + # Check for transition to new header file + if (/^# \d+ "(\S+)"/) { + my $spec = $1; + # Pull name from library module or header filespec + $spec =~ /^(\w+)$/ or $spec =~ /(\w+)\.h/i; + my $name = lc $1; + $ckfunc = exists $checkh{$name} ? 1 : 0; + $scanname = $name if $ckfunc; + print "Header file transition: ckfunc = $ckfunc for $name.h\n" if $debug > 1; } - while (/^#.*proto\.h/i .. /^#.*perl\.h/i) { - print "proto.h>> $_" if $debug > 2; + if ($ckfunc) { + print "$scanname>> $_" if $debug > 2; if (/\s*^EXT/) { &scan_var($_); } - else { &scan_func($_); } - last LINE unless $_ = ; + else { &scan_func($_); } + } + else { + print $_ if $debug > 3 && ($debug > 5 || length($_)); + if (/^\s*EXT/) { &scan_var($_); } } - print $_ if $debug > 3 && ($debug > 5 || length($_)); - if (/^\s*EXT/) { &scan_var($_); } } close CPP; - +# This was: # Kluge to determine whether we need to add EMBED prefix to # symbols read from local list. vmsreaddirversions() is a VMS- # specific function whose Perl_ prefix is added in vmsish.h # if EMBED is #defined. -$embed = exists($fcns{'Perl_vmsreaddirversions'}) ? 'Perl_' : ''; +# +# but now we always define EMBED, so it's not a big deal any more while () { next if /^#/; s/\s+#.*\n//; next if /^\s*$/; ($key,$array) = split('=',$_); - $key = "$embed$key"; + if ($array eq 'vars') { + $key = "PL_$key"; + } else { + $key = "Perl_$key"; + } print "Adding $key to \%$array list\n" if $debug > 1; ${$array}{$key}++; } +if ($debugging_enabled and $isgcc) { $vars{'colors'}++ } foreach (split /\s+/, $extnames) { my($pkgname) = $_; $pkgname =~ s/::/__/g; @@ -378,9 +412,8 @@ if ($ENV{PERLSHR_USE_GSMATCH}) { my $major = int($] * 1000) & 0xFF; # range 0..255 my $minor = int(($] * 1000 - $major) * 100 + 0.5) & 0xFF; # range 0..255 print OPTBLD "GSMATCH=LEQUAL,$major,$minor\n"; - foreach (@symfiles) { - print OPTBLD "CLUSTER=\$\$TRANSFER_VECTOR,,,$_$objsuffix\n"; - } + print OPTBLD 'CLUSTER=$$TRANSFER_VECTOR,,', + map(",$_$objsuffix",@symfiles), "\n"; } elsif (@symfiles) { $incstr .= ',' . join(',',@symfiles); } # Include object modules and RTLs in options file @@ -398,28 +431,6 @@ exec "\$ \@$drvrname" if $isvax; __END__ # Oddball cases, so we can keep the perl.h scan above simple -rcsid=vars # declared in perl.c -regarglen=vars # declared in regcomp.h -regdummy=vars # declared in regcomp.h regkind=vars # declared in regcomp.h simple=vars # declared in regcomp.h varies=vars # declared in regcomp.h -watchaddr=vars # declared in run.c -watchok=vars # declared in run.c -yychar=vars # generated by byacc in perly.c -yycheck=vars # generated by byacc in perly.c -yydebug=vars # generated by byacc in perly.c -yydefred=vars # generated by byacc in perly.c -yydgoto=vars # generated by byacc in perly.c -yyerrflag=vars # generated by byacc in perly.c -yygindex=vars # generated by byacc in perly.c -yylen=vars # generated by byacc in perly.c -yylhs=vars # generated by byacc in perly.c -yylval=vars # generated by byacc in perly.c -yyname=vars # generated by byacc in perly.c -yynerrs=vars # generated by byacc in perly.c -yyrindex=vars # generated by byacc in perly.c -yyrule=vars # generated by byacc in perly.c -yysindex=vars # generated by byacc in perly.c -yytable=vars # generated by byacc in perly.c -yyval=vars # generated by byacc in perly.c