blob: 098e51f796f551420ec71117013c66836c8bc521 [file] [log] [blame]
Junxiao Shi8d71fdb2014-12-07 21:55:19 -07001# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
2
3from waflib.Configure import conf
4
5FRIEND_TYPENAME = '''
6class A;
7
8template<typename T>
9class B
10{
11 friend T;
12};
13
14B<A> g_b;
15'''
16
17FRIEND_WRAPPER = '''
18class A;
19
20template<typename T>
21struct TypeWrapper
22{
23 typedef T Type;
24};
25
26template<typename T>
27class B
28{
29 friend class TypeWrapper<T>::Type;
30};
31
32B<A> g_b;
33'''
34
35@conf
36def check_friend_typename(self):
37 if self.check_cxx(msg='Checking for friend typename-specifier',
38 fragment=FRIEND_TYPENAME,
39 features='cxx', mandatory=False):
40 self.define('HAVE_CXX_FRIEND_TYPENAME', 1)
41 elif self.check_cxx(msg='Checking for friend typename using wrapper',
42 fragment=FRIEND_WRAPPER,
43 features='cxx', mandatory=True):
44 self.define('HAVE_CXX_FRIEND_TYPENAME_WRAPPER', 1)
45
Junxiao Shi895395f2015-03-03 22:38:56 -070046OVERRIDE = '''
47class Base
48{
49 virtual void
50 f(int a);
51};
52
53class Derived : public Base
54{
55 virtual void
56 f(int a) override;
57};
58
59class Final : public Derived
60{
61 virtual void
62 f(int a) final;
63};
64'''
65
66@conf
67def check_override(self):
68 if self.check_cxx(msg='Checking for override and final specifiers',
69 fragment=OVERRIDE,
70 features='cxx', mandatory=False):
71 self.define('HAVE_CXX_OVERRIDE_FINAL', 1)
72
Joao Pereira7476ebf2015-07-07 14:54:39 -040073VECTOR_INSERT_ERASE_CONST_ITERATOR = '''
74#include <vector>
75int
76main()
77{
78 std::vector<int> v;
79 std::vector<int>::const_iterator it = v.cbegin();
80
81 v.insert(it, 2);
82 it = v.cend() - 1;
83 v.erase(it);
84 return 0;
85}
86'''
87
88@conf
89def check_vector_const_iterators(self):
90 if self.check_cxx(msg='Checking for std::vector::insert with const_iterators',
91 fragment=VECTOR_INSERT_ERASE_CONST_ITERATOR,
92 features='cxx', mandatory=False):
93 self.define('NDN_CXX_HAVE_VECTOR_INSERT_ERASE_CONST_ITERATOR', 1)
94
Junxiao Shi8d71fdb2014-12-07 21:55:19 -070095def configure(conf):
96 conf.check_friend_typename()
Junxiao Shi895395f2015-03-03 22:38:56 -070097 conf.check_override()
Joao Pereira7476ebf2015-07-07 14:54:39 -040098 conf.check_vector_const_iterators()