annotate acinclude.m4 @ 1583:0510dea7ef84 dev/refactor-piper-related

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