summaryrefslogtreecommitdiff
path: root/function.c
diff options
context:
space:
mode:
authorJohn Malmberg <wb8tyw@qsl.net>2014-11-27 21:28:30 -0600
committerPaul Smith <psmith@gnu.org>2015-01-27 21:43:16 -0500
commite4ac28e83081fa273b19fa778d46c1e3052cb834 (patch)
tree6fe0cfcee6056f6b84433cf3c1ee07ef66843c55 /function.c
parent1fae20a2b7894ab24bb2a17e48178e70c4cf0db9 (diff)
downloadgunmake-e4ac28e83081fa273b19fa778d46c1e3052cb834.tar.gz
Fix bs-nl handling, exit and Environment for VMS.
This fix required a complete rewrite of the command parser vmsjobs.c child_execute_job. The old parser had too many incorrect assumptions about DCL commands and could not be repaired to extended. The parser now more closely parses VMS commands and handles quoted commands and redirection. Command File mode has been improved, but can not fully support bs-nl syntax. VMS Unix shell simulation has been improved. * commands.c: vms_comma_separator is now a run-time setting. * function.c: vms_comma_separator is now a run-time setting. * function.c(func_basename_dir) now reports "[]" or "./" based on VMS crtl runtime setting. * job.c(start_job_command): VMS Handle empty commands propery. * main.c: Add VMS environment variables for run-time settings. * vms_legacy_behavior - Force older behavior. * vms_comma_separator - Commas or spaces for separators. * vms_unix_simulation - Enhanced Posix shell simulation features. * Detect if VMS CRTL is set to report Unix paths instead of VMS. * ':' and '>' are also MAP_DIRSEP on VMS. * makeint.h: Add VMS run-time option variables. * readme.vms: Update to current behavior. * variable.c(define_variable_in_set): Fix VMS Environment variable lookup. * variable.c(define_automatic_variables): Remove some VMS specific automatic variables and use the Unix ones instead. * vms_export_symbol.c: Set max symbol size correctly. * vmsjobs.c: child_execute_job() complete rewrite of VMS comand parsing. * vmsjobs.c(build_vms_cmd): VMS commmand building with shell simulation. Signed-off-by: Paul Smith <psmith@gnu.org>
Diffstat (limited to 'function.c')
-rw-r--r--function.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/function.c b/function.c
index 269c8ac..8bd2b5c 100644
--- a/function.c
+++ b/function.c
@@ -566,10 +566,12 @@ func_notdir_suffix (char *o, char **argv, const char *funcname)
if (is_notdir || p >= p2)
{
#ifdef VMS
- o = variable_buffer_output (o, ",", 1);
-#else
- o = variable_buffer_output (o, " ", 1);
+ if (vms_comma_separator)
+ o = variable_buffer_output (o, ",", 1);
+ else
#endif
+ o = variable_buffer_output (o, " ", 1);
+
doneany = 1;
}
}
@@ -596,7 +598,7 @@ func_basename_dir (char *o, char **argv, const char *funcname)
int stop = MAP_DIRSEP | (is_basename ? MAP_DOT : 0) | MAP_NUL;
#ifdef VMS
/* As in func_notdir_suffix ... */
- char *vms_p3 = alloca(strlen(p3) + 1);
+ char *vms_p3 = alloca (strlen(p3) + 1);
int i;
for (i = 0; p3[i]; i++)
if (p3[i] == ',')
@@ -624,7 +626,12 @@ func_basename_dir (char *o, char **argv, const char *funcname)
#endif
else if (is_dir)
#ifdef VMS
- o = variable_buffer_output (o, "[]", 2);
+ {
+ if (vms_report_unix_paths)
+ o = variable_buffer_output (o, "./", 2);
+ else
+ o = variable_buffer_output (o, "[]", 2);
+ }
#else
#ifndef _AMIGA
o = variable_buffer_output (o, "./", 2);
@@ -637,10 +644,12 @@ func_basename_dir (char *o, char **argv, const char *funcname)
o = variable_buffer_output (o, p2, len);
#ifdef VMS
- o = variable_buffer_output (o, ",", 1);
-#else
- o = variable_buffer_output (o, " ", 1);
+ if (vms_comma_separator)
+ o = variable_buffer_output (o, ",", 1);
+ else
#endif
+ o = variable_buffer_output (o, " ", 1);
+
doneany = 1;
}
@@ -1440,12 +1449,9 @@ fold_newlines (char *buffer, unsigned int *length, int trim_newlines)
*length = last_nonnl - buffer;
}
-
-
pid_t shell_function_pid = 0;
int shell_function_completed;
-
#ifdef WINDOWS32
/*untested*/