VMS updates (direct)
Charles Bailey [Thu, 12 Mar 1998 16:02:29 +0000 (11:02 -0500)]
[Needed manual tweaks on vms/config.vms since it clashed with other
patches. I may have got it wrong.]

p4raw-id: //depot/perl@817

20 files changed:
lib/ExtUtils/Liblist.pm
lib/ExtUtils/MM_VMS.pm
lib/ExtUtils/Mksymlists.pm
perl.h
pp.c
pp_hot.c
regcomp.c
regcomp.h
utils/perldoc.PL
vms/config.vms
vms/descrip.mms
vms/ext/Stdio/Stdio.pm
vms/ext/filespec.t
vms/fndvers.com
vms/gen_shrfls.pl
vms/genconfig.pl
vms/sockadapt.h
vms/test.com
vms/vms.c
vms/vmsish.h

index aebb057..5c35dc7 100644 (file)
@@ -261,9 +261,38 @@ sub _win32_ext {
 
 sub _vms_ext {
   my($self, $potential_libs,$verbose) = @_;
-  return ('', '', '', '') unless $potential_libs;
+  my(@crtls,$crtlstr);
+  my($dbgqual) = $self->{OPTIMIZE} || $Config{'optimize'} ||
+                 $self->{CCFLAS}   || $Config{'ccflags'};
+  @crtls = ( ($dbgqual =~ m-/Debug-i ? $Config{'dbgprefix'} : '')
+              . 'PerlShr/Share' );
+  push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libs'});
+  push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libc'});
+  # In general, we pass through the basic libraries from %Config unchanged.
+  # The one exception is that if we're building in the Perl source tree, and
+  # a library spec could be resolved via a logical name, we go to some trouble
+  # to insure that the copy in the local tree is used, rather than one to
+  # which a system-wide logical may point.
+  if ($self->{PERL_SRC}) {
+    my($lib,$locspec,$type);
+    foreach $lib (@crtls) { 
+      if (($locspec,$type) = $lib =~ m-^([\w$\-]+)(/\w+)?- and $locspec =~ /perl/i) {
+        if    (lc $type eq '/share')   { $locspec .= $Config{'exe_ext'}; }
+        elsif (lc $type eq '/library') { $locspec .= $Config{'lib_ext'}; }
+        else                           { $locspec .= $Config{'obj_ext'}; }
+        $locspec = $self->catfile($self->{PERL_SRC},$locspec);
+        $lib = "$locspec$type" if -e $locspec;
+      }
+    }
+  }
+  $crtlstr = @crtls ? join(' ',@crtls) : '';
 
-  my(@dirs,@libs,$dir,$lib,%sh,%olb,%obj);
+  unless ($potential_libs) {
+    warn "Result:\n\tEXTRALIBS: \n\tLDLOADLIBS: $crtlstr\n" if $verbose;
+    return ('', '', $crtlstr, '');
+  }
+
+  my(@dirs,@libs,$dir,$lib,%sh,%olb,%obj,$ldlib);
   my $cwd = cwd();
   my($so,$lib_ext,$obj_ext) = @Config{'so','lib_ext','obj_ext'};
   # List of common Unix library names and there VMS equivalents
@@ -388,8 +417,10 @@ sub _vms_ext {
   push(@libs, map { "$_/Library" } sort keys %olb);
   push(@libs, map { "$_/Share"   } sort keys %sh);
   $lib = join(' ',@libs);
-  warn "Result: $lib\n" if $verbose;
-  wantarray ? ($lib, '', $lib, '') : $lib;
+
+  $ldlib = $crtlstr ? "$lib $crtlstr" : $lib;
+  warn "Result:\n\tEXTRALIBS: $lib\n\tLDLOADLIBS: $ldlib\n" if $verbose;
+  wantarray ? ($lib, '', $ldlib, '') : $lib;
 }
 
 1;
@@ -499,8 +530,10 @@ these directives, rather than elements used on the linker command line.
 
 =item *
 
-LDLOADLIBS and EXTRALIBS are always identical under VMS, and BSLOADLIBS
-and LD_RIN_PATH are always empty.
+LDLOADLIBS contains both the libraries found based on C<$potential_libs> and
+the CRTLs, if any, specified in Config.pm.  EXTRALIBS contains just those
+libraries found based on C<$potential_libs>.  BSLOADLIBS and LD_RUN_PATH
+are always empty.
 
 =back
 
index 954f612..87c27df 100644 (file)
@@ -795,18 +795,41 @@ instance of this qualifier on the command line.
 
 sub cflags {
     my($self,$libperl) = @_;
-    my($quals) = $Config{'ccflags'};
+    my($quals) = $self->{CCFLAGS} || $Config{'ccflags'};
+    my($definestr,$undefstr,$flagoptstr) = ('','','');
+    my($incstr) = '/Include=($(PERL_INC)';
     my($name,$sys,@m);
-    my($optimize) = '/Optimize';
 
     ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;
     print STDOUT "Unix shell script ".$Config{"$self->{'BASEEXT'}_cflags"}.
          " required to modify CC command for $self->{'BASEEXT'}\n"
     if ($Config{$name});
 
+    if ($quals =~ / -[DIUOg]/) {
+       while ($quals =~ / -([Og])(\d*)\b/) {
+           my($type,$lvl) = ($1,$2);
+           $quals =~ s/ -$type$lvl\b\s*//;
+           if ($type eq 'g') { $flagoptstr = '/NoOptimize'; }
+           else { $flagoptstr = '/Optimize' . (defined($lvl) ? "=$lvl" : ''); }
+       }
+       while ($quals =~ / -([DIU])(\S+)/) {
+           my($type,$def) = ($1,$2);
+           $quals =~ s/ -$type$def\s*//;
+           $def =~ s/"/""/g;
+           if    ($type eq 'D') { $definestr .= qq["$def",]; }
+           elsif ($type eq 'I') { $flagincstr .= ',' . $self->fixpath($def,1); }
+           else                 { $undefstr  .= qq["$def",]; }
+       }
+    }
+    if (length $quals and $quals !~ m!/!) {
+       warn "MM_VMS: Ignoring unrecognized CCFLAGS elements \"$quals\"\n";
+       $quals = '';
+    }
+    if (length $definestr) { chop($definestr); $quals .= "/Define=($definestr)"; }
+    if (length $undefstr)  { chop($undefstr);  $quals .= "/Undef=($undefstr)";   }
     # Deal with $self->{DEFINE} here since some C compilers pay attention
     # to only one /Define clause on command line, so we have to
-    # conflate the ones from $Config{'cc'} and $self->{DEFINE}
+    # conflate the ones from $Config{'ccflags'} and $self->{DEFINE}
     if ($quals =~ m:(.*)/define=\(?([^\(\/\)\s]+)\)?(.*)?:i) {
        $quals = "$1/Define=($2," . ($self->{DEFINE} ? "$self->{DEFINE}," : '') .
                 "\$(DEFINE_VERSION),\$(XS_DEFINE_VERSION))$3";
@@ -817,16 +840,18 @@ sub cflags {
     }
 
     $libperl or $libperl = $self->{LIBPERL_A} || "libperl.olb";
+    if ($libperl =~ s/^$Config{'dbgprefix'}//) { $libperl =~ s/perl([^Dd]*)\./perld$1./; }
     if ($libperl =~ /libperl(\w+)\./i) {
-        my($type) = uc $1;
-        my(%map) = ( 'D'  => 'DEBUGGING', 'E' => 'EMBED', 'M' => 'MULTIPLICITY',
-                     'DE' => 'DEBUGGING,EMBED', 'DM' => 'DEBUGGING,MULTIPLICITY',
-                     'EM' => 'EMBED,MULTIPLICITY', 'DEM' => 'DEBUGGING,EMBED,MULTIPLICITY' );
-        $quals =~ s:/define=\(([^\)]+)\):/Define=($1,$map{$type}):i
+       my($type) = uc $1;
+       my(%map) = ( 'D'  => 'DEBUGGING', 'E' => 'EMBED', 'M' => 'MULTIPLICITY',
+                    'DE' => 'DEBUGGING,EMBED', 'DM' => 'DEBUGGING,MULTIPLICITY',
+                    'EM' => 'EMBED,MULTIPLICITY', 'DEM' => 'DEBUGGING,EMBED,MULTIPLICITY' );
+       my($add) = join(',', grep { $quals !~ /\b$_\b/ } split(/,/,$map{$type}));
+       $quals =~ s:/define=\(([^\)]+)\):/Define=($1,$add):i if $add;
+       $self->{PERLTYPE} ||= $type;
     }
 
     # Likewise with $self->{INC} and /Include
-    my($incstr) = '/Include=($(PERL_INC)';
     if ($self->{'INC'}) {
        my(@includes) = split(/\s+/,$self->{INC});
        foreach (@includes) {
@@ -835,14 +860,24 @@ sub cflags {
        }
     }
     $quals .= "$incstr)";
+    $self->{CCFLAGS} = $quals;
 
-    $optimize = '/Debug/NoOptimize'
-       if ($self->{OPTIMIZE} =~ /-g/ or $self->{OPTIMIZE} =~ m!/Debug!i);
+    $self->{OPTIMIZE} ||= $flagoptstr || $Config{'optimize'};
+    if ($self->{OPTIMIZE} !~ m!/!) {
+       if    ($self->{OPTIMIZE} =~ m!\b-g\b!) { $self->{OPTIMIZE} = '/Debug/NoOptimize' }
+       elsif ($self->{OPTIMIZE} =~ /-O(\d*)/) {
+           $self->{OPTIMIZE} = '/Optimize' . (defined($1) ? "=$1" : '');
+       }
+       else {
+           warn "MM_VMS: Can't parse OPTIMIZE \"$self->{OPTIMIZE}\"; using default\n" if length $self->{OPTIMIZE};
+           $self->{OPTIMIZE} = '/Optimize';
+       }
+    }
 
     return $self->{CFLAGS} = qq{
-CCFLAGS = $quals
-OPTIMIZE = $optimize
-PERLTYPE =
+CCFLAGS = $self->{CCFLAGS}
+OPTIMIZE = $self->{OPTIMIZE}
+PERLTYPE = $self->{PERLTYPE}
 SPLIT =
 LARGE =
 };
@@ -1274,30 +1309,13 @@ sub dlsyms {
 
     my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};
     my($vars)  = $attribs{DL_VARS}  || $self->{DL_VARS}  || [];
-    my($srcdir)= $attribs{PERL_SRC} || $self->{PERL_SRC} || '';
     my(@m);
 
     unless ($self->{SKIPHASH}{'dynamic'}) {
        push(@m,'
-dynamic :: rtls.opt $(INST_ARCHAUTODIR)$(BASEEXT).opt
+dynamic :: $(INST_ARCHAUTODIR)$(BASEEXT).opt
        $(NOECHO) $(NOOP)
 ');
-       if ($srcdir) {
-          my($popt) = $self->catfile($srcdir,'perlshr.opt');
-          my($lopt) = $self->catfile($srcdir,'crtl.opt');
-          push(@m,"# Depend on \$(BASEEXT).opt to insure we copy here *after* autogenerating (wrong) rtls.opt in Mksymlists
-rtls.opt : $popt $lopt \$(BASEEXT).opt
-       Copy/Log $popt Sys\$Disk:[]rtls.opt
-       Append/Log $lopt Sys\$Disk:[]rtls.opt
-");
-       }
-       else {
-           push(@m,'
-# rtls.opt is built in the same step as $(BASEEXT).opt
-rtls.opt : $(BASEEXT).opt
-       $(TOUCH) $(MMS$TARGET)
-');
-       }
     }
 
     push(@m,'
@@ -1355,10 +1373,10 @@ INST_DYNAMIC_DEP = $inst_dynamic_dep
 
 ";
     push @m, '
-$(INST_DYNAMIC) : $(INST_STATIC) $(PERL_INC)perlshr_attr.opt rtls.opt $(INST_ARCHAUTODIR).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
+$(INST_DYNAMIC) : $(INST_STATIC) $(PERL_INC)perlshr_attr.opt $(INST_ARCHAUTODIR).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
        $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
        $(NOECHO) If F$TrnLNm("PerlShr").eqs."" Then Define/NoLog/User PerlShr Sys$Share:PerlShr.',$Config{'dlext'},'
-       Link $(LDFLAGS) /Shareable=$(MMS$TARGET)$(OTHERLDFLAGS) $(BASEEXT).opt/Option,rtls.opt/Option,$(PERL_INC)perlshr_attr.opt/Option
+       Link $(LDFLAGS) /Shareable=$(MMS$TARGET)$(OTHERLDFLAGS) $(BASEEXT).opt/Option,$(PERL_INC)perlshr_attr.opt/Option
 ';
 
     push @m, $self->dir_target('$(INST_ARCHAUTODIR)');
index 6bd49f2..4ec091d 100644 (file)
@@ -176,13 +176,6 @@ sub _write_vms {
     }
     close OPT;
 
-    # Options file specifying RTLs to which this extension must be linked.
-    # Eventually, the list of libraries will be supplied by a working
-    # extliblist routine.
-    open OPT,'>rtls.opt';
-    print OPT "PerlShr/Share\n";
-    foreach $rtl (split(/\s+/,$Config::Config{'libs'})) { print OPT "$rtl\n"; }
-    close OPT;
 }
 
 1;
diff --git a/perl.h b/perl.h
index 532847b..cd0f2bb 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -117,8 +117,7 @@ register struct op *op asm(stringify(OP_IN_REGISTER));
 # define STANDARD_C 1
 #endif
 
-#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) \
-       || defined(__DGUX)
+#if defined(__cplusplus) || defined(WIN32) || defined(__sgi) || defined(OS2) || defined(__DGUX)
 # define DONT_DECLARE_STD 1
 #endif
 
diff --git a/pp.c b/pp.c
index ac297ee..9a3b901 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -2834,11 +2834,11 @@ mul128(SV *sv, U8 m)
   U32             i = 0;
 
   if (!strnEQ(s, "0000", 4)) {  /* need to grow sv */
-    SV             *New = newSVpv("0000000000", 10);
+    SV             *tmpNew = newSVpv("0000000000", 10);
 
-    sv_catsv(New, sv);
+    sv_catsv(tmpNew, sv);
     SvREFCNT_dec(sv);          /* free old sv */
-    sv = New;
+    sv = tmpNew;
     s = SvPV(sv, len);
   }
   t = s + len - 1;
index 4529f8e..0a89710 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -1077,7 +1077,10 @@ do_readline(void)
                       }
                    }
                    if ((tmpfp = PerlIO_open(tmpfnam,"w+","fop=dlt")) != NULL) {
-                       ok = ((wilddsc.dsc$a_pointer = tovmsspec(SvPVX(tmpglob),vmsspec)) != NULL);
+                       Stat_t st;
+                       if (!Stat(SvPVX(tmpglob),&st) && S_ISDIR(st.st_mode))
+                         ok = ((wilddsc.dsc$a_pointer = tovmspath(SvPVX(tmpglob),vmsspec)) != NULL);
+                       else ok = ((wilddsc.dsc$a_pointer = tovmsspec(SvPVX(tmpglob),vmsspec)) != NULL);
                        if (ok) wilddsc.dsc$w_length = (unsigned short int) strlen(wilddsc.dsc$a_pointer);
                        while (ok && ((sts = lib$find_file(&wilddsc,&rsdsc,&cxt,
                                                    &dfltdsc,NULL,NULL,NULL))&1)) {
index 11358db..3581a5d 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -140,7 +140,6 @@ static I32 extralen;
 
 #ifdef DEBUGGING
 static int colorset;
-char *colors[4];
 #endif 
 
 /* Length of a variant. */
@@ -171,8 +170,13 @@ static scan_data_t zero_scan_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 #define SF_FIX_BEFORE_EOL      (SF_FIX_BEFORE_SEOL|SF_FIX_BEFORE_MEOL)
 #define SF_FL_BEFORE_EOL       (SF_FL_BEFORE_SEOL|SF_FL_BEFORE_MEOL)
 
-#define SF_FIX_SHIFT_EOL       (+2)
-#define SF_FL_SHIFT_EOL                (+4)
+#ifdef NO_UNARY_PLUS
+#  define SF_FIX_SHIFT_EOL     (0+2)
+#  define SF_FL_SHIFT_EOL              (0+4)
+#else
+#  define SF_FIX_SHIFT_EOL     (+2)
+#  define SF_FL_SHIFT_EOL              (+4)
+#endif
 
 #define SF_FIX_BEFORE_SEOL     (SF_BEFORE_SEOL << SF_FIX_SHIFT_EOL)
 #define SF_FIX_BEFORE_MEOL     (SF_BEFORE_MEOL << SF_FIX_SHIFT_EOL)
index a09ade7..ecb1d7b 100644 (file)
--- a/regcomp.h
+++ b/regcomp.h
@@ -445,5 +445,5 @@ const static char reg_off_by_arg[] = {
 #define REG_SEEN_GPOS          4
 
 #ifdef DEBUGGING
-extern char *colors[4];
+EXT char *colors[4];  /* not dEXT since we do EXTERN/INTERN.h shuffle */
 #endif 
index 53219a7..ee56e02 100644 (file)
@@ -284,6 +284,7 @@ foreach (@pages) {
                for ($i = 0; $trn = $ENV{'DCL$PATH'.$i}; $i++) {
                    push(@searchdirs,$trn);
                }
+           push(@dirs,'perl_root:[lib.pod]')  # installed pods
            } else {
                push(@searchdirs, grep(-d, split($Config{path_sep}, 
                                                 $ENV{'PATH'})));
index 9cdca3d..24a3906 100644 (file)
@@ -8,11 +8,11 @@
  * GenConfig.pl when producing Config.pm.
  *
  * config.h for VMS
- * Version: 5.004
+ * Version: 5.005
  */                 
 
-/* Configuration time: 19-Nov-1996 23:34
- * Configured by: Charles Bailey  bailey@genetics.upenn.edu
+/* Configuration time:  7-Mar-1998 16:30
+ * Configured by: Charles Bailey  bailey@newman.upenn.edu
  * Target system: VMS
  */
 
@@ -76,7 +76,7 @@
  * when Perl is built.  Please do not change it by hand; make
  * any changes to FndVers.Com instead.
  */
-#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00456"  /**/
+#define ARCHLIB_EXP "/perl_root/lib/VMS_VAX/5_00462"  /**/
 
 
 #define ARCHLIB ARCHLIB_EXP    /*config-skip*/
  */
 #define ARCHNAME "VMS_VAX"  /**/
 
-/* BINCOMPAT3:
- *     This symbol, if defined, indicates that Perl 5.004 should be
- *     binary-compatible with Perl 5.003.
- */
-#undef BINCOMPAT3
-
 /* CPPSTDIN:
  *     This symbol contains the first part of the string which will invoke
  *     the C preprocessor on the standard input and produce to standard
  *     The type "Timeval" should be used to refer to "struct timeval".    
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_GETTIMEOFDAY /**/
+#define HAS_GETTIMEOFDAY /*config-skip*/
 #else
 #undef HAS_GETTIMEOFDAY /*config-skip*/
 #endif
  *     and PHOSTNAME.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_UNAME /**/
+#define HAS_UNAME /*config-skip*/
 #else
 #undef HAS_UNAME               /*config-skip*/
 #endif
 /* HAS_PTHREAD_YIELD:
  *     This symbol, if defined, indicates that the pthread_yield routine is
  *     available to yield the execution of the current thread.
- *     VMS: pthread_yield_np is there, but we won't worry for now since it's
- *     set up already as sched_yield.
+ *     VMS: pthread_yield_np is there, so just set up the alias
  */
-#undef HAS_PTHREAD_YIELD       /**/
+#define HAS_PTHREAD_YIELD      /**/
+#define pthread_yield pthread_yield_np /*config-skip*/
 
-/* HAS_SCHED_YIELD:
- *     This symbol, if defined, indicates that the sched_yield routine is
- *     available to yield the execution of the current thread.
+/* OLD_PTHREADS_API:
+ *     This symbol, if defined, indicates that Perl should
+ *     be built to use the old draft POSIX threads API.
  */
-#define HAS_SCHED_YIELD        /**/
+#undef OLD_PTHREADS_API                /**/
 
 /* HAS_READDIR:
  *     This symbol, if defined, indicates that the readdir routine is
  *     available to truncate files.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_TRUNCATE /**/
+#define HAS_TRUNCATE /*config-skip*/
 #else
 #undef HAS_TRUNCATE    /*config-skip*/
 #endif
  *     This symbol, if defined, indicates that wait4() exists.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_WAIT4 /**/
+#define HAS_WAIT4 /*config-skip*/
 #else
 #undef HAS_WAIT4       /*config-skip*/
 #endif
  */
 #undef I_VFORK /**/
 
+/* Pid_t:
+ *     This symbol holds the type used to declare process ids in the kernel.
+ *     It can be int, uint, pid_t, etc... It may be necessary to include
+ *     <sys/types.h> to get any typedef'ed information.
+ */
+#if defined(__DECC) && defined(__DECC_VER) && (__DECC_VER >= 500000)
+#  define Pid_t pid_t          /* config-skip */
+#else
+#  define Pid_t int    /* config-skip */
+#endif
+
 /* CAN_PROTOTYPE:
  *     If defined, this macro indicates that the C compiler can handle
  *     function prototypes.
  */
 #define HAS_STRCHR     /**/
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_INDEX /**/
+#define HAS_INDEX /*config-skip*/
 #else
 #undef HAS_INDEX       /*config-skip*/
 #endif
  */
 #define I_MATH         /**/
 
+/* DOUBLESIZE:
+ *     This symbol contains the size of a double, so that the C preprocessor
+ *     can make decisions based on it.
+ */
 /* INTSIZE:
  *     This symbol contains the size of an int, so that the C preprocessor
  *     can make decisions based on it.
  *     This symbol contains the value of sizeof(short) so that the C
  *     preprocessor can make decisions based on it.
  */
+/* PTRSIZE:
+ *     This symbol contains the size of a pointer, so that the C preprocessor
+ *     can make decisions based on it.  It will be sizeof(void *) if
+ *     the compiler supports (void *); otherwise it will be
+ *     sizeof(char *).
+ *     VMS: Use 32-bit pointers everywhere for now  7-Mar-1998
+ */
+#define DOUBLESIZE 8           /**/
 #define INTSIZE 4              /**/
 #define LONGSIZE 4             /**/
 #define SHORTSIZE 2            /**/
+#define PTRSIZE 4              /**/
 
 /* Off_t:
  *     This symbol holds the type used to declare offsets in the kernel.
 #undef RD_NODATA
 #undef EOF_NONBLOCK
 
-/* OLDARCHLIB:
- *     This variable, if defined, holds the name of the directory in
- *     which the user has perl5.000 or perl5.001 architecture-dependent
- *     public library files for $package.  For the most part, these
- *     files will work with 5.002 (and later), but that is not
- *     guaranteed.
- */
-/* OLDARCHLIB_EXP:
- *     This symbol contains the ~name expanded version of OLDARCHLIB, to be
- *     used in programs that are not prepared to deal with ~ expansion at 
- *     run-time.
- */
-/*     ==> NOTE <==
- * This value is automatically updated by FndVers.Com
- * when Perl is built.  Please do not change it by hand; make
- * any changes to FndVers.Com instead.
- */
-#define OLDARCHLIB_EXP "/perl_root/lib/VMS_VAX"  /**/
-#define OLDARCHLIB OLDARCHLIB_EXP  /*config-skip*/
-
 /* PRIVLIB:
  *     This symbol contains the name of the private library for this package.
  *     The library is private in the sense that it needn't be in anyone's
  */
 #undef HAS_INET_ATON           /**/
 
+/* HAS_GNULIBC:
+ *     This symbol, if defined, indicates to the C program that 
+ *     the GNU C library is being used.
+ */
+#undef HAS_GNULIBC     /**/
+
 /* HAS_ISASCII:
  *     This manifest constant lets the C program know that the
  *     isascii is available.
  *     with a given open file descriptor.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_PATHCONF /**/
-#define HAS_FPATHCONF /**/
+#define HAS_PATHCONF /*config-skip*/
+#define HAS_FPATHCONF /*config-skip*/
 #else
 #undef HAS_PATHCONF       /*config-skip*/
 #undef HAS_FPATHCONF     /*config-skip*/
  *     arguments whereas USG one needs none.  See also HAS_SETPGID
  *     for a POSIX interface.
  */
-/* USE_BSDPGRP:
- *     This symbol, if defined, indicates that the BSD notion of process
- *     group is to be used. For instance, you have to say setpgrp(pid, pgrp)
- *     instead of the USG setpgrp().
- */
 #undef HAS_SETPGRP             /**/
 #undef USE_BSD_SETPGRP /**/
-#undef USE_BSDPGRP             /**/
 
 /* HAS_SETPGID:
  *     This symbol, if defined, indicates that the setpgid routine is
  *     to determine system related limits and options.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_SYSCONF /**/
+#define HAS_SYSCONF /*config-skip*/
 #else
 #undef HAS_SYSCONF     /*config-skip*/
 #endif
  * traditional longjmp() if siglongjmp isn't available.
  */
 #if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
-#define HAS_SIGSETJMP /**/
+#define HAS_SIGSETJMP /*config-skip*/
 #else
 #undef HAS_SIGSETJMP   /*config-skip*/
 #endif
 
 /* HAS_GETHOSTBYADDR:
  *     This symbol, if defined, indicates that the gethostbyaddr routine is
- *     available to lookup hosts by their IP addresses.
+ *     available to lookup host names by their IP addresses.
  */
-#define HAS_GETHOSTBYADDR              /**/
+#define HAS_GETHOSTBYADDR              /**/      /* config-skip */
 
 /* Netdb_host_t:
  *     This symbol holds the type used for the 1st argument
  *     to gethostbyaddr().
  */
-#define Netdb_host_t           char * /**/
+#define Netdb_host_t           char * /**/ /* config-skip */
 
 /* Netdb_hlen_t:
  *     This symbol holds the type used for the 2nd argument
  *     to gethostbyaddr().
  */
-#define Netdb_hlen_t           int
+#define Netdb_hlen_t           int     /**/  /* config-skip */
 
 /* HAS_GETPROTOBYNAME:
  *     This symbol, if defined, indicates that the getprotobyname()
  *     This symbol, if defined, indicates that the gethostbyname routine is
  *     available to lookup hosts by their DNS names.
  */
-#define HAS_GETHOSTBYNAME              /**/
+#define HAS_GETHOSTBYNAME              /*config-skip*/
 
 /* Netdb_name_t:
  *     This symbol holds the type used for the 1st argument
  *     getservbyname(), the 2nd argument to getservbyname(),
  *     and the 2nd argument to getservbyport().
  */
-#define Netdb_name_t   long    /**/
+#define Netdb_name_t   char *
 
-/* HAS_GETNETBYADD:
+#ifdef DECCRTL_SOCKETS
+/* HAS_GETNETBYADDR:
  *     This symbol, if defined, indicates that the getnetbyaddr routine is
  *     available to lookup networks by their IP addresses.
  */
-#define HAS_GETNETBYADD                /**/
+#define HAS_GETNETBYADDR               /**/      /* config-skip */
 
 /* Netdb_net_t:
  *     This symbol holds the type used for the 1st argument
  *     to getnetbyaddr().
  */
-#define Netdb_net_t            long
+#define Netdb_net_t            long    /**/ /* config-skip */
 
-/* HAS_GETHOSTBYADDR:
- *     This symbol, if defined, indicates that the gethostbyaddr routine is
- *     available to lookup host names by their IP addresses.
+/* HAS_GETNETBYNAME:
+ *     This symbol, if defined, indicates that the getnetbyname routine is
+ *     available to lookup networks by their names.
  */
-#define HAS_GETHBYADDR         /**/      /* config-skip */
+#define HAS_GETNETBYNAME               /*config-skip*/
+#else
+#undef HAS_GETNETBYADDR                        /*config-skip*/
+#undef HAS_GETNETBYNAME                /*config-skip*/
+#endif
 
-/* Gethbadd_addr_t:
- *     This symbol holds the type used for the 1st argument
- *     to gethostbyaddr().
+/* HAS_GETPROTOBYNAME:
+ *     This symbol, if defined, indicates that the getprotobyname routine is
+ *     available to lookup protocols by their names.
  */
-#define Gethbadd_addr_t                char *  /**/ /* config-skip */
-
-/* Gethbadd_alen_t:
- *     This symbol holds the type used for the 2nd argument
- *     to gethostbyaddr().
+/* HAS_GETPROTOBYNUMBER:
+ *     This symbol, if defined, indicates that the getprotobynumber()
+ *     routine is available to look up protocols by their number.
  */
-#define Gethbadd_alen_t                int     /**/  /* config-skip */
+#define HAS_GETPROTOBYNAME             /*config-skip*/
+#define HAS_GETPROTOBYNUMBER           /*config-skip*/
 
-#ifdef DECCRTL_SOCKETS
-/* HAS_GETNETBYADDR:
- *     This symbol, if defined, indicates that the getnetbyaddr routine is
- *     available to lookup networks by their IP addresses.
+/* HAS_GETSERVBYNAME:
+ *     This symbol, if defined, indicates that the getservbyname()
+ *     routine is available to look up services by their name.
  */
-#define HAS_GETNETBYADDR               /**/      /* config-skip */
+/* HAS_GETSERVBYPORT:
+ *     This symbol, if defined, indicates that the getservbyport()
+ *     routine is available to look up services by their port.
+ */
+#define HAS_GETSERVBYNAME              /*config-skip*/
+#define HAS_GETSERVBYPORT              /*config-skip*/
 
-/* Gethbadd_net_t:
- *     This symbol holds the type used for the 1st argument
- *     to getnetbyaddr().
+/* HAS_SETHOSTENT:
+ *     This symbol, if defined, indicates that the sethostent() routine is
+ *     available.
  */
-#define Getnbadd_net_t         long    /**/ /* config-skip */
-#else
-#undef HAS_GETNETBYADDR                /**/          /* config-skip */
-#undef Getnbadd_net_t          long    /**/ /* config-skip */
-#endif
+#define HAS_SETHOSTENT         /*config-skip*/
 
 /* VMS: In general, TCP/IP header files should be included from
  * sockadapt.h, instead of here, in order to keep the TCP/IP code
 
 #else /* VMS_DO_SOCKETS */
 
-#undef HAS_SOCKET              /**/          /* config-skip */
-#undef HAS_SOCKETPAIR  /**/          /* config-skip */
-#undef HAS_GETHOSTENT          /**/      /* config-skip */
-#undef I_NETINET_IN    /**/              /* config-skip */
-#undef I_NETDB /**/                  /* config-skip */
-#undef I_NET_ERRNO             /**/          /* config-skip */
-#undef HAS_SELECT      /**/              /* config-skip */
-#undef HAS_GETHOSTBYADDR               /**/          /* config-skip */
-#undef HAS_GETNETBYADDR                /**/          /* config-skip */
+#undef HAS_SOCKET                              /*config-skip*/
+#undef HAS_SOCKETPAIR                  /*config-skip*/
+#undef HAS_GETHOSTENT                  /*config-skip*/
+#undef HAS_SETHOSTENT                  /*config-skip*/
+#undef I_NETINET_IN                            /*config-skip*/
+#undef I_NETDB                                 /*config-skip*/
+#undef I_NET_ERRNO                             /*config-skip*/
+#undef HAS_SELECT                              /*config-skip*/
+#undef HAS_GETHOSTBYADDR               /*config-skip*/
+#undef HAS_GETNETBYADDR                        /*config-skip*/
+#undef HAS_GETHOSTBYNAME               /*config-skip*/
+#undef HAS_GETNETBYNAME                        /*config-skip*/
+#undef HAS_GETPROTOBYNAME              /*config-skip*/
+#undef HAS_GETPROTOBYNUMBER            /*config-skip*/
+#undef HAS_GETSERVBYNAME               /*config-skip*/
+#undef HAS_GETSERVBYPORT               /*config-skip*/
 
 #endif /* !VMS_DO_SOCKETS */
 
index 5f05509..683f40d 100644 (file)
@@ -1,5 +1,5 @@
 # Descrip.MMS for perl5 on VMS
-# Last revised 23-Dec-1997 by Charles Bailey  bailey@genetics.upenn.edu
+# Last revised 27-Feb-1998 by Charles Bailey  bailey@genetics.upenn.edu
 #
 #: This file uses MMS syntax, and can be processed using DEC's MMS product,
 #: or the free MMK clone (available by ftp at ftp.spc.edu).  If you want to
@@ -74,7 +74,7 @@ OBJVAL = $(MMS$TARGET_NAME)$(O)
 .endif
 
 # Updated by fndvers.com -- do not edit by hand
-PERL_VERSION = 5_00460#
+PERL_VERSION = 5_00462#
 
 .ifdef DECC_SOCKETS
 SOCKET=1
@@ -274,22 +274,22 @@ extobj = $(myextobj)
 #### End of system configuration section. ####
 
 
-h1 = EXTERN.h, INTERN.h, XSUB.h, av.h, config.h, cop.h, cv.h
+h1 = EXTERN.h, INTERN.h, XSUB.h, av.h, bytecode.h, byterun.h, config.h, cop.h, cv.h
 h2 = embed.h, form.h, gv.h, handy.h, hv.h, keywords.h, mg.h, op.h, thread.h
 h3 = opcode.h, patchlevel.h, perl.h, perly.h, pp.h, proto.h, regcomp.h
 h4 = regexp.h, scope.h, sv.h, vmsish.h, util.h, perlio.h, perlsdio.h
-h5 = embedvar.h, intrpvar.h, perlvars.h, thrdvar.h
+h5 = embedvar.h, intrpvar.h, perlvars.h, thrdvar.h, atomic.h
 h = $(h1), $(h2), $(h3), $(h4), $(h5) $(SOCKHLIS) $(THREADH)
 
 c1 = av.c, scope.c, op.c, doop.c, doio.c, dump.c, hv.c, mg.c, universal.c, perlio.c
 c2 = perl.c, perly.c, pp.c, pp_hot.c, pp_ctl.c, pp_sys.c, regcomp.c, regexec.c
-c3 = gv.c, sv.c, taint.c, toke.c, util.c, deb.c, run.c, globals.c, vms.c $(SOCKCLIS)
+c3 = gv.c, sv.c, taint.c, toke.c, util.c, deb.c, run.c, globals.c, vms.c, byterun.c $(SOCKCLIS)
 
-c = $(c1), $(c2), $(c3), miniperlmain.c, perlmain.c
+c = $(c1), $(c2), $(c3), miniperlmain.c, perlmain.c, byteperl.c
 
 obj1 = perl$(O), gv$(O), toke$(O), perly$(O), op$(O), regcomp$(O), dump$(O), util$(O), mg$(O), perlio$(O)
 obj2 = hv$(O), av$(O), run$(O), pp_hot$(O), sv$(O), pp$(O), scope$(O), pp_ctl$(O), pp_sys$(O)
-obj3 = doop$(O), doio$(O), regexec$(O), taint$(O), deb$(O), universal$(O), globals$(O), vms$(O) $(SOCKOBJ)
+obj3 = doop$(O), doio$(O), regexec$(O), taint$(O), deb$(O), universal$(O), globals$(O), vms$(O), byterun$(O) $(SOCKOBJ)
 
 obj = $(obj1), $(obj2), $(obj3)
 
@@ -298,11 +298,13 @@ ac2 = $(ARCHCORE)config.h $(ARCHCORE)cop.h $(ARCHCORE)cv.h $(ARCHCORE)embed.h
 ac3 = $(ARCHCORE)form.h $(ARCHCORE)gv.h $(ARCHCORE)handy.h $(ARCHCORE)hv.h
 ac4 = $(ARCHCORE)keywords.h $(ARCHCORE)mg.h $(ARCHCORE)op.h $(ARCHCORE)opcode.h
 ac5 = $(ARCHCORE)patchlevel.h $(ARCHCORE)perl.h $(ARCHCORE)perly.h $(ARCHCORE)thread.h
-ac6 = $(ARCHCORE)pp.h $(ARCHCORE)proto.h $(ARCHCORE)regcomp.h $(ARCHCORE)perlio.h $(ARCHCORE)perlsdio.h
-ac7 = $(ARCHCORE)regexp.h $(ARCHCORE)scope.h $(ARCHCORE)sv.h $(ARCHCORE)util.h
-ac8 = $(ARCHCORE)embedvar.h $(ARCHCORE)intrpvar.h $(ARCHCORE)perlvars.h $(ARCHCORE)thrdvar.h
-ac9 = $(ARCHCORE)vmsish.h $(ARCHCORE)$(DBG)libperl$(OLB) $(ARCHCORE)perlshr_attr.opt
-ac10 = $(ARCHCORE)$(DBG)perlshr_bld.opt
+ac6 = $(ARCHCORE)perldir.h $(ARCHCORE)perlenv.h $(ARCHCORE)perllio.h $(ARCHCORE)atomic.h
+ac7 = $(ARCHCORE)perlmem.h $(ARCHCORE)perlproc.h $(ARCHCORE)perlsock.h
+ac8 = $(ARCHCORE)pp.h $(ARCHCORE)proto.h $(ARCHCORE)regcomp.h $(ARCHCORE)perlio.h $(ARCHCORE)perlsdio.h
+ac9 = $(ARCHCORE)regexp.h $(ARCHCORE)scope.h $(ARCHCORE)sv.h $(ARCHCORE)util.h
+ac10 = $(ARCHCORE)embedvar.h $(ARCHCORE)intrpvar.h $(ARCHCORE)perlvars.h $(ARCHCORE)thrdvar.h
+ac11 = $(ARCHCORE)vmsish.h $(ARCHCORE)$(DBG)libperl$(OLB) $(ARCHCORE)perlshr_attr.opt
+ac12 = $(ARCHCORE)$(DBG)perlshr_bld.opt $(ARCHCORE)bytecode.h $(ARCHCORE)byterun.h
 .ifdef SOCKET
 acs = $(ARCHCORE)$(SOCKH)
 .else
@@ -345,7 +347,7 @@ all : base extras x2p archcorefiles preplibrary perlpods
 .endif
 base : miniperl perl
        @ $(NOOP)
-extras : Fcntl IO Opcode attrs $(POSIX) $(THREAD) SDBM_File libmods utils podxform
+extras : Fcntl IO Opcode attrs B $(POSIX) $(THREAD) SDBM_File libmods utils podxform
        @ $(NOOP)
 libmods : $(LIBPREREQ)
        @ $(NOOP)
@@ -368,15 +370,15 @@ pod8 = [.lib.pod]perltrap.pod [.lib.pod]perlvar.pod [.lib.pod]perlxs.pod [.lib.p
 perlpods : $(pod1) $(pod2) $(pod3) $(pod4) $(pod5) $(pod6) $(pod7) $(pod8) [.lib.pod]perlvms.pod
        @ $(NOOP)
 
-archcorefiles :  $(ac1) $(ac2) $(ac3) $(ac4) $(ac5) $(ac6) $(ac7) $(ac8) $(ac9) $(ac10) $(acs) $(acth) $(ARCHAUTO)time.stamp
+archcorefiles :  $(ac1) $(ac2) $(ac3) $(ac4) $(ac5) $(ac6) $(ac7) $(ac8) $(ac9) $(ac10) $(ac11) $(ac12) $(acs) $(acth) $(ARCHAUTO)time.stamp
        @ $(NOOP)
 
 miniperl : $(DBG)miniperl$(E)
        @ Continue
 $(MINIPERL_EXE) :  miniperlmain$(O), $(DBG)libperl$(OLB) $(CRTL)
-       Link $(LINKFLAGS)/NoDebug/NoMap/NoFull/NoCross/Exe=$(MMS$TARGET) miniperlmain$(O), $(DBG)libperl$(OLB)/Library/Include=globals $(CRTLOPTS)
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoFull/NoCross/Exe=$(MMS$TARGET) miniperlmain$(O), $(DBG)libperl$(OLB)/Library/Include=globals $(CRTLOPTS)
 $(DBG)miniperl$(E) :  miniperlmain$(O), $(DBG)libperl$(OLB) $(CRTL)
-       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) miniperlmain$(O),$(DBG)libperl$(OLB)/Library/Include=globals  $(CRTLOPTS)
+       Link $(LINKFLAGS)/Trace/Exe=$(MMS$TARGET) miniperlmain$(O),$(DBG)libperl$(OLB)/Library/Include=globals  $(CRTLOPTS)
 
 $(DBG)libperl$(OLB) : $(obj)
        @ If F$Search("$(MMS$TARGET)").eqs."" Then Library/Object/Create $(MMS$TARGET)
@@ -387,15 +389,26 @@ $(DBG)libperl$(OLB) : $(obj)
 perlmain.c : miniperlmain.c $(MINIPERL_EXE) [.vms]writemain.pl
        $(MINIPERL) [.VMS]Writemain.pl "$(EXT)"
 
-perl : $(DBG)perl$(E)
+byteperl.c : [.ext.B]byteperl.c
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+
+.ifdef __DEBUG__
+# Link an extra perl that doesn't invoke the debugger
+perl : $(DBG)perl$(E) $(DBG)byteperl$(E)
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)perl$(E) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option
+       Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoCross/NoFull/Exe=N$(DBG)byteperl$(E) byteperl$(O), perlshr.opt/Option, perlshr_attr.opt/Option
+.else
+perl : $(DBG)perl$(E) $(DBG)byteperl$(E)
        @ Continue
+.endif
+
 $(DBG)perl$(E) : perlmain$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
        @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
-.ifdef gnuc
-       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option, crtl.opt/Option
-.else
        Link $(LINKFLAGS)/Exe=$(MMS$TARGET) perlmain$(O), perlshr.opt/Option, perlshr_attr.opt/Option
-.endif
+
+$(DBG)byteperl$(E) : byteperl$(O), $(DBG)perlshr$(E), $(MINIPERL_EXE)
+       @ @[.vms]genopt "PerlShr.Opt/Write" "|" "''F$Environment("Default")'$(DBG)PerlShr$(E)/Share"
+       Link $(LINKFLAGS)/Exe=$(MMS$TARGET) byteperl$(O), perlshr.opt/Option, perlshr_attr.opt/Option
 
 $(DBG)perlshr$(E) : $(DBG)libperl$(OLB) $(extobj) $(DBG)perlshr_xtras.ts
        Link $(LINKFLAGS)/Share=$(MMS$TARGET) $(extobj) []$(DBG)perlshr_bld.opt/Option, perlshr_attr.opt/Option
@@ -433,7 +446,7 @@ $(ARCHDIR)config.pm : [.lib]config.pm
 # Once again, we accomodate DCL's 255 character buffer
 [.lib]config.pm : [.vms]config.vms [.vms]genconfig.pl $(MINIPERL_EXE)
        @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "cc=$(CC)$(CFLAGS)" >genconfig.opt
-       @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "ldflags=$(LINKFLAGS)|obj_ext=$(O)|exe_ext=$(E)|lib_ext=$(OLB)" >>genconfig.opt
+       @ $(MINIPERL) -e "print join('|',@ARGV),'|';" "ldflags=$(LINKFLAGS)|obj_ext=$(O)|exe_ext=$(E)|lib_ext=$(OLB)|dbgprefix=$(DBG)" >>genconfig.opt
        $(MINIPERL) [.VMS]GenConfig.Pl -f genconfig.opt
        @ Delete/NoLog/NoConfirm genconfig.opt;
        $(MINIPERL) ConfigPM.
@@ -616,6 +629,7 @@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]S
        @ Set Default [--]
 
 [.lib.auto.IO]IO$(E) : [.ext.IO]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
        @ Set Default [.ext.IO]
        $(MMS)
        @ Set Default [--]
@@ -625,6 +639,116 @@ IO : [.lib]IO.pm [.lib.IO]File.pm [.lib.IO]Handle.pm [.lib.IO]Pipe.pm [.lib.IO]S
 [.ext.IO]Descrip.MMS : [.ext.IO]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
        $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.IO]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
 
+B : [.lib]B.pm [.lib]O.pm [.lib.B]Asmdata.pm [.lib.B]Assembler.pm [.lib.B]Bblock.pm [.lib.B]Bytecode.pm [.lib.B]C.pm [.lib.B]CC.pm [.lib.B]Debug.pm [.lib.B]Deparse.pm [.lib.B]Disassembler.pm [.lib.B]Lint.pm [.lib.B]Showlex.pm [.lib.B]Stackobj.pm [.lib.B]Terse.pm [.lib.B]Xref.pm [.lib.auto.B]B$(E)
+       @ $(NOOP)
+
+[.lib]B.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib]O.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Asmdata.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Assembler.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Bblock.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Bytecode.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]C.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]CC.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Debug.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Deparse.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Disassembler.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Lint.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Showlex.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Stackobj.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Terse.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.B]Xref.pm : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+[.lib.auto.B]B$(E) : [.ext.B]Descrip.MMS
+       @ If F$Search("[.lib]auto.dir").eqs."" Then Create/Directory [.lib.auto]
+       @ Set Default [.ext.B]
+       $(MMS)
+       @ Set Default [--]
+
+# Add "-I[--.lib]" t $(MINIPERL) so we use this copy of lib after C<chdir>
+# ${@} necessary to distract different versions of MM[SK]/make
+[.ext.B]Descrip.MMS : [.ext.B]Makefile.PL $(LIBPREREQ) $(DBG)perlshr$(E)
+       $(MINIPERL) "-I[--.lib]" -e "chdir('[.ext.B]') or die $!; do 'Makefile.PL'; print ${@} if ${@};" "INST_LIB=[--.lib]" "INST_ARCHLIB=[--.lib]"
+
 [.lib]vmsish.pm : [.vms.ext]vmsish.pm
        Copy/Log/NoConfirm $(MMS$SOURCE) $(MMS$TARGET)
 
@@ -966,6 +1090,15 @@ $(ARCHCORE)INTERN.h : INTERN.h
 $(ARCHCORE)XSUB.h : XSUB.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)bytecode.h : bytecode.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)byterun.h : byterun.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)atomic.h : atomic.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 $(ARCHCORE)av.h : av.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
