Skip to content

Commit 8992d4f

Browse files
julianneswinogaeli-schwartz
authored andcommitted
Set version, soversion from cmake if available
1 parent 0188454 commit 8992d4f

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

mesonbuild/cmake/interpreter.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ def __init__(self, target: CMakeTarget, env: 'Environment', for_machine: Machine
243243
self.compile_opts: T.Dict[str, T.List[str]] = {}
244244
self.public_compile_opts: T.List[str] = []
245245
self.pie = False
246+
self.version: T.Optional[str] = None
247+
self.soversion: T.Optional[str] = None
246248

247249
# Project default override options (c_std, cpp_std, etc.)
248250
self.override_options: T.List[str] = []
@@ -357,6 +359,8 @@ def postprocess(self, output_target_map: OutputTargetMap, root_src_dir: Path, su
357359
tgt = trace.targets.get(self.cmake_name)
358360
if tgt:
359361
self.depends_raw = trace.targets[self.cmake_name].depends
362+
self.version = trace.targets[self.cmake_name].properties.get('VERSION', [None])[0]
363+
self.soversion = trace.targets[self.cmake_name].properties.get('SOVERSION', [None])[0]
360364

361365
rtgt = resolve_cmake_trace_targets(self.cmake_name, trace, self.env, clib_compiler=self.clib_compiler)
362366
self.includes += [Path(x) for x in rtgt.include_directories]
@@ -1172,6 +1176,12 @@ def process_target(tgt: ConverterTarget) -> None:
11721176
'objects': [method(x, 'extract_all_objects') for x in objec_libs],
11731177
}
11741178

1179+
# Only set version if we know it
1180+
if tgt.version:
1181+
tgt_kwargs['version'] = tgt.version
1182+
if tgt.soversion:
1183+
tgt_kwargs['soversion'] = tgt.soversion
1184+
11751185
# Only set if installed and only override if it is set
11761186
if install_tgt and tgt.install_dir:
11771187
tgt_kwargs['install_dir'] = tgt.install_dir

test cases/cmake/2 advanced/meson.build

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,21 @@ test('test3', sub_pro.target('testEXE'))
2727
# Test that we can add a new target with the same name as the CMake subproject
2828
exe4 = executable('testEXE', ['main.cpp'], dependencies: [sub_sta])
2929
test('test4', exe4)
30+
31+
# Test if libraries are named correctly
32+
assert(sub_pro.target_type('cmModLib') == 'shared_library', 'Type should be shared_library')
33+
expected_soversion_str = '1'
34+
expected_version_str = '1.0.1'
35+
lib_file_name = import('fs').name(sub_pro.target('cmModLib').full_path())
36+
if host_machine.system() == 'linux'
37+
# Linux shared libraries end with their version: libcmModLib.so.1.0.1
38+
lib_version_ok = lib_file_name.endswith(expected_version_str)
39+
elif host_machine.system() == 'darwin'
40+
# MacOS shared libraries are suffixed with their soversion: libcmModLib.1.dylib
41+
lib_version_ok = lib_file_name.split('.')[1] == expected_soversion_str
42+
else
43+
# Don't try to assert anything about the library version, either unknown host
44+
# system or host system doesn't support versioning of shared libraries
45+
lib_version_ok = true
46+
endif
47+
assert(lib_version_ok, f'Shared library version @lib_file_name@ not picked up correctly')

0 commit comments

Comments
 (0)