aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/__init__.py2
-rw-r--r--mesonbuild/compilers/c.py2
-rw-r--r--mesonbuild/compilers/compilers.py32
-rw-r--r--mesonbuild/compilers/cs.py2
-rw-r--r--mesonbuild/compilers/d.py4
-rw-r--r--mesonbuild/compilers/fortran.py8
-rw-r--r--mesonbuild/compilers/java.py2
7 files changed, 30 insertions, 22 deletions
diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py
index 849e229..122f969 100644
--- a/mesonbuild/compilers/__init__.py
+++ b/mesonbuild/compilers/__init__.py
@@ -30,6 +30,7 @@ __all__ = [
'clike_langs',
'c_suffixes',
'cpp_suffixes',
+ 'get_macos_dylib_install_name',
'get_base_compile_args',
'get_base_link_args',
'is_assembly',
@@ -105,6 +106,7 @@ from .compilers import (
clike_langs,
c_suffixes,
cpp_suffixes,
+ get_macos_dylib_install_name,
get_base_compile_args,
get_base_link_args,
is_header,
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 37e6a3a..cd3aad1 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -93,7 +93,7 @@ class CCompiler(Compiler):
# Almost every compiler uses this for disabling warnings
return ['-w']
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, *args):
return []
def split_shlib_to_parts(self, fname):
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 4cea6d4..68d4c5a 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -970,7 +970,9 @@ class Compiler:
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]
+ # Ensure that there is enough space for large RPATHs
+ args = ['-Wl,-headerpad_max_install_names']
+ 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):
@@ -1056,7 +1058,14 @@ ICC_WIN = 2
GNU_LD_AS_NEEDED = '-Wl,--as-needed'
APPLE_LD_AS_NEEDED = '-Wl,-dead_strip_dylibs'
-def get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+def get_macos_dylib_install_name(prefix, shlib_name, suffix, soversion):
+ install_name = prefix + shlib_name
+ if soversion is not None:
+ install_name += '.' + soversion
+ install_name += '.dylib'
+ return '@rpath/' + install_name
+
+def get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, soversion, is_shared_module):
if soversion is None:
sostr = ''
else:
@@ -1069,11 +1078,8 @@ def get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, i
elif gcc_type == GCC_OSX:
if is_shared_module:
return []
- 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)]
+ name = get_macos_dylib_install_name(prefix, shlib_name, suffix, soversion)
+ return ['-install_name', name]
else:
raise RuntimeError('Not implemented yet.')
@@ -1213,8 +1219,8 @@ class GnuCompiler:
def split_shlib_to_parts(self, fname):
return os.path.dirname(fname), fname
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
- return get_gcc_soname_args(self.gcc_type, prefix, shlib_name, suffix, path, soversion, is_shared_module)
+ def get_soname_args(self, prefix, shlib_name, suffix, soversion, is_shared_module):
+ return get_gcc_soname_args(self.gcc_type, prefix, shlib_name, suffix, soversion, is_shared_module)
def get_std_shared_lib_link_args(self):
return ['-shared']
@@ -1330,7 +1336,7 @@ class ClangCompiler:
# so it might change semantics at any time.
return ['-include-pch', os.path.join(pch_dir, self.get_pch_name(header))]
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, prefix, shlib_name, suffix, soversion, is_shared_module):
if self.clang_type == CLANG_STANDARD:
gcc_type = GCC_STANDARD
elif self.clang_type == CLANG_OSX:
@@ -1339,7 +1345,7 @@ class ClangCompiler:
gcc_type = GCC_MINGW
else:
raise MesonException('Unreachable code when converting clang type to gcc type.')
- return get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, is_shared_module)
+ return get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, soversion, is_shared_module)
def has_multi_arguments(self, args, env):
myargs = ['-Werror=unknown-warning-option', '-Werror=unused-command-line-argument']
@@ -1422,7 +1428,7 @@ class IntelCompiler:
def split_shlib_to_parts(self, fname):
return os.path.dirname(fname), fname
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, prefix, shlib_name, suffix, soversion, is_shared_module):
if self.icc_type == ICC_STANDARD:
gcc_type = GCC_STANDARD
elif self.icc_type == ICC_OSX:
@@ -1431,7 +1437,7 @@ class IntelCompiler:
gcc_type = GCC_MINGW
else:
raise MesonException('Unreachable code when converting icc type to gcc type.')
- return get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, is_shared_module)
+ return get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, soversion, is_shared_module)
# TODO: centralise this policy more globally, instead
# of fragmenting it into GnuCompiler and ClangCompiler
diff --git a/mesonbuild/compilers/cs.py b/mesonbuild/compilers/cs.py
index f78e364..e17cd4e 100644
--- a/mesonbuild/compilers/cs.py
+++ b/mesonbuild/compilers/cs.py
@@ -41,7 +41,7 @@ class CsCompiler(Compiler):
def get_link_args(self, fname):
return ['-r:' + fname]
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, *args):
return []
def get_werror_args(self):
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index 5cb3659..39e19b2 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -89,9 +89,9 @@ class DCompiler(Compiler):
def get_std_shared_lib_link_args(self):
return ['-shared']
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, prefix, shlib_name, suffix, soversion, is_shared_module):
# FIXME: Make this work for Windows, MacOS and cross-compiling
- return get_gcc_soname_args(GCC_STANDARD, prefix, shlib_name, suffix, path, soversion, is_shared_module)
+ return get_gcc_soname_args(GCC_STANDARD, prefix, shlib_name, suffix, soversion, is_shared_module)
def get_feature_args(self, kwargs, build_to_src):
res = []
diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py
index 11d07b8..6254a6a 100644
--- a/mesonbuild/compilers/fortran.py
+++ b/mesonbuild/compilers/fortran.py
@@ -58,14 +58,14 @@ class FortranCompiler(Compiler):
def get_no_warn_args(self):
return CCompiler.get_no_warn_args(self)
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
- return CCompiler.get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module)
+ def get_soname_args(self, *args):
+ return CCompiler.get_soname_args(self, *args)
def split_shlib_to_parts(self, fname):
return CCompiler.split_shlib_to_parts(self, fname)
- def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
- return CCompiler.build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath)
+ def build_rpath_args(self, *args):
+ return CCompiler.build_rpath_args(self, *args)
def get_dependency_gen_args(self, outtarget, outfile):
return []
diff --git a/mesonbuild/compilers/java.py b/mesonbuild/compilers/java.py
index a8138d7..978562c 100644
--- a/mesonbuild/compilers/java.py
+++ b/mesonbuild/compilers/java.py
@@ -25,7 +25,7 @@ class JavaCompiler(Compiler):
self.id = 'unknown'
self.javarunner = 'java'
- def get_soname_args(self, prefix, shlib_name, suffix, path, soversion, is_shared_module):
+ def get_soname_args(self, *args):
return []
def get_werror_args(self):