This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use makedef.pl on VMS to feed vms/gen_shrfls.pl.
authorCraig A. Berry <craigberry@mac.com>
Fri, 8 Jul 2011 19:28:05 +0000 (14:28 -0500)
committerCraig A. Berry <craigberry@mac.com>
Fri, 8 Jul 2011 22:31:21 +0000 (17:31 -0500)
This replaces the latter's long-standing method of running
perl.h through the C preprocessor and parsing the output in
order to see what symbols need exporting in the linker options
file.

vms/gen_shrfls.pl remains part of the process for now since it
knows various things about generating linker options files on
different architectures and other VMS-specific gotchas such as
symbol case sensitivity and long symbol shortening.  These
features could be added to makedef.pl but are unlike anything
currently done there.

This should slightly increase the chances that folks can modify
the API without breaking the build, and it should make us a bit
stricter about only exporting the symbols we intend to, but the
result is still far from optimal.  It replaces one set of
heuristics and manually-maintained inclusion and exclusion lists
with different heuristics and even longer lists of inclusions and
exclusions.

makedef.pl
vms/descrip_mms.template
vms/gen_shrfls.pl

index 94a0e1a..4e9dfb2 100644 (file)
@@ -4,6 +4,7 @@
 #
 # Needed by WIN32 and OS/2 for creating perl.dll,
 # and by AIX for creating libperl.a when -Dusershrplib is in effect,
+# and by VMS for creating perlshr.exe.
 #
 # Reads from information stored in
 #
@@ -29,7 +30,7 @@
 #    perldll.def Windows
 #    perl.exp    AIX
 #    perl.imp    NetWare
-
+#    makedef.lis VMS
 
 BEGIN { unshift @INC, "lib" }
 use Config;
@@ -57,7 +58,7 @@ while (@ARGV) {
     }
 }
 
-my @PLATFORM = qw(aix win32 wince os2 netware);
+my @PLATFORM = qw(aix win32 wince os2 netware vms);
 my %PLATFORM;
 @PLATFORM{@PLATFORM} = ();
 
@@ -131,6 +132,10 @@ unless ($PLATFORM eq 'win32' || $PLATFORM eq 'wince' || $PLATFORM eq 'netware')
            $ARCHNAME =    $1 if /^archname='(.+)'$/;
            $PATCHLEVEL =  $1 if /^perl_patchlevel='(.+)'$/;
        }
+       if ($PLATFORM eq 'vms') {
+           $define{DEBUGGING} = 1 if /^usedebugging_perl='Y'$/;
+           $define{UNLINK_ALL_VERSIONS} = 1 if /^d_unlink_all_versions='define'$/;
+       }
     }
     close(CFG);
 }
@@ -319,7 +324,7 @@ if ($PLATFORM eq 'win32') {
                     Perl_my_sprintf
                     )];
 }
