[geany/geany] 1c6b90: waf: Check and enable C99 compiler support

Colomban Wendling git-noreply at xxxxx
Wed Oct 21 23:38:15 UTC 2015


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Wed, 21 Oct 2015 23:38:15 UTC
Commit:      1c6b908c9e7f4d6d1ca0754de4c6564f3c8ac7a7
             https://github.com/geany/geany/commit/1c6b908c9e7f4d6d1ca0754de4c6564f3c8ac7a7

Log Message:
-----------
waf: Check and enable C99 compiler support

Closes #679.


Modified Paths:
--------------
    wscript

Modified: wscript
65 lines changed, 60 insertions(+), 5 deletions(-)
===================================================================
@@ -45,7 +45,7 @@ import tempfile
 from waflib import Logs, Options, Scripting, Utils
 from waflib.Build import BuildContext
 from waflib.Configure import ConfigurationContext
-from waflib.Errors import WafError
+from waflib.Errors import ConfigurationError, WafError
 from waflib.TaskGen import feature, before_method
 from waflib.Tools.compiler_c import c_compiler
 from waflib.Tools.compiler_cxx import cxx_compiler
@@ -188,6 +188,7 @@ def configure(conf):
     conf.check_waf_version(mini='1.6.1')
 
     conf.load('compiler_c')
+    _check_c99(conf)
     is_win32 = _target_is_win32(conf)
 
     visibility_hidden_supported = conf.check_cc(cflags=['-Werror', '-fvisibility=hidden'], mandatory=False)
@@ -410,7 +411,7 @@ def build(bld):
             includes                = ['.', 'src/', 'scintilla/include', 'tagmanager/src'],
             defines                 = 'G_LOG_DOMAIN="%s"' % plugin_name,
             target                  = plugin_name,
-            uselib                  = ['GTK', 'GLIB', 'GMODULE'] + uselib_add,
+            uselib                  = ['GTK', 'GLIB', 'GMODULE', 'C99'] + uselib_add,
             use                     = ['geany'],
             install_path            = instpath)
 
@@ -422,7 +423,7 @@ def build(bld):
         target          = 'ctags',
         includes        = ['.', 'tagmanager', 'tagmanager/ctags'],
         defines         = 'G_LOG_DOMAIN="CTags"',
-        uselib          = ['cshlib', 'GLIB', 'geanyexport'])
+        uselib          = ['cshlib', 'GLIB', 'geanyexport', 'C99'])
 
     # Tagmanager
     bld.objects(
@@ -432,7 +433,7 @@ def build(bld):
         target          = 'tagmanager',
         includes        = ['.', 'tagmanager', 'tagmanager/ctags'],
         defines         = ['GEANY_PRIVATE', 'G_LOG_DOMAIN="Tagmanager"'],
-        uselib          = ['cshlib', 'GTK', 'GLIB', 'geanyexport'])
+        uselib          = ['cshlib', 'GTK', 'GLIB', 'geanyexport', 'C99'])
 
     # MIO
     bld.objects(
@@ -486,7 +487,7 @@ def build(bld):
         name    = 'signallist.i',
         rule    = gen_signallist)
 
-    base_uselibs = ['GTK', 'GLIB', 'GMODULE', 'GIO', 'GTHREAD', 'WIN32', 'MAC_INTEGRATION', 'SUNOS_SOCKET', 'M']
+    base_uselibs = ['GTK', 'GLIB', 'GMODULE', 'GIO', 'GTHREAD', 'WIN32', 'MAC_INTEGRATION', 'SUNOS_SOCKET', 'M', 'C99']
 
     # libgeany
     bld.shlib(
@@ -914,3 +915,57 @@ def _uc_first(string, ctx):
     if _target_is_win32(ctx):
         return string.title()
     return string
+
+
+# Copied from Geany-Plugins
+def _check_c99(conf):
+    # FIXME: improve some checks?
+    # TODO: look at Autoconf's C99 checks?
+    fragment = '''
+    // single-line comments
+
+    #include <stdbool.h>
+
+    struct s { int a, b; };
+
+    // inlines
+    static inline void fun_inline(struct s param) {}
+
+    int main(void) {
+        _Bool b = false;
+
+        // variable declaration in for body
+        for (int i = 0; i < 2; i++);
+
+        // compound literals
+        fun_inline((struct s) { 1, 2 });
+
+        // mixed declarations and code
+        int mixed = 0;
+
+        // named initializers
+        struct s name_inited = {
+            .a = 42,
+            .b = 64
+        };
+
+        return (b || mixed || ! name_inited.a);
+    }
+    '''
+
+    exc = None
+    # list of flags is stolen from Autoconf 2.69
+    flags = ['', '-std=gnu99', '-std=c99', '-c99', '-AC99',
+             '-D_STDC_C99=', '-qlanglvl=extc99']
+    for flag in flags:
+        try:
+            desc = ['with flag %s' % flag, 'with no flags'][not flag]
+            conf.check_cc(fragment=fragment, uselib_store='C99', cflags=flag,
+                          msg="Checking for C99 support (%s)" % desc)
+            exc = None
+            break
+        except ConfigurationError as e:
+            exc = e
+    if exc:
+        raise exc
+    return True



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list