/* By default there is no special suffix for executables. */
#ifndef EXECUTABLE_SUFFIX
-#if __MSDOS__
-#define EXECUTABLE_SUFFIX ".exe"
-#else
#define EXECUTABLE_SUFFIX ""
#endif
+
+/* By default, colon separates directories in a path. */
+#ifndef PATH_SEPARATOR
+#define PATH_SEPARATOR ':'
#endif
#define obstack_chunk_alloc xmalloc
static struct obstack obstack;
/* This is the obstack to build an environment variable to pass to
- collect2 that describes all of the relavant switches of what to
+ collect2 that describes all of the relevant switches of what to
pass the compiler in building the list of pointers to constructors
and destructors. */
%{S*:X} substitutes X if one or more switches whose names with -S are
specified to CC. Note that the tail part of the -S option
(i.e. the part matched by the `*') will be substituted for each
- occurance of %* within X.
+ occurrence of %* within X.
%{S:X} substitutes X, but only if the -S switch was given to CC.
%{!S:X} substitutes X, but only if the -S switch was NOT given to CC.
%{|S:X} like %{S:X}, but if no S switch, substitute `-'.
/* Have gcc do the search. */
/* -u* was put back because both BSD and SysV seem to support it. */
static char *link_command_spec = "\
-%{!c:%{!M:%{!MM:%{!E:%{!S:ld %X %l %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
+%{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
%{r} %{s} %{T*} %{t} %{u*} %{x} %{z}\
%{!A:%{!nostdlib:%S}} \
%{L*} %D %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}";
#else
/* Use -l and have the linker do the search. */
static char *link_command_spec = "\
-%{!c:%{!M:%{!MM:%{!E:%{!S:ld %X %l %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
+%{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \
%{r} %{s} %{T*} %{t} %{u*} %{x} %{z}\
%{!A:%{!nostdlib:%S}} \
%{L*} %D %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}";
#endif
/* A vector of options to give to the linker.
- These options are accumlated by %x
+ These options are accumulated by %x
and substituted into the linker command with %X. */
static int n_linker_options;
static char **linker_options;
putenv (str)
char *str;
{
-#ifndef __MSDOS__ /* not sure about MS/DOS */
#ifndef VMS /* nor about VMS */
extern char **environ;
bcopy (old_environ, environ+1, sizeof (char *) * (num_envs+1));
#endif /* VMS */
-#endif /* __MSDOS__ */
}
#endif /* HAVE_PUTENV */
FILE *argfile;
int i;
- scmd = (char *)malloc(strlen(program) + strlen(temp_filename) + 6);
- sprintf(scmd, "%s @%s.gp", program, temp_filename);
- argfile = fopen(scmd+strlen(program)+2, "w");
+ scmd = (char *)malloc (strlen (program) + strlen (temp_filename) + 6);
+ sprintf (scmd, "%s @%s.gp", program, temp_filename);
+ argfile = fopen (scmd+strlen (program) + 2, "w");
if (argfile == 0)
- pfatal_with_name(scmd+strlen(program)+2);
+ pfatal_with_name (scmd + strlen (program) + 2);
for (i=1; argv[i]; i++)
- fprintf(argfile, "%s\n", argv[i]);
- fclose(argfile);
+ {
+ char *cp;
+ for (cp = argv[i]; *cp; cp++)
+ {
+ if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
+ fputc ('\\', argfile);
+ fputc (*cp, argfile);
+ }
+ fputc ('\n', argfile);
+ }
+ fclose (argfile);
- i = system(scmd);
+ i = system (scmd);
- remove(scmd+strlen(program)+2);
+ remove (scmd + strlen (program) + 2);
return i << 8;
}
startp = endp = temp;
while (1)
{
- if ((*endp == ':') || (*endp == 0))
+ if (*endp == PATH_SEPARATOR || *endp == 0)
{
strncpy (nstore, startp, endp-startp);
if (endp == startp)
startp = endp = temp;
while (1)
{
- if ((*endp == ':') || (*endp == 0))
+ if (*endp == PATH_SEPARATOR || *endp == 0)
{
strncpy (nstore, startp, endp-startp);
if (endp == startp)
startp = endp = temp;
while (1)
{
- if ((*endp == ':') || (*endp == 0))
+ if (*endp == PATH_SEPARATOR || *endp == 0)
{
strncpy (nstore, startp, endp-startp);
if (endp == startp)
{
struct prefix_list *pl
= (i == 0 ? library_prefix.plist : startfile_prefix.plist);
+ int bufsize = 100;
+ char *buffer = (char *) xmalloc (bufsize);
+ int idx;
+
for (; pl; pl = pl->next)
{
#ifdef RELATIVE_PREFIX_NOT_LINKDIR
do_spec_1 (" ", 0, 0);
#endif
do_spec_1 (pl->prefix, 1, 0);
- do_spec_1 (machine_suffix, 1, 0);
+ /* Remove slash from machine_suffix. */
+ if (strlen (machine_suffix) >= bufsize)
+ bufsize = strlen (machine_suffix) * 2 + 1;
+ buffer = (char *) xrealloc (buffer, bufsize);
+ strcpy (buffer, machine_suffix);
+ idx = strlen (buffer);
+ if (buffer[idx - 1] == '/')
+ buffer[idx - 1] = 0;
+ do_spec_1 (buffer, 1, 0);
/* Make this a separate argument. */
do_spec_1 (" ", 0, 0);
}
#ifdef SPACE_AFTER_L_OPTION
do_spec_1 (" ", 0, 0);
#endif
- do_spec_1 (pl->prefix, 1, 0);
+ /* Remove slash from pl->prefix. */
+ if (strlen (pl->prefix) >= bufsize)
+ bufsize = strlen (pl->prefix) * 2 + 1;
+ buffer = (char *) xrealloc (buffer, bufsize);
+ strcpy (buffer, pl->prefix);
+ idx = strlen (buffer);
+ if (buffer[idx - 1] == '/')
+ buffer[idx - 1] = 0;
+ do_spec_1 (buffer, 1, 0);
/* Make this a separate argument. */
do_spec_1 (" ", 0, 0);
}
}
}
+ free (buffer);
}
break;