[master] dd8b31444 build: wflags.py compatibility with 3.4 and catch errors

Nils Goroll nils.goroll at uplex.de
Thu Jun 10 13:43:06 UTC 2021


commit dd8b3144498578165d5ea4eef7559328f0b7fd16
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Thu Jun 10 12:19:14 2021 +0200

    build: wflags.py compatibility with 3.4 and catch errors
    
    The explicit catch on CalledProcessError will be used in a follow up
    commit to ensure that python errors do not stay unnoticed.
    
    Ref #3624

diff --git a/wflags.py b/wflags.py
index d060d1794..7912f47c8 100644
--- a/wflags.py
+++ b/wflags.py
@@ -81,6 +81,27 @@ UNDESIRABLE_WFLAGS = [
     "-Wno-nullability-completeness", # Barfs all over MacOSx
 ]
 
+
+def cc(compiler, opt, obj, src):
+    try:
+        j = subprocess.check_output(
+            [
+                compiler,
+                "-c",
+                opt,
+                "-o", obj,
+                src
+            ],
+            stderr=subprocess.STDOUT
+        )
+    except subprocess.CalledProcessError as err:
+        if err.output:
+            j = err.output
+        else:
+            j = ("Returncode %d" % err.returncode).encode('utf8')
+    return (j)
+
+
 def main():
     compiler = os.environ.get("CC", "cc")
 
@@ -91,29 +112,19 @@ def main():
 
     use_flags = []
     for i in DESIRABLE_OPTIONS + DESIRABLE_WFLAGS + UNDESIRABLE_WFLAGS:
-        j = subprocess.run(
-            [
-                compiler,
-                "-c",
-                i,
-                "-o", obj_file.name,
-                src_file.name,
-            ],
-            stderr=subprocess.PIPE,
-            stdout=subprocess.PIPE,
-        )
-        if not j.returncode and not j.stdout and not j.stderr:
+        j = cc(compiler, i, obj_file.name, src_file.name)
+        if not j:
             use_flags.append(i)
         else:
             sys.stderr.write(compiler + " cannot " + i + '\n')
-            if b'error: unrecognized command line option' in j.stderr:
+            if b'error: unrecognized command line option' in j:
                 # LLVM
                 pass
-            elif b'warning: unknown warning option' in j.stderr:
+            elif b'warning: unknown warning option' in j:
                 # GCC
                 pass
             else:
-                sys.stderr.write("\n\t" + j.stderr.decode('utf8') + '\n')
+                sys.stderr.write("\n\t" + j.decode('utf8') + '\n')
     print(" ".join(use_flags))
 
 if __name__ == "__main__":


More information about the varnish-commit mailing list