waifulib: cxx11: better C++11 detection by @mittorn
This commit is contained in:
parent
75a36dd255
commit
a1041073b1
@ -25,22 +25,43 @@ modern_cpp_flags = {
|
|||||||
'default': ['-std=c++11']
|
'default': ['-std=c++11']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CXX11_LAMBDA_FRAGMENT='''
|
||||||
|
class T
|
||||||
|
{
|
||||||
|
static void M(){}
|
||||||
|
public:
|
||||||
|
void t()
|
||||||
|
{
|
||||||
|
auto l = []()
|
||||||
|
{
|
||||||
|
T::M();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
T t;
|
||||||
|
t.t();
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
|
||||||
@Configure.conf
|
@Configure.conf
|
||||||
def check_cxx11(ctx, *k, **kw):
|
def check_cxx11(ctx, *k, **kw):
|
||||||
if not 'msg' in kw:
|
if not 'msg' in kw:
|
||||||
kw['msg'] = 'Checking if \'%s\' supports C++11' % ctx.env.COMPILER_CXX
|
kw['msg'] = 'Checking if \'%s\' supports C++11' % ctx.env.COMPILER_CXX
|
||||||
|
|
||||||
if not 'mandatory' in kw:
|
if not 'mandatory' in kw:
|
||||||
kw['mandatory'] = False
|
kw['mandatory'] = False
|
||||||
|
|
||||||
# not best way, but this check
|
# not best way, but this check
|
||||||
# was written for exactly mainui_cpp,
|
# was written for exactly mainui_cpp,
|
||||||
# where lambdas are mandatory
|
# where lambdas are mandatory
|
||||||
return ctx.check_cxx(fragment='int main( void ){ auto pfnLambda = [](){}; return 0;}', *k, **kw)
|
return ctx.check_cxx(fragment=CXX11_LAMBDA_FRAGMENT, *k, **kw)
|
||||||
|
|
||||||
def configure(conf):
|
def configure(conf):
|
||||||
flags = get_flags_by_compiler(modern_cpp_flags, conf.env.COMPILER_CXX)
|
flags = get_flags_by_compiler(modern_cpp_flags, conf.env.COMPILER_CXX)
|
||||||
|
|
||||||
if conf.check_cxx11():
|
if conf.check_cxx11():
|
||||||
conf.env.HAVE_CXX11 = True
|
conf.env.HAVE_CXX11 = True
|
||||||
elif len(flags) != 0 and conf.check_cxx11(msg='...trying with additional flags', cxxflags = flags):
|
elif len(flags) != 0 and conf.check_cxx11(msg='...trying with additional flags', cxxflags = flags):
|
||||||
@ -48,7 +69,6 @@ def configure(conf):
|
|||||||
conf.env.CXXFLAGS += flags
|
conf.env.CXXFLAGS += flags
|
||||||
else:
|
else:
|
||||||
conf.env.HAVE_CXX11 = False
|
conf.env.HAVE_CXX11 = False
|
||||||
|
|
||||||
if conf.env.CXX11_MANDATORY:
|
if conf.env.CXX11_MANDATORY:
|
||||||
conf.fatal('C++11 support not available!')
|
conf.fatal('C++11 support not available!')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user