diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index 291157f2f827..4866b30a5c49 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -534,6 +534,9 @@ def process_object_libs(self, obj_target_list: T.List['ConverterTarget'], linker # Filter out object files from the sources self.generated = [x for x in self.generated if not any(x.name.endswith('.' + y) for y in obj_suffixes)] + if not self.sources and not self.generated and self.object_libs: + self.pie |= all(x.pie for x in self.object_libs) + def _append_objlib_sources(self, tgt: 'ConverterTarget') -> None: self.includes += tgt.includes self.sources += tgt.sources diff --git a/test cases/cmake/29 object library pic/meson.build b/test cases/cmake/29 object library pic/meson.build new file mode 100644 index 000000000000..217507f86c98 --- /dev/null +++ b/test cases/cmake/29 object library pic/meson.build @@ -0,0 +1,7 @@ +project('29 object library pic', 'c') + +cm = import('cmake') +sub_pro = cm.subproject('cmTest') +sub_dep = sub_pro.dependency('cmTestLib') + +shared_library('slib', 'slib.c', dependencies: sub_dep) diff --git a/test cases/cmake/29 object library pic/slib.c b/test cases/cmake/29 object library pic/slib.c new file mode 100644 index 000000000000..de8d06c9965a --- /dev/null +++ b/test cases/cmake/29 object library pic/slib.c @@ -0,0 +1,3 @@ +extern void f(void); + +void g(void) { f(); } diff --git a/test cases/cmake/29 object library pic/subprojects/cmTest/CMakeLists.txt b/test cases/cmake/29 object library pic/subprojects/cmTest/CMakeLists.txt new file mode 100644 index 000000000000..f8c668109408 --- /dev/null +++ b/test cases/cmake/29 object library pic/subprojects/cmTest/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION ${CMAKE_VERSION}) + +project(cmTest C) + +add_library(cmTestLib_objs OBJECT "x.c") +set_target_properties(cmTestLib_objs PROPERTIES POSITION_INDEPENDENT_CODE TRUE) + +add_library(cmTestLib STATIC $) +set_target_properties(cmTestLib PROPERTIES POSITION_INDEPENDENT_CODE TRUE) diff --git a/test cases/cmake/29 object library pic/subprojects/cmTest/x.c b/test cases/cmake/29 object library pic/subprojects/cmTest/x.c new file mode 100644 index 000000000000..bcafe0498410 --- /dev/null +++ b/test cases/cmake/29 object library pic/subprojects/cmTest/x.c @@ -0,0 +1 @@ +void f(void) { }