From: Nick Clifton Date: Sat, 30 Jun 2001 08:46:31 +0000 (+0000) Subject: Append a DIR_SEPARATOR to a path specified by the -B switch, if doing so would X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=07804c3b7d630c9e75a42f74f2eec39dba49aa64;p=gcc.git Append a DIR_SEPARATOR to a path specified by the -B switch, if doing so would create a valid directory name. From-SVN: r43664 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index aaa636eb5df..f4fbe8aac78 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2001-06-29 Nick Clifton + + * gcc.c (process_command): Append a DIR_SEPARATOR to a path + specified by the -B switch, if doing so would create a valid + directory name. + * doc/invoke.texi: Document changed behaviour of -B. + 2001-06-29 DJ Delorie * simplify-rtx.c (simplify_subreg): When simplifying a CONCAT, at diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6b2413394df..37645ebc7ab 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -4398,6 +4398,10 @@ those results in a file name that is found, the unmodified program name is searched for using the directories specified in your @env{PATH} environment variable. +The compiler will check to see if the path provided by the @option{-B} +refers to a directory, and if necessary it will add a directory +separator character at the end of the path. + @option{-B} prefixes that effectively specify directory names also apply to libraries in the linker, because the compiler translates these options into @option{-L} options for the linker. They also apply to @@ -4414,6 +4418,10 @@ Another way to specify a prefix much like the @option{-B} prefix is to use the environment variable @env{GCC_EXEC_PREFIX}. @xref{Environment Variables}. +As a special kludge, if the path provided by @option{-B} is +@samp{[foo/]stage/} then it will be replaced by +@samp{[foo/]include}. This is to help with boot-strapping the compiler. + @item -specs=@var{file} @opindex specs Process @var{file} after the compiler reads in the standard @file{specs} diff --git a/gcc/gcc.c b/gcc/gcc.c index 5f851e20863..50be2f8e614 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -3366,36 +3366,55 @@ process_command (argc, argv) case 'B': { const char *value; + int len; + if (p[1] == 0 && i + 1 == argc) fatal ("argument to `-B' is missing"); if (p[1] == 0) value = argv[++i]; else value = p + 1; - { - /* As a kludge, if the arg is "[foo/]stageN/", just - add "[foo/]include" to the include prefix. */ - int len = strlen (value); - if ((len == 7 - || (len > 7 - && (IS_DIR_SEPARATOR (value[len - 8])))) - && strncmp (value + len - 7, "stage", 5) == 0 - && ISDIGIT (value[len - 2]) - && (IS_DIR_SEPARATOR (value[len - 1]))) - { - if (len == 7) - add_prefix (&include_prefixes, "include", NULL, + + len = strlen (value); + + /* Catch the case where the user has forgotten to append a + directory seperator to the path. Note, they may be using + -B to add an executable name prefix, eg "i386-elf-", in + order to distinguish between multiple installations of + GCC in the same directory. Hence we must check to see + if appending a directory separator actually makes a + valid directory name. */ + if (! IS_DIR_SEPARATOR (value [len - 1]) + && is_directory (value, "", 0)) + { + value = strcpy (xmalloc (len + 2), value); + value[len] = DIR_SEPARATOR; + value[++ len] = 0; + } + + /* As a kludge, if the arg is "[foo/]stageN/", just + add "[foo/]include" to the include prefix. */ + if ((len == 7 + || (len > 7 + && (IS_DIR_SEPARATOR (value[len - 8])))) + && strncmp (value + len - 7, "stage", 5) == 0 + && ISDIGIT (value[len - 2]) + && (IS_DIR_SEPARATOR (value[len - 1]))) + { + if (len == 7) + add_prefix (&include_prefixes, "include", NULL, + PREFIX_PRIORITY_B_OPT, 0, NULL); + else + { + char * string = xmalloc (len + 1); + + strncpy (string, value, len - 7); + strcpy (string + len - 7, "include"); + add_prefix (&include_prefixes, string, NULL, PREFIX_PRIORITY_B_OPT, 0, NULL); - else - { - char *string = xmalloc (len + 1); - strncpy (string, value, len-7); - strcpy (string+len-7, "include"); - add_prefix (&include_prefixes, string, NULL, - PREFIX_PRIORITY_B_OPT, 0, NULL); - } - } - } + } + } + add_prefix (&exec_prefixes, value, NULL, PREFIX_PRIORITY_B_OPT, 0, &warn_B); add_prefix (&startfile_prefixes, value, NULL,