From 03bf1c28ac17199533dcab43432f1f0532ecfaaa Mon Sep 17 00:00:00 2001 From: Mumit Khan Date: Mon, 24 Apr 2000 23:35:43 +0000 Subject: [PATCH] gcc.c (lookup_compiler): Make multiple passes for case insensitive filesystems. * gcc.c (lookup_compiler): Make multiple passes for case insensitive filesystems. From-SVN: r33393 --- gcc/ChangeLog | 5 ++++ gcc/gcc.c | 69 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3bb179c48e..71ebba4948a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Apr 24 17:34:18 2000 Mumit Khan + + * gcc.c (lookup_compiler): Make multiple passes for case + insensitive filesystems. + 2000-04-24 Neil Booth * cpphash.c: replace HSPACE_BEFORE with PREV_WHITESPACE. diff --git a/gcc/gcc.c b/gcc/gcc.c index a5e6bbe4e5f..d8dd5637729 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -5638,38 +5638,53 @@ lookup_compiler (name, length, language) (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) || (strlen (cp->suffix) < length /* See if the suffix matches the end of NAME. */ -#ifdef OS2 - && ((!strcmp (cp->suffix, - name + length - strlen (cp->suffix)) - || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) - && !strcasecmp (cp->suffix, - name + length - strlen (cp->suffix))) -#else && !strcmp (cp->suffix, name + length - strlen (cp->suffix)) -#endif )) - { - if (cp->spec[0][0] == '@') - { - struct compiler *new; - - /* An alias entry maps a suffix to a language. - Search for the language; pass 0 for NAME and LENGTH - to avoid infinite recursion if language not found. - Construct the new compiler spec. */ - language = cp->spec[0] + 1; - new = (struct compiler *) xmalloc (sizeof (struct compiler)); - new->suffix = cp->suffix; - memcpy (new->spec, - lookup_compiler (NULL_PTR, 0, language)->spec, - sizeof new->spec); - return new; - } + break; + } - /* A non-alias entry: return it. */ - return cp; +#if defined (OS2) ||defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* look again, but case-insensitively this time. */ + if (cp < compilers) + for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) + { + if (/* The suffix `-' matches only the file name `-'. */ + (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) + || (strlen (cp->suffix) < length + /* See if the suffix matches the end of NAME. */ + && ((!strcmp (cp->suffix, + name + length - strlen (cp->suffix)) + || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) + && !strcasecmp (cp->suffix, + name + length - strlen (cp->suffix))) + )) + break; + } +#endif + + + if (cp >= compilers) + { + if (cp->spec[0][0] == '@') + { + struct compiler *new; + + /* An alias entry maps a suffix to a language. + Search for the language; pass 0 for NAME and LENGTH + to avoid infinite recursion if language not found. + Construct the new compiler spec. */ + language = cp->spec[0] + 1; + new = (struct compiler *) xmalloc (sizeof (struct compiler)); + new->suffix = cp->suffix; + memcpy (new->spec, + lookup_compiler (NULL_PTR, 0, language)->spec, + sizeof new->spec); + return new; } + + /* A non-alias entry: return it. */ + return cp; } return 0; -- 2.30.2