Use absolute paths for rpaths on OSX.

pull/2618/head
Jussi Pakkanen 7 years ago
parent 655137a74b
commit fa6f01d096
  1. 2
      mesonbuild/backend/backends.py
  2. 2
      mesonbuild/compilers/c.py
  3. 16
      mesonbuild/compilers/compilers.py

@ -330,6 +330,8 @@ class Backend:
link_deps = target.get_all_link_deps() link_deps = target.get_all_link_deps()
result = [] result = []
for ld in link_deps: for ld in link_deps:
if ld is target:
continue
prospective = self.get_target_dir(ld) prospective = self.get_target_dir(ld)
if prospective not in result: if prospective not in result:
result.append(prospective) result.append(prospective)

@ -90,6 +90,8 @@ class CCompiler(Compiler):
# The default behavior is this, override in MSVC # The default behavior is this, override in MSVC
def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath): def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
if self.id == 'clang' and self.clang_type == compilers.CLANG_OSX:
return self.build_osx_rpath_args(build_dir, rpath_paths, build_rpath)
return self.build_unix_rpath_args(build_dir, from_dir, rpath_paths, build_rpath, install_rpath) return self.build_unix_rpath_args(build_dir, from_dir, rpath_paths, build_rpath, install_rpath)
def get_dependency_gen_args(self, outtarget, outfile): def get_dependency_gen_args(self, outtarget, outfile):

@ -817,6 +817,16 @@ class Compiler:
def get_instruction_set_args(self, instruction_set): def get_instruction_set_args(self, instruction_set):
return None return None
def build_osx_rpath_args(self, build_dir, rpath_paths, build_rpath):
if not rpath_paths and not build_rpath:
return []
# On OSX, rpaths must be absolute.
abs_rpaths = [os.path.join(build_dir, p) for p in rpath_paths]
if build_rpath != '':
abs_rpaths.append(build_rpath)
args = ['-Wl,-rpath,' + rp for rp in abs_rpaths]
return args
def build_unix_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath): def build_unix_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
if not rpath_paths and not install_rpath and not build_rpath: if not rpath_paths and not install_rpath and not build_rpath:
return [] return []
@ -879,7 +889,11 @@ def get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, i
elif gcc_type == GCC_OSX: elif gcc_type == GCC_OSX:
if is_shared_module: if is_shared_module:
return [] return []
return ['-install_name', os.path.join(path, 'lib' + shlib_name + '.dylib')] install_name = prefix + shlib_name
if soversion is not None:
install_name += '.' + soversion
install_name += '.dylib'
return ['-install_name', os.path.join('@rpath', install_name)]
else: else:
raise RuntimeError('Not implemented yet.') raise RuntimeError('Not implemented yet.')

Loading…
Cancel
Save