From 09b7f37c58c6da6f4965b846b64eab7d9a205663 Mon Sep 17 00:00:00 2001 From: Charles Bailey Date: Thu, 12 Mar 1998 11:02:29 -0500 Subject: [PATCH] VMS updates (direct) [Needed manual tweaks on vms/config.vms since it clashed with other patches. I may have got it wrong.] p4raw-id: //depot/perl@817 --- lib/ExtUtils/Liblist.pm | 45 ++++++-- lib/ExtUtils/MM_VMS.pm | 86 +++++++++------ lib/ExtUtils/Mksymlists.pm | 7 -- perl.h | 3 +- pp.c | 6 +- pp_hot.c | 5 +- regcomp.c | 10 +- regcomp.h | 2 +- utils/perldoc.PL | 1 + vms/config.vms | 201 +++++++++++++++++----------------- vms/descrip.mms | 264 +++++++++++++++++++++++++++++++++++---------- vms/ext/Stdio/Stdio.pm | 2 +- vms/ext/filespec.t | 7 +- vms/fndvers.com | 4 - vms/gen_shrfls.pl | 49 +++++---- vms/genconfig.pl | 53 ++++++--- vms/sockadapt.h | 3 +- vms/test.com | 4 +- vms/vms.c | 74 ++++++++++--- vms/vmsish.h | 13 +-- 20 files changed, 573 insertions(+), 266 deletions(-) diff --git a/lib/ExtUtils/Liblist.pm b/lib/ExtUtils/Liblist.pm index aebb057..5c35dc7 100644 --- a/lib/ExtUtils/Liblist.pm +++ b/lib/ExtUtils/Liblist.pm @@ -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 diff --git a/lib/ExtUtils/MM_VMS.pm b/lib/ExtUtils/MM_VMS.pm index 954f612..87c27df 100644 --- a/lib/ExtUtils/MM_VMS.pm +++ b/lib/ExtUtils/MM_VMS.pm @@ -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)'); diff --git a/lib/ExtUtils/Mksymlists.pm b/lib/ExtUtils/Mksymlists.pm index 6bd49f2..4ec091d 100644 --- a/lib/ExtUtils/Mksymlists.pm +++ b/lib/ExtUtils/Mksymlists.pm @@ -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 --- 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 --- 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; diff --git a/pp_hot.c b/pp_hot.c index 4529f8e..0a89710 100644 --- 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)) { diff --git a/regcomp.c b/regcomp.c index 11358db..3581a5d 100644 --- 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) diff --git a/regcomp.h b/regcomp.h index a09ade7..ecb1d7b 100644 --- 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 diff --git a/utils/perldoc.PL b/utils/perldoc.PL index 53219a7..ee56e02 100644 --- a/utils/perldoc.PL +++ b/utils/perldoc.PL @@ -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'}))); diff --git a/vms/config.vms b/vms/config.vms index 9cdca3d..24a3906 100644 --- a/vms/config.vms +++ b/vms/config.vms @@ -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*/ @@ -89,12 +89,6 @@ */ #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 @@ -240,7 +234,7 @@ * 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 @@ -267,7 +261,7 @@ * 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 @@ -377,16 +371,16 @@ /* 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 @@ -655,7 +649,7 @@ * 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 @@ -701,7 +695,7 @@ * 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 @@ -971,6 +965,17 @@ */ #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 + * 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. @@ -1202,7 +1207,7 @@ */ #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 @@ -1325,6 +1330,10 @@ */ #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. @@ -1337,9 +1346,18 @@ * 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. @@ -1467,26 +1485,6 @@ #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 @@ -1610,6 +1608,12 @@ */ #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. @@ -1655,8 +1659,8 @@ * 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*/ @@ -1694,14 +1698,8 @@ * 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 @@ -1720,7 +1718,7 @@ * 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 @@ -1790,7 +1788,7 @@ * 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 @@ -1894,21 +1892,21 @@ /* 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() @@ -1925,7 +1923,7 @@ * 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 @@ -1934,54 +1932,58 @@ * 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 @@ -2014,15 +2016,22 @@ #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 */ diff --git a/vms/descrip.mms b/vms/descrip.mms index 5f05509..683f40d 100644 --- a/vms/descrip.mms +++ b/vms/descrip.mms @@ -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 +# ${@} 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);* diff --git a/vms/ext/Stdio/Stdio.pm b/vms/ext/Stdio/Stdio.pm index 218c406..01ff32d 100644 --- a/vms/ext/Stdio/Stdio.pm +++ b/vms/ext/Stdio/Stdio.pm @@ -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; diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t index 6201a42..1b31f06 100644 --- a/vms/ext/filespec.t +++ b/vms/ext/filespec.t @@ -10,7 +10,7 @@ foreach () { 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 diff --git a/vms/fndvers.com b/vms/fndvers.com index f668666..30243d8 100755 --- a/vms/fndvers.com +++ b/vms/fndvers.com @@ -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 diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl index 0a8d7e6..9d5748d 100644 --- a/vms/gen_shrfls.pl +++ b/vms/gen_shrfls.pl @@ -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 () { while (/^#.*vmsish\.h/i .. /^#.*perl\.h/i) { while (/__VMS_PROTOTYPES__/i .. /__VMS_SEPYTOTORP__/i) { print "vms_proto>> $_" if $debug > 2; if (/^\s*EXT/) { &scan_var($_); } else { &scan_func($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } print "vmsish.h>> $_" if $debug > 2; if (/^\s*EXT/) { &scan_var($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } while (/^#.*opcode\.h/i .. /^#.*perl\.h/i) { print "opcode.h>> $_" if $debug > 2; if (/^OP \*\s/) { &scan_func($_); } if (/^\s*EXT/) { &scan_var($_); } if (/^\s+OP_/) { &scan_enum($_); } - last LINE unless $_ = ; + last LINE unless defined($_ = ); } - while (/^typedef enum/ .. /^\}/) { + while (/^typedef enum/ .. /^\s*\}/) { print "global enum>> $_" if $debug > 2; &scan_enum($_); - last LINE unless $_ = ; + last LINE unless defined($_ = ); } - while (/^#.*thread\.h/i .. /^#.*perl\.h/i) { - print "thread.h>> $_" if $debug > 2; - if (/\s*^EXT/) { &scan_var($_); } - else { &scan_func($_); } - last LINE unless $_ = ; + # Check for transition to new header file + if (/^# \d+ "(\S+)"/) { + my $spec = $1; + # Pull name from library module or header filespec + $spec =~ /^(\w+)$/ or $spec =~ /(\w+)\.h/i; + my $name = lc $1; + $ckfunc = exists $checkh{$name} ? 1 : 0; + $scanname = $name if $ckfunc; + print "Header file transition: ckfunc = $ckfunc for $name.h\n" if $debug > 1; } - while (/^#.*proto\.h/i .. /^#.*perl\.h/i) { - print "proto.h>> $_" if $debug > 2; + if ($ckfunc) { + print "$scanname>> $_" if $debug > 2; if (/\s*^EXT/) { &scan_var($_); } - else { &scan_func($_); } - last LINE unless $_ = ; + else { &scan_func($_); } + } + else { + print $_ if $debug > 3 && ($debug > 5 || length($_)); + if (/^\s*EXT/) { &scan_var($_); } } - print $_ if $debug > 3 && ($debug > 5 || length($_)); - if (/^\s*EXT/) { &scan_var($_); } } close CPP; @@ -248,6 +259,7 @@ while () { 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 diff --git a/vms/genconfig.pl b/vms/genconfig.pl index d2da572..94fcdd7 100644 --- a/vms/genconfig.pl +++ b/vms/genconfig.pl @@ -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 () { + 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"; } diff --git a/vms/sockadapt.h b/vms/sockadapt.h index 7f9150a..3e5daf3 100644 --- a/vms/sockadapt.h +++ b/vms/sockadapt.h @@ -145,7 +145,6 @@ void endnetent(); #include #include #include -#include /* 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 #endif /* We don't have these two in the system headers. */ diff --git a/vms/test.com b/vms/test.com index 7786a17..affc6a8 100644 --- a/vms/test.com +++ b/vms/test.com @@ -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' diff --git a/vms/vms.c b/vms/vms.c index 3831e39..1183a83 100644 --- 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 @@ -2339,6 +2339,12 @@ vms_image_init(int *argcp, char ***argvp) *argcp++; argvp = newap; } getredirection(argcp,argvp); +#if defined(USE_THREADS) && defined(__DECC) + { +# include + (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() */ /*}}}*/ diff --git a/vms/vmsish.h b/vms/vmsish.h index cc08f39..31a42d9 100644 --- a/vms/vmsish.h +++ b/vms/vmsish.h @@ -56,6 +56,11 @@ # include /* 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 @@ -167,12 +172,6 @@ */ #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 -- 1.8.3.1