From 99444b3d2c4a4f7fd7128e60461005780d0c5c83 Mon Sep 17 00:00:00 2001
From: "Gary E. Miller" <gem@rellim.com>
Date: Sun, 15 Mar 2015 12:05:15 -0700
Subject: [PATCH 2/3] Add a test for C11 and check we have C11 before using
 stdatomic.h

---
 SConstruct | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/SConstruct b/SConstruct
index 566c14a..faa8651 100644
--- a/SConstruct
+++ b/SConstruct
@@ -473,6 +473,20 @@ def CheckCompilerDefines(context, define):
     context.Result(ret)
     return ret
 
+# Check if this compiler is C11 or better
+def CheckC11(context):
+    context.Message( 'Checking if compiler is C11 ...' )
+    ret = context.TryLink("""
+	#if (__STDC_VERSION__ < 201112L) 
+        #error Not C11
+        #endif
+        int main(int argc, char **argv) {
+            return 0;
+        }
+    """,'.c')
+    context.Result(ret)
+    return ret
+
 def GetLoadPath(context):
     context.Message("Getting system load path ...")
 
@@ -491,6 +505,7 @@ else:
                                              'CheckXsltproc' : CheckXsltproc,
                                              'CheckCompilerOption' : CheckCompilerOption,
                                              'CheckCompilerDefines' : CheckCompilerDefines,
+                                             'CheckC11' : CheckC11,
                                              'CheckHeaderDefines' : CheckHeaderDefines})
 
 
@@ -633,7 +648,9 @@ else:
         announce("You do not have kernel CANbus available.")
         env["nmea2000"] = False
 
-    if not config.CheckCompilerDefines("__STDC_NO_ATOMICS__") and config.CheckHeader("stdatomic.h"):
+    # check for C11 or better, and __STDC__NO_ATOMICS__ is no defined
+    # before looking for stdatomic.h
+    if not config.CheckC11() and  not config.CheckCompilerDefines("__STDC_NO_ATOMICS__") and config.CheckHeader("stdatomic.h"):
         confdefs.append("#define HAVE_STDATOMIC_H 1\n")
     else:
 	confdefs.append("/* #undef HAVE_STDATOMIC_H */\n")
-- 
2.1.0

