Chris@638
|
1
|
Chris@638
|
2 AC_DEFUN([SV_MODULE_REQUIRED],
|
Chris@638
|
3 [
|
Chris@638
|
4 SV_MODULE_MODULE=$1
|
Chris@638
|
5 SV_MODULE_VERSION_TEST="$2"
|
Chris@638
|
6 SV_MODULE_HEADER=$3
|
Chris@638
|
7 SV_MODULE_LIB=$4
|
Chris@638
|
8 SV_MODULE_FUNC=$5
|
Chris@638
|
9 SV_MODULE_HAVE=HAVE_$(echo $1 | tr '[a-z]' '[A-Z]')
|
Chris@638
|
10 SV_MODULE_FAILED=1
|
Chris@671
|
11 if test -n "$$1_LIBS" ; then
|
Chris@671
|
12 AC_MSG_NOTICE([User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE])
|
Chris@672
|
13 CXXFLAGS="$CXXFLAGS $$1_CFLAGS"
|
Chris@672
|
14 LIBS="$LIBS $$1_LIBS"
|
Chris@671
|
15 SV_MODULE_FAILED=""
|
Chris@671
|
16 fi
|
Chris@638
|
17 if test -z "$SV_MODULE_VERSION_TEST" ; then
|
Chris@638
|
18 SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
|
Chris@638
|
19 fi
|
Chris@671
|
20 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
|
Chris@638
|
21 PKG_CHECK_MODULES($1,[$SV_MODULE_VERSION_TEST],[HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $$1_CFLAGS";LIBS="$LIBS $$1_LIBS";SV_MODULE_FAILED=""],[AC_MSG_NOTICE([Failed to find required module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means])])
|
Chris@638
|
22 fi
|
Chris@638
|
23 if test -n "$SV_MODULE_FAILED"; then
|
Chris@638
|
24 AC_CHECK_HEADER([$SV_MODULE_HEADER],[HAVES="$HAVES $SV_MODULE_HAVE"],[AC_MSG_ERROR([Failed to find header $SV_MODULE_HEADER for required module $SV_MODULE_MODULE])])
|
Chris@638
|
25 if test -n "$SV_MODULE_LIB"; then
|
Chris@638
|
26 AC_CHECK_LIB([$SV_MODULE_LIB],[$SV_MODULE_FUNC],[LIBS="$LIBS -l$SV_MODULE_LIB"],[AC_MSG_ERROR([Failed to find library $SV_MODULE_LIB for required module $SV_MODULE_MODULE])])
|
Chris@638
|
27 fi
|
Chris@638
|
28 fi
|
Chris@638
|
29 ])
|
Chris@638
|
30
|
Chris@638
|
31 AC_DEFUN([SV_MODULE_OPTIONAL],
|
Chris@638
|
32 [
|
Chris@638
|
33 SV_MODULE_MODULE=$1
|
Chris@638
|
34 SV_MODULE_VERSION_TEST="$2"
|
Chris@638
|
35 SV_MODULE_HEADER=$3
|
Chris@638
|
36 SV_MODULE_LIB=$4
|
Chris@638
|
37 SV_MODULE_FUNC=$5
|
Chris@638
|
38 SV_MODULE_HAVE=HAVE_$(echo $1 | tr '[a-z]' '[A-Z]')
|
Chris@638
|
39 SV_MODULE_FAILED=1
|
Chris@671
|
40 if test -n "$$1_LIBS" ; then
|
Chris@671
|
41 AC_MSG_NOTICE([User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE])
|
Chris@672
|
42 CXXFLAGS="$CXXFLAGS $$1_CFLAGS"
|
Chris@672
|
43 LIBS="$LIBS $$1_LIBS"
|
Chris@671
|
44 SV_MODULE_FAILED=""
|
Chris@671
|
45 fi
|
Chris@638
|
46 if test -z "$SV_MODULE_VERSION_TEST" ; then
|
Chris@638
|
47 SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
|
Chris@638
|
48 fi
|
Chris@671
|
49 if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
|
Chris@649
|
50 PKG_CHECK_MODULES($1,[$SV_MODULE_VERSION_TEST],[HAVES="$HAVES $SV_MODULE_HAVE";CXXFLAGS="$CXXFLAGS $$1_CFLAGS";LIBS="$LIBS $$1_LIBS";SV_MODULE_FAILED=""],[AC_MSG_NOTICE([Failed to find optional module $SV_MODULE_MODULE using pkg-config, trying again by old-fashioned means])])
|
Chris@638
|
51 fi
|
Chris@638
|
52 if test -n "$SV_MODULE_FAILED"; then
|
Chris@638
|
53 AC_CHECK_HEADER([$SV_MODULE_HEADER],[HAVES="$HAVES $SV_MODULE_HAVE";SV_MODULE_FAILED=""],[AC_MSG_NOTICE([Failed to find header $SV_MODULE_HEADER for optional module $SV_MODULE_MODULE])])
|
Chris@638
|
54 if test -z "$SV_MODULE_FAILED"; then
|
Chris@638
|
55 if test -n "$SV_MODULE_LIB"; then
|
Chris@638
|
56 AC_CHECK_LIB([$SV_MODULE_LIB],[$SV_MODULE_FUNC],[LIBS="$LIBS -l$SV_MODULE_LIB"],[AC_MSG_NOTICE([Failed to find library $SV_MODULE_LIB for optional module $SV_MODULE_MODULE])])
|
Chris@638
|
57 fi
|
Chris@638
|
58 fi
|
Chris@638
|
59 fi
|
Chris@638
|
60 ])
|
Chris@638
|
61
|
Chris@651
|
62 # Check for Qt. The only part of Qt we use directly is qmake.
|
Chris@651
|
63
|
Chris@638
|
64 AC_DEFUN([SV_CHECK_QT],
|
Chris@638
|
65 [
|
Chris@638
|
66 AC_REQUIRE([AC_PROG_CXX])
|
Chris@638
|
67
|
Chris@651
|
68 if test x$QMAKE = x ; then
|
Chris@792
|
69 AC_CHECK_PROG(QMAKE, qmake-qt5, $QTDIR/bin/qmake-qt5,,$QTDIR/bin/)
|
Chris@651
|
70 fi
|
Chris@651
|
71 if test x$QMAKE = x ; then
|
Chris@651
|
72 AC_CHECK_PROG(QMAKE, qmake, $QTDIR/bin/qmake,,$QTDIR/bin/)
|
Chris@651
|
73 fi
|
Chris@651
|
74 if test x$QMAKE = x ; then
|
Chris@651
|
75 AC_CHECK_PROG(QMAKE, qmake.exe, $QTDIR/bin/qmake.exe,,$QTDIR/bin/)
|
Chris@651
|
76 fi
|
Chris@651
|
77 if test x$QMAKE = x ; then
|
Chris@792
|
78 AC_CHECK_PROG(QMAKE, qmake-qt5, qmake-qt5,,$PATH)
|
Chris@651
|
79 fi
|
Chris@651
|
80 if test x$QMAKE = x ; then
|
Chris@651
|
81 AC_CHECK_PROG(QMAKE, qmake, qmake,,$PATH)
|
Chris@651
|
82 fi
|
Chris@651
|
83 if test x$QMAKE = x ; then
|
Chris@651
|
84 AC_MSG_ERROR([
|
Chris@792
|
85 Failed to find the required qmake-qt5 or qmake program. Please
|
Chris@792
|
86 ensure you have the necessary Qt5 development files installed, and
|
Chris@792
|
87 if necessary set QTDIR to the location of your Qt5 installation.
|
Chris@638
|
88 ])
|
Chris@638
|
89 fi
|
Chris@638
|
90
|
Chris@638
|
91 # Suitable versions of qmake should print out something like:
|
Chris@638
|
92 #
|
Chris@638
|
93 # QMake version 2.01a
|
Chris@638
|
94 # Using Qt version 4.6.3 in /usr/lib
|
Chris@638
|
95 #
|
Chris@638
|
96 # This may be translated, so we check only for the numbers (2.x and 4.x
|
Chris@638
|
97 # in that order).
|
Chris@638
|
98 #
|
Chris@638
|
99 QMAKE_VERSION_OUTPUT=`$QMAKE -v`
|
Chris@638
|
100 case "$QMAKE_VERSION_OUTPUT" in
|
Chris@792
|
101 *5.*) ;;
|
Chris@638
|
102 *) AC_MSG_WARN([
|
Chris@638
|
103 *** The version of qmake found in "$QMAKE" looks like it might be
|
Chris@792
|
104 from the wrong version of Qt (Qt5 is required). Please check
|
Chris@792
|
105 that this is the correct version of qmake for Qt5 builds.
|
Chris@638
|
106 ])
|
Chris@638
|
107 esac
|
Chris@638
|
108
|
Chris@655
|
109 case "`uname`" in
|
Chris@655
|
110 *Darwin*) QMAKE="$QMAKE -spec macx-g++";;
|
Chris@655
|
111 esac
|
Chris@655
|
112
|
Chris@638
|
113 ])
|
Chris@638
|
114
|
Chris@1011
|
115 # From autoconf archive:
|
Chris@1011
|
116
|
Chris@1011
|
117 # ============================================================================
|
Chris@1011
|
118 # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
|
Chris@1011
|
119 # ============================================================================
|
Chris@1011
|
120 #
|
Chris@1011
|
121 # SYNOPSIS
|
Chris@1011
|
122 #
|
Chris@1011
|
123 # AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
|
Chris@1011
|
124 #
|
Chris@1011
|
125 # DESCRIPTION
|
Chris@1011
|
126 #
|
Chris@1011
|
127 # Check for baseline language coverage in the compiler for the C++11
|
Chris@1011
|
128 # standard; if necessary, add switches to CXXFLAGS to enable support.
|
Chris@1011
|
129 #
|
Chris@1011
|
130 # The first argument, if specified, indicates whether you insist on an
|
Chris@1011
|
131 # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
|
Chris@1011
|
132 # -std=c++11). If neither is specified, you get whatever works, with
|
Chris@1011
|
133 # preference for an extended mode.
|
Chris@1011
|
134 #
|
Chris@1011
|
135 # The second argument, if specified 'mandatory' or if left unspecified,
|
Chris@1011
|
136 # indicates that baseline C++11 support is required and that the macro
|
Chris@1011
|
137 # should error out if no mode with that support is found. If specified
|
Chris@1011
|
138 # 'optional', then configuration proceeds regardless, after defining
|
Chris@1011
|
139 # HAVE_CXX11 if and only if a supporting mode is found.
|
Chris@1011
|
140 #
|
Chris@1011
|
141 # LICENSE
|
Chris@1011
|
142 #
|
Chris@1011
|
143 # Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
|
Chris@1011
|
144 # Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
|
Chris@1011
|
145 # Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
|
Chris@1011
|
146 # Copyright (c) 2014 Alexey Sokolov <sokolov@google.com>
|
Chris@1011
|
147 #
|
Chris@1011
|
148 # Copying and distribution of this file, with or without modification, are
|
Chris@1011
|
149 # permitted in any medium without royalty provided the copyright notice
|
Chris@1011
|
150 # and this notice are preserved. This file is offered as-is, without any
|
Chris@1011
|
151 # warranty.
|
Chris@1011
|
152
|
Chris@1011
|
153 m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
|
Chris@1011
|
154 template <typename T>
|
Chris@1011
|
155 struct check
|
Chris@1011
|
156 {
|
Chris@1011
|
157 static_assert(sizeof(int) <= sizeof(T), "not big enough");
|
Chris@1011
|
158 };
|
Chris@1011
|
159
|
Chris@1011
|
160 struct Base {
|
Chris@1011
|
161 virtual void f() {}
|
Chris@1011
|
162 };
|
Chris@1011
|
163 struct Child : public Base {
|
Chris@1011
|
164 virtual void f() override {}
|
Chris@1011
|
165 };
|
Chris@1011
|
166
|
Chris@1011
|
167 typedef check<check<bool>> right_angle_brackets;
|
Chris@1011
|
168
|
Chris@1011
|
169 int a;
|
Chris@1011
|
170 decltype(a) b;
|
Chris@1011
|
171
|
Chris@1011
|
172 typedef check<int> check_type;
|
Chris@1011
|
173 check_type c;
|
Chris@1011
|
174 check_type&& cr = static_cast<check_type&&>(c);
|
Chris@1011
|
175
|
Chris@1011
|
176 auto d = a;
|
Chris@1011
|
177 auto l = [](){};
|
Chris@1011
|
178 ]])
|
Chris@1011
|
179
|
Chris@1011
|
180 AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
|
Chris@1011
|
181 m4_if([$1], [], [],
|
Chris@1011
|
182 [$1], [ext], [],
|
Chris@1011
|
183 [$1], [noext], [],
|
Chris@1011
|
184 [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
|
Chris@1011
|
185 m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
|
Chris@1011
|
186 [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
|
Chris@1011
|
187 [$2], [optional], [ax_cxx_compile_cxx11_required=false],
|
Chris@1011
|
188 [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
|
Chris@1011
|
189 AC_LANG_PUSH([C++])dnl
|
Chris@1011
|
190 ac_success=no
|
Chris@1011
|
191 AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
|
Chris@1011
|
192 ax_cv_cxx_compile_cxx11,
|
Chris@1011
|
193 [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
Chris@1011
|
194 [ax_cv_cxx_compile_cxx11=yes],
|
Chris@1011
|
195 [ax_cv_cxx_compile_cxx11=no])])
|
Chris@1011
|
196 if test x$ax_cv_cxx_compile_cxx11 = xyes; then
|
Chris@1011
|
197 ac_success=yes
|
Chris@1011
|
198 fi
|
Chris@1011
|
199
|
Chris@1011
|
200 m4_if([$1], [noext], [], [dnl
|
Chris@1011
|
201 if test x$ac_success = xno; then
|
Chris@1011
|
202 for switch in -std=gnu++11 -std=gnu++0x; do
|
Chris@1011
|
203 cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
|
Chris@1011
|
204 AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
|
Chris@1011
|
205 $cachevar,
|
Chris@1011
|
206 [ac_save_CXXFLAGS="$CXXFLAGS"
|
Chris@1011
|
207 CXXFLAGS="$CXXFLAGS $switch"
|
Chris@1011
|
208 AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
Chris@1011
|
209 [eval $cachevar=yes],
|
Chris@1011
|
210 [eval $cachevar=no])
|
Chris@1011
|
211 CXXFLAGS="$ac_save_CXXFLAGS"])
|
Chris@1011
|
212 if eval test x\$$cachevar = xyes; then
|
Chris@1011
|
213 CXXFLAGS="$CXXFLAGS $switch"
|
Chris@1011
|
214 ac_success=yes
|
Chris@1011
|
215 break
|
Chris@1011
|
216 fi
|
Chris@1011
|
217 done
|
Chris@1011
|
218 fi])
|
Chris@1011
|
219
|
Chris@1011
|
220 m4_if([$1], [ext], [], [dnl
|
Chris@1011
|
221 if test x$ac_success = xno; then
|
Chris@1011
|
222 for switch in -std=c++11 -std=c++0x; do
|
Chris@1011
|
223 cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
|
Chris@1011
|
224 AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
|
Chris@1011
|
225 $cachevar,
|
Chris@1011
|
226 [ac_save_CXXFLAGS="$CXXFLAGS"
|
Chris@1011
|
227 CXXFLAGS="$CXXFLAGS $switch"
|
Chris@1011
|
228 AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
|
Chris@1011
|
229 [eval $cachevar=yes],
|
Chris@1011
|
230 [eval $cachevar=no])
|
Chris@1011
|
231 CXXFLAGS="$ac_save_CXXFLAGS"])
|
Chris@1011
|
232 if eval test x\$$cachevar = xyes; then
|
Chris@1011
|
233 CXXFLAGS="$CXXFLAGS $switch"
|
Chris@1011
|
234 ac_success=yes
|
Chris@1011
|
235 break
|
Chris@1011
|
236 fi
|
Chris@1011
|
237 done
|
Chris@1011
|
238 fi])
|
Chris@1011
|
239 AC_LANG_POP([C++])
|
Chris@1011
|
240 if test x$ax_cxx_compile_cxx11_required = xtrue; then
|
Chris@1011
|
241 if test x$ac_success = xno; then
|
Chris@1011
|
242 AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
|
Chris@1011
|
243 fi
|
Chris@1011
|
244 else
|
Chris@1011
|
245 if test x$ac_success = xno; then
|
Chris@1011
|
246 HAVE_CXX11=0
|
Chris@1011
|
247 AC_MSG_NOTICE([No compiler with C++11 support was found])
|
Chris@1011
|
248 else
|
Chris@1011
|
249 HAVE_CXX11=1
|
Chris@1011
|
250 AC_DEFINE(HAVE_CXX11,1,
|
Chris@1011
|
251 [define if the compiler supports basic C++11 syntax])
|
Chris@1011
|
252 fi
|
Chris@1011
|
253
|
Chris@1011
|
254 AC_SUBST(HAVE_CXX11)
|
Chris@1011
|
255 fi
|
Chris@1011
|
256 ])
|
Chris@1011
|
257
|