summaryrefslogtreecommitdiff
path: root/vms
diff options
context:
space:
mode:
Diffstat (limited to 'vms')
-rw-r--r--vms/descrip_mms.template12
-rw-r--r--vms/ext/filespec.t2
-rw-r--r--vms/gen_shrfls.pl6
-rw-r--r--vms/perlvms.pod19
-rw-r--r--vms/subconfigure.com4
-rw-r--r--vms/vms.c32
-rw-r--r--vms/vmsish.h4
7 files changed, 66 insertions, 13 deletions
diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template
index eb9d0bd97a..c96c145752 100644
--- a/vms/descrip_mms.template
+++ b/vms/descrip_mms.template
@@ -347,7 +347,7 @@ libmods : $(LIBPREREQ)
@ $(NOOP)
utils : $(utils1) $(utils2)
@ $(NOOP)
-podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com
+podxform : [.lib.pod]pod2text.com [.lib.pod]pod2html.com [.lib.pod]pod2latex.com [.lib.pod]pod2man.com [.lib.pod]podchecker.com [.lib.pod]pod2usage.com [.lib.pod]podselect.com
@ $(NOOP)
x2p : [.x2p]a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com
@ $(NOOP)
@@ -582,6 +582,16 @@ dynext : $(LIBPREREQ) $(DBG)perlshr$(E)
$(MINIPERL) $(MMS$SOURCE)
Copy/Log [.pod]podchecker.com $(MMS$TARGET)
+[.lib.pod]pod2usage.com : [.pod]pod2usage.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+ $(MINIPERL) $(MMS$SOURCE)
+ Copy/Log [.pod]pod2usage.com $(MMS$TARGET)
+
+[.lib.pod]podselect.com : [.pod]podselect.PL $(ARCHDIR)Config.pm
+ @ If F$Search("[.lib]pod.dir").eqs."" Then Create/Directory [.lib.pod]
+ $(MINIPERL) $(MMS$SOURCE)
+ Copy/Log [.pod]podselect.com $(MMS$TARGET)
+
preplibrary : $(MINIPERL_EXE) $(LIBPREREQ) $(SOCKPM)
@ Write Sys$Output "Autosplitting Perl library . . ."
@ Create/Directory [.lib.auto]
diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t
index 779396be73..bf0208d94b 100644
--- a/vms/ext/filespec.t
+++ b/vms/ext/filespec.t
@@ -86,7 +86,7 @@ some:[where.over]the.rainbow unixify /some/where/over/the.rainbow
/some/where/over/the.rainbow vmsify some:[where.over]the.rainbow
some/where/over/the.rainbow vmsify [.some.where.over]the.rainbow
../some/where/over/the.rainbow vmsify [-.some.where.over]the.rainbow
-some/../../where/over/the.rainbow vmsify [-.where.over]the.rainbow
+some/../../where/over/the.rainbow vmsify [.some.--.where.over]the.rainbow
.../some/where/over/the.rainbow vmsify [...some.where.over]the.rainbow
some/.../where/over/the.rainbow vmsify [.some...where.over]the.rainbow
/some/.../where/over/the.rainbow vmsify some:[...where.over]the.rainbow
diff --git a/vms/gen_shrfls.pl b/vms/gen_shrfls.pl
index c668120464..a109f7bdfd 100644
--- a/vms/gen_shrfls.pl
+++ b/vms/gen_shrfls.pl
@@ -186,12 +186,6 @@ LINE: while (<CPP>) {
print "opcode.h>> $_" if $debug > 2;
if (/^OP \*\s/) { &scan_func($_); }
if (/^\s*EXT/) { &scan_var($_); }
- if (/^\s+OP_/) { &scan_enum($_); }
- last LINE unless defined($_ = <CPP>);
- }
- while (/^typedef enum/ .. /^\s*\}/) {
- print "global enum>> $_" if $debug > 2;
- &scan_enum($_);
last LINE unless defined($_ = <CPP>);
}
# Check for transition to new header file
diff --git a/vms/perlvms.pod b/vms/perlvms.pod
index 53925b2541..3883233c28 100644
--- a/vms/perlvms.pod
+++ b/vms/perlvms.pod
@@ -463,7 +463,11 @@ is executed as a DCL command. Otherwise, the first token on
the command line is treated as the filespec of an image to
run, and an attempt is made to invoke it (using F<.Exe> and
the process defaults to expand the filespec) and pass the
-rest of C<exec>'s argument to it as parameters.
+rest of C<exec>'s argument to it as parameters. If the token
+has no file type, and matches a file with null type, then an
+attempt is made to determine whether the file is an executable
+image which should be invoked using C<MCR> or a text file which
+should be passed to DCL as a command procedure.
You can use C<exec> in both ways within the same script, as
long as you call C<fork> and C<exec> in pairs. Perl
@@ -558,9 +562,16 @@ specification (e.g. C<:> or C<]>), an attempt is made to expand it
using a default type of F<.Exe> and the process defaults, and if
successful, the resulting file is invoked via C<MCR>. This allows you
to invoke an image directly simply by passing the file specification
-to C<system>, a common Unixish idiom. If LIST consists
-of the empty string, C<system> spawns an interactive DCL subprocess,
-in the same fashion as typiing B<SPAWN> at the DCL prompt.
+to C<system>, a common Unixish idiom. If the token has no file type,
+and matches a file with null type, then an attempt is made to
+determine whether the file is an executable image which should be
+invoked using C<MCR> or a text file which should be passed to DCL
+as a command procedure.
+
+If LIST consists of the empty string, C<system> spawns an
+interactive DCL subprocess, in the same fashion as typiing
+B<SPAWN> at the DCL prompt.
+
Perl waits for the subprocess to complete before continuing
execution in the current process. As described in L<perlfunc>,
the return value of C<system> is a fake "status" which follows
diff --git a/vms/subconfigure.com b/vms/subconfigure.com
index 30da056561..1686c663de 100644
--- a/vms/subconfigure.com
+++ b/vms/subconfigure.com
@@ -75,6 +75,7 @@ $ perl_d_sqrtl = "define"
$ perl_d_statfs_f_flags = "undef"
$ perl_d_statfs_s = "undef"
$ perl_d_ustat = "undef"
+$ perl_i_ieeefp = "undef"
$ perl_i_sunmath = "undef"
$ perl_i_sysstatfs = "undef"
$ perl_i_sysvfs = "undef"
@@ -4003,6 +4004,7 @@ $ WC "d_gethname='" + perl_d_gethname + "'"
$ WC "d_phostname='" + perl_d_phostname + "'"
$ WC "d_accessx='" + perl_d_accessx + "'"
$ WC "d_eaccess='" + perl_d_eaccess + "'"
+$ WC "i_ieeefp='" + perl_i_ieeefp + "'"
$ WC "i_sunmath='" + perl_i_sunmath + "'"
$ WC "i_sysaccess='" + perl_i_sysaccess + "'"
$ WC "i_syssecrt='" + perl_i_syssecrt + "'"
@@ -4101,7 +4103,7 @@ $ WC "sPRIx64='" + perl_sPRIx64 + "'"
$ WC "d_llseek='" + perl_d_llseek + "'"
$ WC "d_iconv='" + perl_d_iconv +"'"
$ WC "i_iconv='" + perl_i_iconv +"'"
-$ WC "inc_version_list_init='""""'"
+$ WC "inc_version_list_init='0'"
$ WC "uselargefiles='" + perl_uselargefiles + "'"
$ WC "uselongdouble='" + perl_uselongdouble + "'"
$ WC "usemorebits='" + perl_usemorebits + "'"
diff --git a/vms/vms.c b/vms/vms.c
index a498e16266..f1f62bd6eb 100644
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -987,6 +987,7 @@ pipe_exit_routine()
info = open_pipes;
while (info) {
+ int need_eof;
_ckvmssts(SYS$SETAST(0));
need_eof = info->mode != 'r' && !info->done;
_ckvmssts(SYS$SETAST(1));
@@ -2518,6 +2519,9 @@ getredirection(int *ac, char ***av)
exit(vaxc$errno);
}
if (err != NULL) {
+ if (strcmp(err,"&1") == 0) {
+ dup2(fileno(stdout), fileno(Perl_debug_log));
+ } else {
FILE *tmperr;
if (NULL == (tmperr = fopen(err, errmode, "mbc=32", "mbf=2")))
{
@@ -2530,6 +2534,7 @@ getredirection(int *ac, char ***av)
exit(vaxc$errno);
}
}
+ }
#ifdef ARGPROC_DEBUG
PerlIO_printf(Perl_debug_log, "Arglist:\n");
for (j = 0; j < *ac; ++j)
@@ -3388,6 +3393,7 @@ setup_cmddsc(char *cmd, int check_img)
{
char vmsspec[NAM$C_MAXRSS+1], resspec[NAM$C_MAXRSS+1];
$DESCRIPTOR(defdsc,".EXE");
+ $DESCRIPTOR(defdsc2,".");
$DESCRIPTOR(resdsc,resspec);
struct dsc$descriptor_s imgdsc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0};
unsigned long int cxt = 0, flags = 1, retsts = SS$_NORMAL;
@@ -3443,18 +3449,44 @@ setup_cmddsc(char *cmd, int check_img)
imgdsc.dsc$a_pointer = s;
imgdsc.dsc$w_length = wordbreak - s;
retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags);
+ if (!(retsts&1)) {
+ _ckvmssts(lib$find_file_end(&cxt));
+ retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags);
if (!(retsts & 1) && *s == '$') {
+ _ckvmssts(lib$find_file_end(&cxt));
imgdsc.dsc$a_pointer++; imgdsc.dsc$w_length--;
retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc,0,0,&flags);
+ if (!(retsts&1)) {
_ckvmssts(lib$find_file_end(&cxt));
+ retsts = lib$find_file(&imgdsc,&resdsc,&cxt,&defdsc2,0,0,&flags);
+ }
}
+ }
+ _ckvmssts(lib$find_file_end(&cxt));
+
if (retsts & 1) {
+ FILE *fp;
s = resspec;
while (*s && !isspace(*s)) s++;
*s = '\0';
+
+ /* check that it's really not DCL with no file extension */
+ fp = fopen(resspec,"r","ctx=bin,shr=get");
+ if (fp) {
+ char b[4] = {0,0,0,0};
+ read(fileno(fp),b,4);
+ isdcl = isprint(b[0]) && isprint(b[1]) && isprint(b[2]) && isprint(b[3]);
+ fclose(fp);
+ }
+ if (check_img && isdcl) return RMS$_FNF;
+
if (cando_by_name(S_IXUSR,0,resspec)) {
New(402,VMScmd.dsc$a_pointer,7 + s - resspec + (rest ? strlen(rest) : 0),char);
+ if (!isdcl) {
strcpy(VMScmd.dsc$a_pointer,"$ MCR ");
+ } else {
+ strcpy(VMScmd.dsc$a_pointer,"@");
+ }
strcat(VMScmd.dsc$a_pointer,resspec);
if (rest) strcat(VMScmd.dsc$a_pointer,rest);
VMScmd.dsc$w_length = strlen(VMScmd.dsc$a_pointer);
diff --git a/vms/vmsish.h b/vms/vmsish.h
index 8d4a8caf6b..a09d2be438 100644
--- a/vms/vmsish.h
+++ b/vms/vmsish.h
@@ -263,6 +263,10 @@
#define HAS_WAIT
#define PERL_FS_VER_FMT "%d_%d_%d"
+/* Temporary; we need to add support for this to Configure.Com */
+#ifdef PERL_INC_VERSION_LIST
+# undef PERL_INC_VERSION_LIST
+#endif
/* VMS:
* This symbol, if defined, indicates that the program is running under