-else {
+elsif ($PLATFORM ne 'vms') {
     skip_symbols [qw(
                     Perl_do_spawn
                     Perl_do_spawn_nowait
@@ -582,6 +587,116 @@ elsif ($PLATFORM eq 'netware') {
                        PerlIO_perlio
                        )];
 }
+elsif ($PLATFORM eq 'vms') {
+    emit_symbols([qw(
+                       boot_DynaLoader
+                       Perl_cando
+                       Perl_cando_by_name
+                       Perl_closedir
+                       Perl_csighandler_init
+                       Perl_do_rmdir
+                       Perl_fileify_dirspec
+                       Perl_fileify_dirspec_ts
+                       Perl_fileify_dirspec_utf8
+                       Perl_fileify_dirspec_utf8_ts
+                       Perl_flex_fstat
+                       Perl_flex_lstat
+                       Perl_flex_stat
+                       Perl_kill_file
+                       Perl_my_chdir
+                       Perl_my_chmod
+                       Perl_my_crypt
+                       Perl_my_endpwent
+                       Perl_my_fclose
+                       Perl_my_fdopen
+                       Perl_my_fgetname
+                       Perl_my_flush
+                       Perl_my_fwrite
+                       Perl_my_gconvert
+                       Perl_my_getenv
+                       Perl_my_getenv_len
+                       Perl_my_getlogin
+                       Perl_my_getpwnam
+                       Perl_my_getpwuid
+                       Perl_my_gmtime
+                       Perl_my_kill
+                       Perl_my_localtime
+                       Perl_my_mkdir
+                       Perl_my_sigaction 
+                       Perl_my_symlink
+                       Perl_my_time
+                       Perl_my_tmpfile
+                       Perl_my_trnlnm
+                       Perl_my_utime
+                       Perl_my_waitpid
+                       Perl_opendir
+                       Perl_pathify_dirspec
+                       Perl_pathify_dirspec_ts
+                       Perl_pathify_dirspec_utf8
+                       Perl_pathify_dirspec_utf8_ts
+                       Perl_readdir
+                       Perl_readdir_r
+                       Perl_rename
+                       Perl_rmscopy
+                       Perl_rmsexpand
+                       Perl_rmsexpand_ts
+                       Perl_rmsexpand_utf8
+                       Perl_rmsexpand_utf8_ts
+                       Perl_seekdir
+                       Perl_sig_to_vmscondition
+                       Perl_telldir
+                       Perl_tounixpath
+                       Perl_tounixpath_ts
+                       Perl_tounixpath_utf8
+                       Perl_tounixpath_utf8_ts
+                       Perl_tounixspec
+                       Perl_tounixspec_ts
+                       Perl_tounixspec_utf8
+                       Perl_tounixspec_utf8_ts
+                       Perl_tovmspath
+                       Perl_tovmspath_ts
+                       Perl_tovmspath_utf8
+                       Perl_tovmspath_utf8_ts
+                       Perl_tovmsspec
+                       Perl_tovmsspec_ts
+                       Perl_tovmsspec_utf8
+                       Perl_tovmsspec_utf8_ts
+                       Perl_trim_unixpath
+                       Perl_vms_case_tolerant
+                       Perl_vms_do_aexec
+                       Perl_vms_do_exec
+                       Perl_vms_image_init
+                       Perl_vms_realpath
+                       Perl_vmssetenv
+                       Perl_vmssetuserlnm
+                       Perl_vmstrnenv
+                       PerlIO_openn
+                    )]);
+    skip_symbols([qw(
+                       PL_statusvalue_posix
+                       PL_cryptseen
+                       PL_opsave
+                       Perl_GetVars
+                       Perl_dump_fds
+                       Perl_my_bzero
+                       Perl_my_bcopy
+                       Perl_my_chsize
+                       Perl_my_htonl
+                       Perl_my_memcmp
+                       Perl_my_memset
+                       Perl_my_ntohl
+                       Perl_my_sprintf
+                       Perl_my_swap
+                    )]);
+    skip_symbols([qw(
+                    Perl_signbit
+                    )])
+       if $define{'HAS_SIGNBIT'};
+    skip_symbols([qw(
+                    Perl_unlnk
+                    )])
+       unless $define{'UNLINK_ALL_VERSIONS'};
+}
 
 unless ($define{'DEBUGGING'}) {
     skip_symbols [qw(
@@ -1614,7 +1729,7 @@ sub output_symbol {
          $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord
          if $exportperlmalloc and exists $exportperlmalloc{$symbol};
     }
-    elsif ($PLATFORM eq 'aix') {
+    elsif ($PLATFORM eq 'aix' || $PLATFORM eq 'vms') {
        print "$symbol\n";
     }
        elsif ($PLATFORM eq 'netware') {
index 41068fd..69f7740 100644 (file)
@@ -98,17 +98,11 @@ ARCHDIR =  [.lib.$(ARCHNAME).$(PERL_VERSION)]
 ARCHCORE = [.lib.$(ARCHNAME).$(PERL_VERSION).CORE]
 ARCHAUTO = [.lib.$(ARCHNAME).$(PERL_VERSION).auto]
 
-#: Backwards compatibility
-.ifdef DECC_PIPES_BROKEN
-PIPES_BROKEN = 1
-.endif
-
 #: >>>>>Compiler-specific options <<<<<
 .ifdef GNUC
 .first
        @ If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS]
 CC = gcc
-PIPES_BROKEN = 1
 # -fno-builtin avoids bug in gcc up to version 2.6.2 which can destroy
 # data when memcpy() is called on large (>64 kB) blocks of memory
 # (fixed in gcc 2.6.3)
@@ -522,28 +516,15 @@ generate_uudmap$(O) : generate_uudmap.c mg_raw.h
 # The following files are built in one go by gen_shrfls.pl:
 #  perlshr_attr.opt, $(DBG)perlshr_bld.opt - VAX and AXP
 #  perlshr_gbl*.mar, perlshr_gbl*$(O) - VAX only
-# The song and dance with gen_shrfls.opt accommodates DCL's 255 character
-# line length limit.
-.ifdef PIPES_BROKEN
-# This is a backup target used only with older versions of the DECCRTL which
-# can't deal with pipes properly.  See ReadMe.VMS for details.
-$(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
-       $(CC) $(CFLAGS)/NoObject/NoList/PreProcess=perl.i perl.h
-       @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "~~NOCC~~perl.i~~$(CC)$(CFLAGS)" >gen_shrfls.opt
-       @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
-       $(MINIPERL) [.vms]gen_shrfls.pl -f gen_shrfls.opt
-       @ Delete/NoLog/NoConfirm perl.i;, gen_shrfls.opt;
-       @ If F$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
-       @ Copy _NLA0: $(DBG)perlshr_xtras.ts
-.else
+# The song and dance with gen_shrfls.opt accommodates DCL's line length limit.
 $(DBG)perlshr_xtras.ts : perl.h config.h vmsish.h proto.h [.vms]gen_shrfls.pl $(MINIPERL_EXE) $(MAKEFILE) $(CRTL)
+       @ $(MINIPERL) makedef.pl "PLATFORM=vms" > makedef.lis
        @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "$(CC)$(CFLAGS)" >gen_shrfls.opt
        @ $(MINIPERL) -e "print join('|',@ARGV);" "$(O)" "$(DBG)" "$(OLB)" "$(EXT)" "$(CRTL)" >>gen_shrfls.opt
        $(MINIPERL) [.vms]gen_shrfls.pl -f gen_shrfls.opt
        @ Delete/NoLog/NoConfirm gen_shrfls.opt;
        @ If F$Search("$(DBG)perlshr_xtras.ts").nes."" Then Delete/NoLog/NoConfirm $(DBG)perlshr_xtras.ts;*
        @ Copy _NLA0: $(DBG)perlshr_xtras.ts
-.endif
 
 $(ARCHDIR)Config.pm : [.lib]Config.pm
        Create/Directory $(ARCHDIR)
index 2cab553..a75073c 100644 (file)
@@ -1,10 +1,10 @@
 # Create global symbol declarations, transfer vector, and
 # linker options files for PerlShr.
 #
+# Processes the output of makedef.pl.
+#
 # Input:
-#    $cflags - command line qualifiers passed to cc when preprocesing perl.h
-#        Note: A rather simple-minded attempt is made to restore quotes to
-#        a /Define clause - use with care.
+#    $cc_cmd - compiler command
 #    $objsuffix - file type (including '.') used for object files.
 #    $libperl - Perl object library.
 #    $extnames - package names for static extensions (used to generate
@@ -40,7 +40,7 @@ require 5.000;
 
 my $debug = $ENV{'GEN_SHRFLS_DEBUG'};
 
-print "gen_shrfls.pl Rev. 30-Sep-2010\n" if $debug;
+print "gen_shrfls.pl Rev. 8-Jul-2011\n" if $debug;
 
 if ($ARGV[0] eq '-f') {
   open(INP,$ARGV[1]) or die "Can't read input file $ARGV[1]: $!\n";
@@ -54,8 +54,7 @@ if ($ARGV[0] eq '-f') {
   print "Read input data | ",join(' | ',@ARGV)," |\n" if $debug > 1;
 }
 
-my $cc_cmd = shift @ARGV;
-my $cpp_file;
+my $cc_cmd = shift @ARGV; # no longer used to run the preprocessor
 
 # Someday, we'll have $GetSyI built into perl . . .
 my $isvax = `\$ Write Sys\$Output \(F\$GetSyI(\"HW_MODEL\") .LE. 1024 .AND. F\$GetSyI(\"HW_MODEL\") .GT. 0\)`;
@@ -74,15 +73,14 @@ my ( $use_threads, $use_mymalloc, $care_about_case, $shorten_symbols,
      $debugging_enabled, $hide_mymalloc, $isgcc, $use_perlio, $dir )
    = ( 0, 0, 0, 0, 0, 0, 0, 0 );
 
-if ($docc) {
-  if (-f 'perl.h') { $dir = '[]'; }
-  elsif (-f '[-]perl.h') { $dir = '[-]'; }
-  else { die "$0: Can't find perl.h\n"; }
+if (-f 'perl.h') { $dir = '[]'; }
+elsif (-f '[-]perl.h') { $dir = '[-]'; }
+else { die "$0: Can't find perl.h\n"; }
 
-  # Go see what is enabled in config.sh
-  my $config = $dir . "config.sh";
-  open CONFIG, '<', $config;
-  while(<CONFIG>) {
+# Go see what is enabled in config.sh
+my $config = $dir . "config.sh";
+open CONFIG, '<', $config;
+while(<CONFIG>) {
     $use_threads++ if /usethreads='(define|yes|true|t|y|1)'/i;
     $use_mymalloc++ if /usemymalloc='(define|yes|true|t|y|1)'/i;
     $care_about_case++ if /d_vms_case_sensitive_symbols='(define|yes|true|t|y|1)'/i;
@@ -91,36 +89,25 @@ if ($docc) {
     $hide_mymalloc++ if /embedmymalloc='(define|yes|true|t|y|1)'/i;
     $isgcc++ if /gccversion='[^']/;
     $use_perlio++ if /useperlio='(define|yes|true|t|y|1)'/i;
-  }
-  close CONFIG;
+}
+close CONFIG;
   
-  # put quotes back onto defines - they were removed by DCL on the way in
-  if (my ($prefix,$defines,$suffix) =
+# put quotes back onto defines - they were removed by DCL on the way in
+if (my ($prefix,$defines,$suffix) =
          ($cc_cmd =~ m#(.*)/Define=(.*?)([/\s].*)#i)) {
-    $defines =~ s/^\((.*)\)$/$1/;
-    $debugging_enabled ||= $defines =~ /\bDEBUGGING\b/;
-    my @defines = split(/,/,$defines);
-    $cc_cmd = "$prefix/Define=(" . join(',',grep($_ = "\"$_\"",@defines)) 
+  $defines =~ s/^\((.*)\)$/$1/;
+  $debugging_enabled ||= $defines =~ /\bDEBUGGING\b/;
+  my @defines = split(/,/,$defines);
+  $cc_cmd = "$prefix/Define=(" . join(',',grep($_ = "\"$_\"",@defines)) 
               . ')' . $suffix;
-  }
-  print "Filtered \$cc_cmd: \\$cc_cmd\\\n" if $debug;
-
-  # check for gcc - if present, we'll need to use MACRO hack to
-  # define global symbols for shared variables
+}
+print "Filtered \$cc_cmd: \\$cc_cmd\\\n" if $debug;
 
-  print "\$isgcc: $isgcc\n" if $debug;
-  print "\$debugging_enabled: $debugging_enabled\n" if $debug;
+# check for gcc - if present, we'll need to use MACRO hack to
+# define global symbols for shared variables
 
-}
-else { 
-  (undef,undef,$cpp_file,$cc_cmd) = split(/~~/,$cc_cmd,4);
-  $isgcc = $cc_cmd =~ /case_hack/i
-           or 0;  # for nice debug output
-  $debugging_enabled = $cc_cmd =~ /\bdebugging\b/i;
-  print "\$isgcc: \\$isgcc\\\n" if $debug;
-  print "\$debugging_enabled: \\$debugging_enabled\\\n" if $debug;
-  print "Not running cc, preprocesor output in \\$cpp_file\\\n" if $debug;
-}
+print "\$isgcc: $isgcc\n" if $debug;
+print "\$debugging_enabled: $debugging_enabled\n" if $debug;
 
 my $objsuffix = shift @ARGV;
 print "\$objsuffix: \\$objsuffix\\\n" if $debug;
@@ -134,143 +121,25 @@ print "\$extnames: \\$extnames\\\n" if $debug;
 my $rtlopt = shift @ARGV;
 print "\$rtlopt: \\$rtlopt\\\n" if $debug;
 
-my (%vars, %cvars, %fcns);
-
-# These are symbols that we should not export.  They may merely
-# look like exportable symbols but aren't, or they may be declared
-# as exportable symbols but there is no function implementing them
-# (possibly due to an alias).
+my (%vars, %fcns);
 
-my %symbols_to_exclude = (
-  '__attribute__format__'  => 1,
-  'main'                   => 1,
-  'Perl_pp_avalues'        => 1,
-  'Perl_pp_reach'          => 1,
-  'Perl_pp_rvalues'        => 1,
-  'Perl_pp_say'            => 1,
-  'Perl_pp_transr'         => 1,
-  'sizeof'                 => 1,
-);
+open my $makedefs, '<', $dir . 'makedef.lis' or die "Unable to open makedef.lis: $!";
 
-sub scan_var {
-  my($line) = @_;
-  my($const) = $line =~ /^EXTCONST/;
-
-  print "\tchecking for global variable\n" if $debug > 1;
-  $line =~ s/\s*EXT/EXT/;
-  $line =~ s/INIT\s*\(.*\)//;
-  $line =~ s/\[.*//;
-  $line =~ s/=.*//;
-  $line =~ s/\W*;?\s*$//;
-  $line =~ s/\W*\)\s*\(.*$//; # closing paren for args stripped in previous stmt
-  print "\tfiltered to \\$line\\\n" if $debug > 1;
-  if ($line =~ /(\w+)$/) {
-    print "\tvar name is \\$1\\" . ($const ? ' (const)' : '') . "\n" if $debug > 1;
-   if ($const) { $cvars{$1}++; }
-   else        { $vars{$1}++;  }
-  }
-}
-
-sub scan_func {
-  my @lines = split /;/, $_[0];
-
-  for my $line (@lines) {
-    print "\tchecking for global routine\n" if $debug > 1;
-    $line =~ s/\b(IV|Off_t|Size_t|SSize_t|void|int)\b//i;
-    if ( $line =~ /(\w+)\s*\(/ ) {
-      print "\troutine name is \\$1\\\n" if $debug > 1;
-      if (exists($symbols_to_exclude{$1})
-          || ($1 eq 'Perl_stashpv_hvname_match' && ! $use_threads)) {
-        print "\tskipped\n" if $debug > 1;
-      }
-      else { $fcns{$1}++ }
-    }
-  }
-}
-
-# 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'}++;
-}
-
-my ($used_expectation_enum, $used_opcode_enum) = (0, 0); # avoid warnings
-if ($docc) {
-  1 while unlink 'perlincludes.tmp';
-  END { 1 while unlink 'perlincludes.tmp'; }  # and clean up after
-
-  open(PERLINC, '>', 'perlincludes.tmp') or die "Couldn't open 'perlincludes.tmp' $!";
-
-  print PERLINC qq/#include "${dir}perl.h"\n/;
-  print PERLINC qq/#include "${dir}perlapi.h"\n/; 
-  print PERLINC qq/#include "${dir}perliol.h"\n/ if $use_perlio;
-  print PERLINC qq/#include "${dir}regcomp.h"\n/;
-
-  close PERLINC;
-  my $preprocess_list = 'perlincludes.tmp';
-
-  open(CPP,"${cc_cmd}/NoObj/PreProc=Sys\$Output $preprocess_list|")
-    or die "$0: Can't preprocess $preprocess_list: $!\n";
-}
-else {
-  open(CPP,"$cpp_file") or die "$0: Can't read preprocessed file $cpp_file: $!\n";
-}
-my %checkh = map { $_,1 } qw( bytecode byterun intrpvar perlapi perlio perliol 
-                           perlvars proto regcomp thrdvar thread );
-my $ckfunc = 0;
-LINE: while (<CPP>) {
-  while (/^#.*vmsish\.h/i .. /^#.*perl\.h/i) {
-    while (/__VMS_PROTOTYPES__/i .. /__VMS_SEPYTOTORP__/i) {
-      print "vms_proto>> $_" if $debug > 2;
-      if (/^\s*EXT(CONST|\s+)/) { &scan_var($_);  }
-      else        { &scan_func($_); }
-      last LINE unless defined($_ = <CPP>);
-    }
-    print "vmsish.h>> $_" if $debug > 2;
-    if (/^\s*EXT(CONST|\s+)/) { &scan_var($_); }
-    last LINE unless defined($_ = <CPP>);
-  }    
-  while (/^#.*opcode\.h/i .. /^#.*perl\.h/i) {
-    print "opcode.h>> $_" if $debug > 2;
-    if (/^OP \*\s/) { &scan_func($_); }
-    if (/^\s*EXT(CONST|\s+)/) { &scan_var($_); }
-    last LINE unless defined($_ = <CPP>);
-  }
-  # Check for transition to new header file
-  my $scanname;
-  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;
-  }
-  if ($ckfunc) {
-    print "$scanname>> $_" if $debug > 2;
-    if (/^\s*EXT(CONST|\s+)/) { &scan_var($_);  }
-    else           { &scan_func($_); }
+while (my $line = <$makedefs>) {
+  chomp $line;
+  # makedef.pl loses distinction between vars and funcs, so
+  # use the start of the name to guess and add specific
+  # exceptions when we know about them.
+  if ($line =~ m/^PL_/
+      || $line eq 'PerlIO_perlio'
+      || $line eq 'PerlIO_pending') {
+    $vars{$line}++;
   }
   else {
-    print $_ if $debug > 3 && ($debug > 5 || length($_));
-    if (/^\s*EXT(CONST|\s+)/) { &scan_var($_); }
+    $fcns{$line}++;
   }
 }
-close CPP;
 
-while (<DATA>) {
-  next if /^#/;
-  s/\s+#.*\n//;
-  next if /^\s*$/;
-  my ($key,$array) = split('=',$_);
-  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) = $_;
@@ -322,7 +191,7 @@ unless ($isgcc) {
 }
 print OPTBLD "case_sensitive=yes\n" if $care_about_case;
 my $count = 0;
-foreach my $var (sort (keys %vars,keys %cvars)) {
+foreach my $var (sort (keys %vars)) {
   if ($isvax) { print OPTBLD "UNIVERSAL=$var\n"; }
   else { print OPTBLD "SYMBOL_VECTOR=($var=DATA)\n"; }
   # This hack brought to you by the lack of a globaldef in gcc.
@@ -358,9 +227,11 @@ if ($isvax) {
 open(OPTATTR, '>', "${dir}perlshr_attr.opt")
   or die "$0: Can't write to ${dir}perlshr_attr.opt: $!\n";
 if ($isgcc) {
-  foreach my $var (sort keys %cvars) {
-    print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,NOWRT,SHR\n";
-  }
+# TODO -- lost ability to distinguish constant vars from others when
+# we switched to using makedef.pl for input.
+#  foreach my $var (sort keys %cvars) {
+#    print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,NOWRT,SHR\n";
+#  }
   foreach my $var (sort keys %vars) {
     print OPTATTR "PSECT_ATTR=${var},PIC,OVR,RD,NOEXE,WRT,NOSHR\n";
   }
@@ -439,7 +310,3 @@ exec "\$ \@$drvrname" if $isvax;
 
 
 __END__
-
-# Oddball cases, so we can keep the perl.h scan above simple
-#Foo=vars    # uncommented becomes PL_Foo
-#Bar=funcs   # uncommented becomes Perl_Bar