aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-10-07 19:56:04 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2016-10-08 01:02:16 +0530
commitce1393609f0f870ffa1b0634f561613b7b627f0b (patch)
treeef7a2f23341f93370784cd9efc38a7441733af9a /mesonbuild/build.py
parentee8b3b12a067c52efcfb7c05c638023fbe0495c8 (diff)
downloadmeson-ce1393609f0f870ffa1b0634f561613b7b627f0b.zip
meson-ce1393609f0f870ffa1b0634f561613b7b627f0b.tar.gz
meson-ce1393609f0f870ffa1b0634f561613b7b627f0b.tar.bz2
Error out if shared lib links to static lib without PIC
This is only needed on Linux and BSD. So, we always unconditionally enable self.pic for Windows and OS X.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index a532509..3d41cda 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -524,9 +524,15 @@ class BuildTarget():
raise InvalidArguments('Name suffix must be a string.')
self.suffix = name_suffix
if isinstance(self, StaticLibrary):
- self.pic = kwargs.get('pic', False)
- if not isinstance(self.pic, bool):
- raise InvalidArguments('Argument pic must be boolean')
+ # You can't disable PIC on OS X. The compiler ignores -fno-PIC.
+ # PIC is always on for Windows (all code is position-independent
+ # since library loading is done differently)
+ if for_darwin(self.is_cross, self.environment) or for_windows(self.is_cross, self.environment):
+ self.pic = True
+ else:
+ self.pic = kwargs.get('pic', False)
+ if not isinstance(self.pic, bool):
+ raise InvalidArguments('Argument pic must be boolean')
def get_subdir(self):
return self.subdir
@@ -629,6 +635,8 @@ by calling get_variable() on the subproject object.''')
t = t.held_object
if not isinstance(t, (StaticLibrary, SharedLibrary)):
raise InvalidArguments('Link target is not library.')
+ if isinstance(self, SharedLibrary) and isinstance(t, StaticLibrary) and not t.pic:
+ raise InvalidArguments("Can't link a non-PIC static library into a shared library")
if self.is_cross != t.is_cross:
raise InvalidArguments('Tried to mix cross built and native libraries in target %s.' % self.name)
self.link_targets.append(t)