Blame 0005-has_multi_link_arguments-Some-compilers-needs-Wl-fat.patch

Igor Gnatenko ef6081
From 8456014be8cf0ee3397dc5318ce452f17f241eba Mon Sep 17 00:00:00 2001
Igor Gnatenko ef6081
From: Xavier Claessens <xavier.claessens@collabora.com>
Igor Gnatenko ef6081
Date: Tue, 24 Apr 2018 16:27:43 -0400
Igor Gnatenko ef6081
Subject: [PATCH 05/16] has_multi_link_arguments: Some compilers needs
Igor Gnatenko ef6081
 -Wl,--fatal-warnings
Igor Gnatenko ef6081
Igor Gnatenko ef6081
ld does not treat wrong -z options as fatal by default.
Igor Gnatenko ef6081
---
Igor Gnatenko ef6081
 mesonbuild/compilers/c.py                      | 14 ++++++++++++++
Igor Gnatenko ef6081
 test cases/common/191 has link arg/meson.build |  2 ++
Igor Gnatenko ef6081
 2 files changed, 16 insertions(+)
Igor Gnatenko ef6081
Igor Gnatenko ef6081
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
Igor Gnatenko ef6081
index 88571a3c..e8110969 100644
Igor Gnatenko ef6081
--- a/mesonbuild/compilers/c.py
Igor Gnatenko ef6081
+++ b/mesonbuild/compilers/c.py
Igor Gnatenko ef6081
@@ -59,6 +59,9 @@ class CCompiler(Compiler):
Igor Gnatenko ef6081
         else:
Igor Gnatenko ef6081
             self.exe_wrapper = exe_wrapper
Igor Gnatenko ef6081
 
Igor Gnatenko ef6081
+        # Set to None until we actually need to check this
Igor Gnatenko ef6081
+        self.has_fatal_warnings_link_arg = None
Igor Gnatenko ef6081
+
Igor Gnatenko ef6081
     def needs_static_linker(self):
Igor Gnatenko ef6081
         return True # When compiling static libraries, so yes.
Igor Gnatenko ef6081
 
Igor Gnatenko ef6081
@@ -871,6 +874,17 @@ class CCompiler(Compiler):
Igor Gnatenko ef6081
         return self.has_arguments(args, env, code, mode='compile')
Igor Gnatenko ef6081
 
Igor Gnatenko ef6081
     def has_multi_link_arguments(self, args, env):
Igor Gnatenko ef6081
+        # First time we check for link flags we need to first check if we have
Igor Gnatenko ef6081
+        # --fatal-warnings, otherwise some linker checks could give some
Igor Gnatenko ef6081
+        # false positive.
Igor Gnatenko ef6081
+        fatal_warnings_args = ['-Wl,--fatal-warnings']
Igor Gnatenko ef6081
+        if self.has_fatal_warnings_link_arg is None:
Igor Gnatenko ef6081
+            self.has_fatal_warnings_link_arg = False
Igor Gnatenko ef6081
+            self.has_fatal_warnings_link_arg = self.has_multi_link_arguments(fatal_warnings_args, env)
Igor Gnatenko ef6081
+
Igor Gnatenko ef6081
+        if self.has_fatal_warnings_link_arg:
Igor Gnatenko ef6081
+            args = fatal_warnings_args + args
Igor Gnatenko ef6081
+
Igor Gnatenko ef6081
         args = self.linker_to_compiler_args(args)
Igor Gnatenko ef6081
         code = 'int main(int argc, char **argv) { return 0; }'
Igor Gnatenko ef6081
         return self.has_arguments(args, env, code, mode='link')
Igor Gnatenko ef6081
diff --git a/test cases/common/191 has link arg/meson.build b/test cases/common/191 has link arg/meson.build
Igor Gnatenko ef6081
index 255ff459..e166101a 100644
Igor Gnatenko ef6081
--- a/test cases/common/191 has link arg/meson.build	
Igor Gnatenko ef6081
+++ b/test cases/common/191 has link arg/meson.build	
Igor Gnatenko ef6081
@@ -40,3 +40,5 @@ assert(l2.length() == 0, 'First supported did not return empty array.')
Igor Gnatenko ef6081
 assert(not cc.has_multi_link_arguments([isnt_arg, is_arg]), 'Arg that should be broken is not.')
Igor Gnatenko ef6081
 assert(cc.has_multi_link_arguments(is_arg), 'Arg that should have worked does not work.')
Igor Gnatenko ef6081
 assert(cc.has_multi_link_arguments([useless, is_arg]), 'Arg that should have worked does not work.')
Igor Gnatenko ef6081
+
Igor Gnatenko ef6081
+assert(not cc.has_link_argument('-Wl,-z,nodelete42'), 'Did not detect wrong -z linker argument')
Igor Gnatenko ef6081
-- 
Igor Gnatenko ef6081
2.17.0
Igor Gnatenko ef6081