aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers/compilers.py
diff options
context:
space:
mode:
authorTom Schoonjans <Tom.Schoonjans@diamond.ac.uk>2017-11-03 13:44:38 +0000
committerJussi Pakkanen <jpakkane@gmail.com>2018-04-16 22:26:16 +0300
commitfa6ca160548d7e8df9c4c724e6c96f5e004e5316 (patch)
tree24568f4fe81a1a4201e4e4e5e9800abc28a5d23d /mesonbuild/compilers/compilers.py
parent0e00470d8c9711e62848a1d697d156cbab66e0bc (diff)
downloadmeson-fa6ca160548d7e8df9c4c724e6c96f5e004e5316.zip
meson-fa6ca160548d7e8df9c4c724e6c96f5e004e5316.tar.gz
meson-fa6ca160548d7e8df9c4c724e6c96f5e004e5316.tar.bz2
Add macOS linker versioning information
This patch exploits the information residing in ltversion to set the -compatibility_version and -current_version flags that are passed to the linker on macOS.
Diffstat (limited to 'mesonbuild/compilers/compilers.py')
-rw-r--r--mesonbuild/compilers/compilers.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 417cbae..8337621 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -939,7 +939,7 @@ 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_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, version, is_shared_module):
if soversion is None:
sostr = ''
else:
@@ -956,7 +956,15 @@ def get_gcc_soname_args(gcc_type, prefix, shlib_name, suffix, path, soversion, i
if soversion is not None:
install_name += '.' + soversion
install_name += '.dylib'
- return ['-install_name', os.path.join('@rpath', install_name)]
+ args = ['-install_name', os.path.join('@rpath', install_name)]
+ if version and len(version.split('.')) == 3:
+ splitted = version.split('.')
+ major = int(splitted[0])
+ minor = int(splitted[1])
+ revision = int(splitted[2])
+ args += ['-compatibility_version', '%d' % (major + minor + 1)]
+ args += ['-current_version', '%d.%d' % (major + minor + 1, revision)]
+ return args
else:
raise RuntimeError('Not implemented yet.')
@@ -1094,8 +1102,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, path, soversion, version, is_shared_module):
+ return get_gcc_soname_args(self.gcc_type, prefix, shlib_name, suffix, path, soversion, version, is_shared_module)
def get_std_shared_lib_link_args(self):
return ['-shared']
@@ -1193,7 +1201,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, path, soversion, version, is_shared_module):
if self.clang_type == CLANG_STANDARD:
gcc_type = GCC_STANDARD
elif self.clang_type == CLANG_OSX:
@@ -1202,7 +1210,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, path, soversion, version, is_shared_module)
def has_multi_arguments(self, args, env):
myargs = ['-Werror=unknown-warning-option', '-Werror=unused-command-line-argument']
@@ -1276,7 +1284,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, path, soversion, version, is_shared_module):
if self.icc_type == ICC_STANDARD:
gcc_type = GCC_STANDARD
elif self.icc_type == ICC_OSX:
@@ -1285,7 +1293,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, path, soversion, version, is_shared_module)
# TODO: centralise this policy more globally, instead
# of fragmenting it into GnuCompiler and ClangCompiler