Darwin, objective-c - register gnu-runtime headers correctly.

Darwin is able to use two runtimes for objective-c; the
default is its native "NeXT" runtime, but also it can build
code using the "gnu-runtime".  In order to do this, we have to
be able to find the gnu-runtime headers (which are installed
into the compiler's tree).

The process to do this is erroneously prepending the sysroot
to this when a sysroot is in force.  The gnu-runtime headers have
never been installed in a Darwin (macOS) SDK so we must make
sure that they are found local to the compiler.

gcc/

2019-05-18  Iain Sandoe  <iain@sandoe.co.uk>

	* config/darwin-c.c (darwin_register_objc_includes): Do not
	prepend the sysroot when building gnu-runtime header search
	paths.

From-SVN: r271371
This commit is contained in:
Iain Sandoe 2019-05-18 08:44:18 +00:00 committed by Iain Sandoe
parent 5219955ccd
commit 7792cf668e
2 changed files with 21 additions and 24 deletions

View file

@ -1,3 +1,9 @@
2019-05-18 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin-c.c (darwin_register_objc_includes): Do not
prepend the sysroot when building gnu-runtime header search
paths.
2019-05-18 Iain Sandoe <iain@sandoe.co.uk>
* config/darwin.c (darwin_file_end): Use switch_to_section ()

View file

@ -463,41 +463,32 @@ static const char *framework_defaults [] =
/* Register the GNU objective-C runtime include path if STDINC. */
void
darwin_register_objc_includes (const char *sysroot, const char *iprefix,
int stdinc)
darwin_register_objc_includes (const char *sysroot ATTRIBUTE_UNUSED,
const char *iprefix, int stdinc)
{
const char *fname;
size_t len;
/* We do not do anything if we do not want the standard includes. */
if (!stdinc)
return;
/* If we want standard includes; Register the GNU OBJC runtime include
path if we are compiling OBJC with GNU-runtime.
This path is compiler-relative, we don't want to prepend the sysroot
since it's not expected to find the headers there. */
fname = GCC_INCLUDE_DIR "-gnu-runtime";
/* Register the GNU OBJC runtime include path if we are compiling OBJC
with GNU-runtime. */
if (c_dialect_objc () && !flag_next_runtime)
if (stdinc && c_dialect_objc () && !flag_next_runtime)
{
const char *fname = GCC_INCLUDE_DIR "-gnu-runtime";
char *str;
/* See if our directory starts with the standard prefix.
size_t len;
/* See if our directory starts with the standard prefix.
"Translate" them, i.e. replace /usr/local/lib/gcc... with
IPREFIX and search them first. */
if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0 && !sysroot
if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0
&& !strncmp (fname, cpp_GCC_INCLUDE_DIR, len))
{
str = concat (iprefix, fname + len, NULL);
/* FIXME: wrap the headers for C++awareness. */
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
add_path (str, INC_SYSTEM, /*c++aware=*/true, false);
}
/* Should this directory start with the sysroot? */
if (sysroot)
str = concat (sysroot, fname, NULL);
else
str = update_path (fname, "");
add_path (str, INC_SYSTEM, /*c++aware=*/false, false);
str = update_path (fname, "");
add_path (str, INC_SYSTEM, /*c++aware=*/true, false);
}
}