This provides a spec to insert "-rpath DDD" for each DDD corresponding to a compiler startfile directory. This allows a target to use @rpath as the install path for libraries, and have the compiler provide the necessary rpath to handle this.
gcc/ChangeLog: * gcc.c (RUNPATH_OPTION): New. (do_spec_1): Provide '%P' as a spec to insert rpaths for each compiler startfile path. --- gcc/gcc.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gcc/gcc.c b/gcc/gcc.c index 506c2acc282..7b52d0bcbfd 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -572,6 +572,7 @@ or with constant text in a single argument. %l process LINK_SPEC as a spec. %L process LIB_SPEC as a spec. %M Output multilib_os_dir. + %P Output a RUNPATH_OPTION for each directory in startfile_prefixes. %G process LIBGCC_SPEC as a spec. %R Output the concatenation of target_system_root and target_sysroot_suffix. @@ -1191,6 +1192,10 @@ proper position among the other output files. */ # define SYSROOT_HEADERS_SUFFIX_SPEC "" #endif +#ifndef RUNPATH_OPTION +# define RUNPATH_OPTION "-rpath" +#endif + static const char *asm_debug = ASM_DEBUG_SPEC; static const char *asm_debug_option = ASM_DEBUG_OPTION_SPEC; static const char *cpp_spec = CPP_SPEC; @@ -6130,6 +6135,19 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) } break; + case 'P': + { + struct spec_path_info info; + + info.option = RUNPATH_OPTION; + info.append_len = 0; + info.omit_relative = false; + info.separate_options = true; + + for_each_path (&startfile_prefixes, true, 0, spec_path, &info); + } + break; + case 'e': /* %efoo means report an error with `foo' as error message and don't execute any more commands for this file. */ -- 2.24.3 (Apple Git-128)