@@ -1022,12 +1155,30 @@ $(ARCHCORE)patchlevel.h : patchlevel.h
 $(ARCHCORE)perl.h : perl.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perldir.h : perldir.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlenv.h : perlenv.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 $(ARCHCORE)perlio.h : perlio.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perllio.h : perllio.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlmem.h : perlmem.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlproc.h : perlproc.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 $(ARCHCORE)perlsdio.h : perlsdio.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
+$(ARCHCORE)perlsock.h : perlsock.h
+       @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
+       Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
 $(ARCHCORE)perlvars.h : perlvars.h
        @ If F$Search("$(ARCHDIR)CORE.dir").eqs."" Then Create/Directory $(ARCHCORE)
        Copy/Log $(MMS$SOURCE) $(MMS$TARGET)
@@ -1089,41 +1240,44 @@ $(ARCHAUTO)time.stamp :
 util$(O) : util.c
        $(CC) $(CFLAGS) util.c
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
-av$(O) : av.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-deb$(O) : deb.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-doio$(O) : doio.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-doop$(O) : doop.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-dump$(O) : dump.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-globals$(O) : globals.c INTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-gv$(O) : gv.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-hv$(O) : hv.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-malloc$(O) : malloc.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-mg$(O) : mg.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-miniperlmain$(O) : miniperlmain.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-op$(O) : op.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-perl$(O) : perl.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h patchlevel.h
-perlio$(O) : perlio.c config.h EXTERN.h perl.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-perlmain$(O) : perlmain.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-perly$(O) : perly.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-pp$(O) : pp.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-pp_ctl$(O) : pp_ctl.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-pp_hot$(O) : pp_hot.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-pp_sys$(O) : pp_sys.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-regcomp$(O) : regcomp.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h INTERN.h regcomp.h
-regexec$(O) : regexec.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h regcomp.h
-run$(O) : run.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-scope$(O) : scope.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-sv$(O) : sv.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-taint$(O) : taint.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-toke$(O) : toke.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h keywords.h
-universal$(O) : universal.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
-util$(O) : util.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
-vms$(O) : vms.c EXTERN.h perl.h config.h embed.h perlio.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
+av$(O) : av.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+byterun$(O) : byterun.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+deb$(O) : deb.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+doio$(O) : doio.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+doop$(O) : doop.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+dump$(O) : dump.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+globals$(O) : globals.c INTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+gv$(O) : gv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+hv$(O) : hv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+malloc$(O) : malloc.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+mg$(O) : mg.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+miniperlmain$(O) : miniperlmain.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+op$(O) : op.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perl$(O) : perl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h patchlevel.h
+perlio$(O) : perlio.c config.h EXTERN.h perl.h bytecode.h byterun.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perlmain$(O) : perlmain.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+byteperl$(O) : byteperl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+perly$(O) : perly.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp$(O) : pp.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_ctl$(O) : pp_ctl.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_hot$(O) : pp_hot.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+pp_sys$(O) : pp_sys.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+regcomp$(O) : regcomp.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h INTERN.h regcomp.h
+regexec$(O) : regexec.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h regcomp.h
+run$(O) : run.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+scope$(O) : scope.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+sv$(O) : sv.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+taint$(O) : taint.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+toke$(O) : toke.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h keywords.h
+universal$(O) : universal.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
+util$(O) : util.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h
+vms$(O) : vms.c EXTERN.h perl.h bytecode.h byterun.h config.h embed.h perlio.h perldir.h perlenv.h perllio.h perlmem.h perlproc.h perlsock.h perlsdio.h handy.h vmsish.h regexp.h sv.h util.h form.h gv.h cv.h opcode.h op.h cop.h av.h hv.h mg.h scope.h perly.h thread.h pp.h proto.h embedvar.h perlvars.h thrdvar.h intrpvar.h XSUB.h
 [.x2p]a2p$(O) : [.x2p]a2p.c [.x2p]a2py.c [.x2p]INTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h config.h handy.h
 [.x2p]hash$(O) : [.x2p]hash.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
 [.x2p]str$(O) : [.x2p]str.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
 [.x2p]util$(O) : [.x2p]util.c [.x2p]EXTERN.h [.x2p]INTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
 [.x2p]walk$(O) : [.x2p]walk.c [.x2p]EXTERN.h [.x2p]a2p.h [.x2p]hash.h [.x2p]str.h [.x2p]util.h config.h handy.h
+# End of automatically generated make dependencies
 .endif # !LINK_ONLY
 
 config.h : [.vms]config.vms
@@ -1155,6 +1309,7 @@ tidy : cleanlis
        - If F$Search("VMSish.H;-1").nes."" Then Purge/NoConfirm/Log VMSish.H
        - If F$Search("VMS.C;-1")   .nes."" Then Purge/NoConfirm/Log VMS.C
        - If F$Search("Perlmain.C;-1")   .nes."" Then Purge/NoConfirm/Log Perlmain.C
+       - If F$Search("byteperl.C;-1")   .nes."" Then Purge/NoConfirm/Log byteperl.C
        - If F$Search("Perlshr_Gbl*.Mar;-1")   .nes."" Then Purge/NoConfirm/Log Perlshr_Gbl*.Mar
        - If F$Search("[.Ext.DynaLoader]DL_VMS$(O);-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O)
        - If F$Search("[.Ext.DynaLoader]DL_VMS.C;-1").nes."" Then Purge/NoConfirm/Log [.Ext.DynaLoader]DL_VMS.C
@@ -1167,8 +1322,8 @@ tidy : cleanlis
        - If F$Search("[.Lib]Socket.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Socket.pm
        - If F$Search("[.Lib]Config.pm;-1").nes."" Then Purge/NoConfirm/Log [.Lib]Config.pm
        - If F$Search("$(ARCHDIR)Config.pm;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config.pm
-       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;*
-       - If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm;*
+       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm
+       - If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm
        - If F$Search("[.Lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.Lib.VMS]*.*
        - If F$Search("[.Lib.Pod]*.Pod;-1").nes."" Then Purge/NoConfirm/Log [.Lib.Pod]*.Pod
        - If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.*
@@ -1206,6 +1361,7 @@ clean : tidy
        - If F$Search("VMSish.H").nes."" Then Delete/NoConfirm/Log VMSish.H;*
        - If F$Search("VMS.C")   .nes."" Then Delete/NoConfirm/Log VMS.C;*
        - If F$Search("Perlmain.C")   .nes."" Then Delete/NoConfirm/Log Perlmain.C;*
+       - If F$Search("byteperl.C")   .nes."" Then Delete/NoConfirm/Log byteperl.C;*
        - If F$Search("Perlshr_Gbl*.Mar")   .nes."" Then Delete/NoConfirm/Log Perlshr_Gbl*.Mar;*
        - If F$Search("*.TS").nes."" Then Delete/NoConfirm/Log *.TS;*
        - If F$Search("[.Ext.DynaLoader]DL_VMS$(O)").nes."" Then Delete/NoConfirm/Log [.Ext.DynaLoader]DL_VMS$(O);*
index 218c406..01ff32d 100644 (file)
@@ -32,7 +32,7 @@ sub AUTOLOAD {
     if ($constname =~ /^O_/) {
       my($val) = constant($constname);
       defined $val or croak("Unknown VMS::Stdio constant $constname");
-      *$AUTOLOAD = sub { val; }
+      *$AUTOLOAD = sub { $val; }
     }
     else { # We don't know about it; hand off to IO::File
       require IO::File;
index 6201a42..1b31f06 100644 (file)
@@ -10,7 +10,7 @@ foreach (<DATA>) {
   next if /^\s*$/;
   push(@tests,$_);
 }
-print '1..',scalar(@tests)+3,"\n";
+print '1..',scalar(@tests)+5,"\n";
 
 foreach $test (@tests) {
   ($arg,$func,$expect) = split(/\t+/,$test);
@@ -53,6 +53,11 @@ else {
         rmsexpand('from.here','cant:[get.there];2'),"|\n";
 }
 
+# Make sure we're using redirected mkdir, which strips trailing '/', since
+# the CRTL's mkdir can't handle this.
+print +(mkdir('testdir/',0777) ? 'ok ' : 'not ok '),++$idx,"\n";
+print +(rmdir('testdir/') ? 'ok ' : 'not ok '),++$idx,"\n";
+
 __DATA__
 
 # Basic VMS to Unix filespecs
index f668666..30243d8 100755 (executable)
@@ -63,10 +63,6 @@ $   Call update_file "''p2'" "#define ARCHNAME" "''token'"
 $   teststs = $Status
 $   If .not.teststs Then Exit teststs
 $!
-$   token = """""""""/perl_root/lib/VMS_''arch'""""""""  /**/"
-$   Call update_file "''p2'" "#define OLDARCHLIB_EXP" "''token'"
-$   If .not.$Status Then Exit $Status
-$!
 $   token = """""""""/perl_root/lib/site_perl/VMS_''arch'""""""""  /**/"
 $   Call update_file "''p2'" "#define SITEARCH_EXP" "''token'"
 $   If .not.$Status Then Exit $Status
index 0a8d7e6..9d5748d 100644 (file)
@@ -68,6 +68,7 @@ if ($docc) {
   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,6 +86,7 @@ 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 = '[-]'; }
@@ -96,8 +98,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;
 }
 
@@ -192,44 +196,51 @@ 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 (<CPP>) {
   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 $_ = <CPP>;
+      last LINE unless defined($_ = <CPP>);
     }
     print "vmsish.h>> $_" if $debug > 2;
     if (/^\s*EXT/) { &scan_var($_); }
-    last LINE unless $_ = <CPP>;
+    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/) { &scan_var($_); }
     if (/^\s+OP_/) { &scan_enum($_); }
-    last LINE unless $_ = <CPP>;
+    last LINE unless defined($_ = <CPP>);
   }
-  while (/^typedef enum/ .. /^\}/) {
+  while (/^typedef enum/ .. /^\s*\}/) {
     print "global enum>> $_" if $debug > 2;
     &scan_enum($_);
-    last LINE unless $_ = <CPP>;
+    last LINE unless defined($_ = <CPP>);
   }
-  while (/^#.*thread\.h/i .. /^#.*perl\.h/i) {
-    print "thread.h>> $_" if $debug > 2;
-    if (/\s*^EXT/) { &scan_var($_);  }
-    else        { &scan_func($_); }
-    last LINE unless $_ = <CPP>;
+  # 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 $_ = <CPP>;
+    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;
 
@@ -248,6 +259,7 @@ while (<DATA>) {
   print "Adding $key to \%$array list\n" if $debug > 1;
   ${$array}{$key}++;
 }
+if ($debugging_enabled and ($isvaxc or $isgcc)) { $vars{'colors'}++ }
 foreach (split /\s+/, $extnames) {
   my($pkgname) = $_;
   $pkgname =~ s/::/__/g;
@@ -378,9 +390,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
index d2da572..94fcdd7 100644 (file)
@@ -6,7 +6,7 @@
 # that went into your perl binary.  In addition, values which change from run
 # to run may be supplied on the command line as key=val pairs.
 #
-# Rev. 10-Nov-1997  Charles Bailey  bailey@newman.upenn.edu
+# Rev. 16-Feb-1998  Charles Bailey  bailey@newman.upenn.edu
 #
 
 #==== Locations of installed Perl components
@@ -26,6 +26,7 @@ if ($ARGV[0] eq '-f') {
   open(ARGS,$ARGV[1]) or die "Can't read data from $ARGV[1]: $!\n";
   @ARGV = ();
   while (<ARGS>) {
+    chomp;
     push(@ARGV,split(/\|/,$_));
   }
   close ARGS;
@@ -88,6 +89,8 @@ man1ext='rno'
 man3ext='rno'
 arch='VMS_$archsufx'
 archname='VMS_$archsufx'
+bincompat3='undef'
+d_bincompat3='undef'
 osvers='$osvers'
 prefix='$prefix'
 builddir='$builddir'
@@ -154,44 +157,65 @@ foreach (@ARGV) {
       $optimize = $qual;
       $ccflags =~ s/$qual//;
     }
+    $usethreads = ($ccflags =~ m!/DEF[^/]+USE_THREADS!i and
+                   $ccflags !~ m!/UND[^/]+USE_THREADS!i);
+    print OUT "usethreads='",($usethreads ? 'define' : 'undef'),"'\n";;
     $optimize = "$debug$optimize";
     print OUT "ccflags='$ccflags'\n";
     print OUT "optimize='$optimize'\n";
-    $usethreads = ($ccflags =~ m!/DEF[^/]+USE_THREADS!i and
-                   $ccflags !~ m!/UND[^/]+USE_THREADS!i);
-    print OUT "usethreads='$usethreads'\n";
     $dosock = ($ccflags =~ m!/DEF[^/]+VMS_DO_SOCKETS!i and
                $ccflags !~ m!/UND[^/]+VMS_DO_SOCKETS!i);
     print OUT "d_vms_do_sockets=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "d_socket=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "d_sockpair=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "d_gethent=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_sethent=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "d_select=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "i_netdb=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "i_niin=",$dosock ? "'define'\n" : "'undef'\n";
     print OUT "i_neterrno=",$dosock ? "'define'\n" : "'undef'\n";
-    print OUT "d_gethbadd=",$dosock ? "'define'\n" : "'undef'\n";
-    print OUT "gethbadd_addr_type=",$dosock ? "'char *'\n" : "'undef'\n";
-    print OUT "gethbadd_alen_type=",$dosock ? "'int'\n" : "'undef'\n";
+    print OUT "d_gethbyname=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_gethbyaddr=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_getpbyname=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_getpbynumber=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_getsbyname=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "d_getsbyport=",$dosock ? "'define'\n" : "'undef'\n";
+    print OUT "netdb_name_type=",$dosock ? "'char *'\n" : "'undef'\n";
+    print OUT "netdb_host_type=",$dosock ? "'char *'\n" : "'undef'\n";
+    print OUT "netdb_hlen_type=",$dosock ? "'int'\n" : "'undef'\n";
 
     if ($dosock and $cctype eq 'decc' and $ccflags =~ /DECCRTL_SOCKETS/) {
       print OUT "selecttype='fd_set'\n";
-      print OUT "d_getnbadd='define'\n";
-      print OUT "getnbadd_net_type='long'\n";
+      print OUT "d_getnbyaddr='define'\n";
+      print OUT "d_getnbyname='define'\n";
+      print OUT "netdb_net_type='long'\n";
     }
     else {
       print OUT "selecttype='int'\n";
-      print OUT "d_getnbadd='undef'\n";
-      print OUT "getnbadd_net_type='undef'\n";
+      print OUT "d_getnybname='undef'\n";
+      print OUT "d_getnybaddr='undef'\n";
+      print OUT "netdb_net_type='undef'\n";
     }
 
-    if ($cctype eq 'decc') { $rtlhas  = 'define'; print OUT "useposix='true'\n";  }
-    else                   { $rtlhas  = 'undef';  print OUT "useposix='false'\n"; }
+    if ($cctype eq 'decc') {
+      $rtlhas  = 'define';
+      print OUT "useposix='true'\n";
+      ($ccver,$vmsver) = `$cc/VERSION` =~ /V(\S+) on .*V(\S+)$/;
+      # Best guess; the may be wrong on systems which have separately
+      # installed the new CRTL.
+      if ($ccver >= 5.2 and $vmsver >= 7) { $rtlnew = 'define'; }
+      else                                { $rtlnew = 'undef';  }
+    }
+    else { $rtlhas = $rtlnew = 'undef';  print OUT "useposix='false'\n"; }
     foreach (qw[ d_stdstdio d_stdio_ptr_lval d_stdio_cnt_lval d_stdiobase
                  d_locconv d_setlocale i_locale d_mbstowcs d_mbtowc
                  d_wcstombs d_wctomb d_mblen d_mktime d_strcoll d_strxfrm ]) {
       print OUT "$_='$rtlhas'\n";
     }
+    foreach (qw[ d_gettimeod d_uname d_truncate d_wait4 d_index
+                 d_pathconf d_fpathconf d_sysconf d_sigsetjmp ]) {
+      print OUT "$_='$rtlnew'\n";
+    }
     next;
   }
   elsif ($key eq 'exe_ext') { 
@@ -324,6 +348,9 @@ close IN;
 # as the manifest for the obsolete variable $d_eunice.
 print OUT "d_eunice='undef'\n";  delete $pp_vars{VMS};
 
+# XXX temporary -- USE_THREADS is currently on CC command line
+delete $pp_vars{'USE_THREADS'};
+
 foreach (sort keys %pp_vars) {
   warn "Didn't see $_ in $infile\n";
 }
index 7f9150a..3e5daf3 100644 (file)
@@ -145,7 +145,6 @@ void endnetent();
 #include <socket.h>
 #include <in.h>
 #include <inet.h>
-#include <netdb.h>
 
 /* SocketShr doesn't support these routines, but the DECC RTL contains
  * stubs with these names, designed to be used with the UCX socket
@@ -156,6 +155,8 @@ void endnetent();
 #define getnetent    no_getnetent
 #define setnetent    no_setnetent
 #define endnetent    no_endnetent
+
+#include <netdb.h>
 #endif
 
 /* We don't have these two in the system headers. */
index 7786a17..affc6a8 100644 (file)
@@ -74,6 +74,7 @@ $   Delete/Log/NoConfirm Echo.Obj;*
 $   echo = "$" + F$Parse("Echo.Exe")
 $
 $!  And do it
+$   Show Process/Accounting
 $   testdir = "Directory/NoHead/NoTrail/Column=1"
 $   Define/User Perlshr Sys$Disk:[-]PerlShr'exe'
 $   MCR Sys$Disk:[]Perl. "-I[-.lib]" - "''p2'" "''p3'" "''p4'" "''p5'" "''p6'"
@@ -93,7 +94,7 @@ use Config;
 @ioexcl=('argv.t','dup.t','fs.t','inplace.t','pipe.t');
 @libexcl=('db-btree.t','db-hash.t','db-recno.t',
           'gdbm.t','io_dup.t', 'io_pipe.t', 'io_sel.t', 'io_sock.t',
-          'ndbm.t','odbm.t','open2.t','open3.t','posix.t');
+          'ndbm.t','odbm.t','open2.t','open3.t', 'ph.t', 'posix.t');
 
 # Note: POSIX is not part of basic build, but can be built
 # separately if you're using DECC
@@ -217,6 +218,7 @@ print sprintf("u=%g  s=%g  cu=%g  cs=%g  files=%d  tests=%d\n",
     $user,$sys,$cuser,$csys,$files,$totmax);
 $$END-OF-TEST$$
 $ wrapup:
+$   Show Process/Accounting
 $   If F$Search("Echo.Exe").nes."" Then Delete/Log/NoConfirm Echo.Exe;*
 $   Set Default &olddef
 $   Set Message 'oldmsg'
index 3831e39..1183a83 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -2,8 +2,8 @@
  *
  * VMS-specific routines for perl5
  *
- * Last revised:  9-Nov-1997 by Charles Bailey  bailey@newman.upenn.edu
- * Version: 5.4.53a
+ * Last revised: 27-Feb-1998 by Charles Bailey  bailey@newman.upenn.edu
+ * Version: 5.4.61
  */
 
 #include <acedef.h>
@@ -2339,6 +2339,12 @@ vms_image_init(int *argcp, char ***argvp)
     *argcp++; argvp = newap;
   }
   getredirection(argcp,argvp);
+#if defined(USE_THREADS) && defined(__DECC)
+  {
+# include <reentrancy.h>
+  (void) decc$set_reentrancy(C$C_MULTITHREAD);
+  }
+#endif
   return;
 }
 /*}}}*/
@@ -2878,6 +2884,7 @@ setup_cmddsc(char *cmd, int check_img)
       s = resspec;
       while (*s && !isspace(*s)) s++;
       *s = '\0';
+      if (!cando_by_name(S_IXUSR,0,resspec)) return RMS$_PRV;
       New(402,VMScmd.dsc$a_pointer,7 + s - resspec + (rest ? strlen(rest) : 0),char);
       strcpy(VMScmd.dsc$a_pointer,"$ MCR ");
       strcat(VMScmd.dsc$a_pointer,resspec);
@@ -2936,7 +2943,22 @@ vms_do_exec(char *cmd)
     if ((retsts = setup_cmddsc(cmd,1)) & 1)
       retsts = lib$do_command(&VMScmd);
 
-    set_errno(EVMSERR);
+    switch (retsts) {
+      case RMS$_FNF:
+        set_errno(ENOENT); break;
+      case RMS$_DNF: case RMS$_DIR: case RMS$_DEV:
+        set_errno(ENOTDIR); break;
+      case RMS$_PRV:
+        set_errno(EACCES); break;
+      case RMS$_SYN:
+        set_errno(EINVAL); break;
+      case CLI$_BUFOVF:
+        set_errno(E2BIG); break;
+      case LIB$_INVARG: case LIB$_INVSTRDES: case SS$_ACCVIO: /* shouldn't happen */
+        _ckvmssts(retsts); /* fall through */
+      default:  /* SS$_DUPLNAM, SS$_CLI, resource exhaustion, etc. */
+        set_errno(EVMSERR); 
+    }
     set_vaxc_errno(retsts);
     if (dowarn)
       warn("Can't exec \"%s\": %s", VMScmd.dsc$a_pointer, Strerror(errno));
@@ -2965,21 +2987,36 @@ do_aspawn(void *really,void **mark,void **sp)
 unsigned long int
 do_spawn(char *cmd)
 {
-  unsigned long int substs, hadcmd = 1;
+  unsigned long int sts, substs, hadcmd = 1;
 
   TAINT_ENV();
   TAINT_PROPER("spawn");
   if (!cmd || !*cmd) {
     hadcmd = 0;
-    _ckvmssts(lib$spawn(0,0,0,0,0,0,&substs,0,0,0,0,0,0));
+    sts = lib$spawn(0,0,0,0,0,0,&substs,0,0,0,0,0,0);
   }
-  else if ((substs = setup_cmddsc(cmd,0)) & 1) {
-    _ckvmssts(lib$spawn(&VMScmd,0,0,0,0,0,&substs,0,0,0,0,0,0));
+  else if ((sts = setup_cmddsc(cmd,0)) & 1) {
+    sts = lib$spawn(&VMScmd,0,0,0,0,0,&substs,0,0,0,0,0,0);
   }
   
-  if (!(substs&1)) {
-    set_errno(EVMSERR);
-    set_vaxc_errno(substs);
+  if (!(sts & 1)) {
+    switch (sts) {
+      case RMS$_FNF:
+        set_errno(ENOENT); break;
+      case RMS$_DNF: case RMS$_DIR: case RMS$_DEV:
+        set_errno(ENOTDIR); break;
+      case RMS$_PRV:
+        set_errno(EACCES); break;
+      case RMS$_SYN:
+        set_errno(EINVAL); break;
+      case CLI$_BUFOVF:
+        set_errno(E2BIG); break;
+      case LIB$_INVARG: case LIB$_INVSTRDES: case SS$_ACCVIO: /* shouldn't happen */
+        _ckvmssts(sts); /* fall through */
+      default:  /* SS$_DUPLNAM, SS$_CLI, resource exhaustion, etc. */
+        set_errno(EVMSERR); 
+    }
+    set_vaxc_errno(sts);
     if (dowarn)
       warn("Can't spawn \"%s\": %s",
            hadcmd ? VMScmd.dsc$a_pointer : "", Strerror(errno));
@@ -4065,11 +4102,21 @@ flex_stat(char *fspec, Stat_t *statbufp)
 FILE *
 my_binmode(FILE *fp, char iotype)
 {
-    char filespec[NAM$C_MAXRSS], *acmode;
+    char filespec[NAM$C_MAXRSS], *acmode, *s, *colon, *dirend = Nullch;
+    int ret = 0, saverrno = errno, savevmserrno = vaxc$errno;
     fpos_t pos;
 
     if (!fgetname(fp,filespec)) return NULL;
-    if (iotype != '-' && fgetpos(fp,&pos) == -1) return NULL;
+    for (s = filespec; *s; s++) {
+      if (*s == ':') colon = s;
+      else if (*s == ']' || *s == '>') dirend = s;
+    }
+    /* Looks like a tmpfile, which will go away if reopened */
+    if (s == dirend + 3) return fp;
+    /* If we've got a non-file-structured device, clip off the trailing
+     * junk, and don't lose sleep if we can't get a stream position.  */
+    if (dirend == Nullch) *(colon+1) = '\0';
+    if (iotype != '-'&& (ret = fgetpos(fp, &pos)) == -1 && dirend) return NULL;
     switch (iotype) {
       case '<': case 'r':           acmode = "rb";                      break;
       case '>': case 'w':
@@ -4083,7 +4130,8 @@ my_binmode(FILE *fp, char iotype)
         acmode = "rb+";
     }
     if (freopen(filespec,acmode,fp) == NULL) return NULL;
-    if (iotype != '-' && fsetpos(fp,&pos) == -1) return NULL;
+    if (iotype != '-' && ret != -1 && fsetpos(fp,&pos) == -1) return NULL;
+    if (ret == -1) { set_errno(saverrno); set_vaxc_errno(savevmserrno); }
     return fp;
 }  /* end of my_binmode() */
 /*}}}*/
index cc08f39..31a42d9 100644 (file)
 #  include <unistd.h> /* DECC has this; VAXC and gcc don't */
 #endif
 
+/* VAXC doesn't have a unary plus operator, so we need to get there indirectly */
+#if defined(VAXC) && !defined(__DECC)
+#  define NO_UNARY_PLUS
+#endif
+
 #ifdef NO_PERL_TYPEDEFS /* a2p; we don't want Perl's special routines */
 #  define DONT_MASK_RTL_CALLS
 #endif
  */
 #define BIG_TIME
 
-/* USE_STAT_RDEV:
- *     This symbol is defined if this system has a stat structure declaring
- *     st_rdev
- */
-#define USE_STAT_RDEV  /**/
-
 /* ACME_MESS:
  *     This symbol, if defined, indicates that error messages should be 
  *     should be generated in a format that allows the use of the Acme
@@ -381,7 +380,9 @@ struct utimbuf {
 #  define sigdelset(t, u) my_sigdelset(t, u)
 #  define sigismember(t, u) my_sigismember(t, u)
 #  define sigprocmask(t, u, v) my_sigprocmask(t, u, v)
+#  ifndef _SIGSET_T
    typedef int sigset_t;
+#  endif
    /* The tools for sigprocmask() are there, just not the routine itself */
 #  ifndef SIG_UNBLOCK
 #    define SIG_UNBLOCK 1