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:
parent
5219955ccd
commit
7792cf668e
2 changed files with 21 additions and 24 deletions
|
@ -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 ()
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue