Add c++11 enablement options in wscript
authorMichael R. Fisher <mfisher@bketech.com>
Mon, 15 Jul 2013 22:27:21 +0000 (17:27 -0500)
committerMichael Fisher <mfisher31@gmail.com>
Tue, 16 Jul 2013 03:57:35 +0000 (22:57 -0500)
- adds "--cxx11" toggle for ./waf configure
- The switch adds appropriate compiler flags and tests the compiler
  for usability of c++11
- This 'should' be compatible for linux, osx, and windows systems
  that have gcc and/or clang with support c++11

wscript

diff --git a/wscript b/wscript
index a6106c0aeffb7ec697dd487d26fc4397bb9b0782..48e30ef7eaf6a287cfe07c36d42e65f85890c91d 100644 (file)
--- a/wscript
+++ b/wscript
@@ -110,6 +110,22 @@ def set_compiler_flags (conf,opt):
 
     # waf adds -O0 -g itself. thanks waf!
     is_clang = conf.env['CXX'][0].endswith('clang++')
+    
+    if conf.options.cxx11:
+        conf.check_cxx(cxxflags=["-std=c++11"])
+        conf.env.append_unique('CXXFLAGS', ['-std=c++11'])
+        if platform == "darwin":
+            conf.env.append_unique('CXXFLAGS', ['-stdlib=libc++'])
+            conf.env.append_unique('LINKFLAGS', ['-lc++'])
+            # Prevents visibility issues in standard headers
+            conf.define("_DARWIN_C_SOURCE", 1)
+
+    if is_clang and platform == "darwin":
+        # Silence warnings about the non-existing osx clang compiler flags
+        # -compatibility_version and -current_version.  These are Waf
+        # generated and not needed with clang
+        conf.env.append_unique ("CXXFLAGS", ["-Qunused-arguments"])
+        
     if opt.gprofile:
         debug_flags = [ '-pg' ]
 
@@ -454,6 +470,8 @@ def options(opt):
                     help='directory where Wine\'s Windows header files can be found')
     opt.add_option('--noconfirm', action='store_true', default=False, dest='noconfirm',
                     help='Do not ask questions that require confirmation during the build')
+    opt.add_option('--cxx11', action='store_true', default=False, dest='cxx11',
+                    help='Turn on c++11 compiler flags (-std=c++11)')
     for i in children:
         opt.recurse(i)