Chris@564: 
Chris@564: AC_DEFUN([SV_MODULE_REQUIRED],
Chris@564: [
Chris@564: SV_MODULE_MODULE=$1
Chris@564: SV_MODULE_VERSION_TEST="$2"
Chris@564: SV_MODULE_HEADER=$3
Chris@564: SV_MODULE_LIB=$4
Chris@564: SV_MODULE_FUNC=$5
Chris@564: SV_MODULE_HAVE=HAVE_$(echo $1 | tr '[a-z]' '[A-Z]')
Chris@564: SV_MODULE_FAILED=1
Chris@579: if test -n "$$1_LIBS" ; then
Chris@579:    AC_MSG_NOTICE([User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE])
Chris@579:    CXXFLAGS="$CXXFLAGS $$1_CFLAGS"
Chris@579:    LIBS="$LIBS $$1_LIBS"
Chris@579:    SV_MODULE_FAILED=""
Chris@579: fi
Chris@564: if test -z "$SV_MODULE_VERSION_TEST" ; then
Chris@564:    SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
Chris@564: fi
Chris@579: if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
Chris@564:    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@564: fi
Chris@564: if test -n "$SV_MODULE_FAILED"; then
Chris@564:    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@564:    if test -n "$SV_MODULE_LIB"; then
Chris@564:      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@564:    fi
Chris@564: fi
Chris@564: ])
Chris@564: 
Chris@564: AC_DEFUN([SV_MODULE_OPTIONAL],
Chris@564: [
Chris@564: SV_MODULE_MODULE=$1
Chris@564: SV_MODULE_VERSION_TEST="$2"
Chris@564: SV_MODULE_HEADER=$3
Chris@564: SV_MODULE_LIB=$4
Chris@564: SV_MODULE_FUNC=$5
Chris@564: SV_MODULE_HAVE=HAVE_$(echo $1 | tr '[a-z]' '[A-Z]')
Chris@564: SV_MODULE_FAILED=1
Chris@579: if test -n "$$1_LIBS" ; then
Chris@579:    AC_MSG_NOTICE([User set ${SV_MODULE_MODULE}_LIBS explicitly, skipping test for $SV_MODULE_MODULE])
Chris@579:    CXXFLAGS="$CXXFLAGS $$1_CFLAGS"
Chris@579:    LIBS="$LIBS $$1_LIBS"
Chris@579:    SV_MODULE_FAILED=""
Chris@579: fi
Chris@564: if test -z "$SV_MODULE_VERSION_TEST" ; then
Chris@564:    SV_MODULE_VERSION_TEST=$SV_MODULE_MODULE
Chris@564: fi
Chris@579: if test -n "$SV_MODULE_FAILED" && test -n "$PKG_CONFIG"; then
Chris@566:    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@564: fi
Chris@564: if test -n "$SV_MODULE_FAILED"; then
Chris@564:    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@564:    if test -z "$SV_MODULE_FAILED"; then
Chris@564:       if test -n "$SV_MODULE_LIB"; then
Chris@564:            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@564:       fi
Chris@564:    fi
Chris@564: fi
Chris@564: ])
Chris@564: 
Chris@568: # Check for Qt.  The only part of Qt we use directly is qmake.
Chris@568: 
Chris@564: AC_DEFUN([SV_CHECK_QT],
Chris@564: [
Chris@564: AC_REQUIRE([AC_PROG_CXX])
Chris@564: 
Chris@568: if test x$QMAKE = x ; then
Chris@636:    	AC_CHECK_PROG(QMAKE, qmake-qt5, $QTDIR/bin/qmake-qt5,,$QTDIR/bin/)
Chris@568: fi
Chris@568: if test x$QMAKE = x ; then
Chris@568:    	AC_CHECK_PROG(QMAKE, qmake, $QTDIR/bin/qmake,,$QTDIR/bin/)
Chris@568: fi
Chris@568: if test x$QMAKE = x ; then
Chris@568: 	AC_CHECK_PROG(QMAKE, qmake.exe, $QTDIR/bin/qmake.exe,,$QTDIR/bin/)
Chris@568: fi
Chris@568: if test x$QMAKE = x ; then
Chris@636:    	AC_CHECK_PROG(QMAKE, qmake-qt5, qmake-qt5,,$PATH)
Chris@568: fi
Chris@568: if test x$QMAKE = x ; then
Chris@568:    	AC_CHECK_PROG(QMAKE, qmake, qmake,,$PATH)
Chris@568: fi
Chris@568: if test x$QMAKE = x ; then
Chris@568:    	AC_MSG_ERROR([
Chris@636: Failed to find the required qmake-qt5 or qmake program.  Please
Chris@636: ensure you have the necessary Qt5 development files installed, and
Chris@636: if necessary set QTDIR to the location of your Qt5 installation.
Chris@564: ])
Chris@564: fi
Chris@564: 
Chris@564: # Suitable versions of qmake should print out something like:
Chris@564: #
Chris@564: #   QMake version 2.01a
Chris@564: #   Using Qt version 4.6.3 in /usr/lib
Chris@564: #
Chris@564: # This may be translated, so we check only for the numbers (2.x and 4.x
Chris@564: # in that order).
Chris@564: #
Chris@564: QMAKE_VERSION_OUTPUT=`$QMAKE -v`
Chris@564: case "$QMAKE_VERSION_OUTPUT" in
Chris@636:      *5.*) ;;
Chris@564:      *) AC_MSG_WARN([
Chris@564:  *** The version of qmake found in "$QMAKE" looks like it might be
Chris@636:      from the wrong version of Qt (Qt5 is required).  Please check
Chris@636:      that this is the correct version of qmake for Qt5 builds.
Chris@564: ])
Chris@564: esac
Chris@564: 
Chris@571: case "`uname`" in
Chris@571:      *Darwin*) QMAKE="$QMAKE -spec macx-g++";;
Chris@571: esac
Chris@571: 
Chris@564: ])
Chris@564: 
Chris@879: # From autoconf archive:
Chris@879: 
Chris@879: # ============================================================================
Chris@879: #  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
Chris@879: # ============================================================================
Chris@879: #
Chris@879: # SYNOPSIS
Chris@879: #
Chris@879: #   AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
Chris@879: #
Chris@879: # DESCRIPTION
Chris@879: #
Chris@879: #   Check for baseline language coverage in the compiler for the C++11
Chris@879: #   standard; if necessary, add switches to CXXFLAGS to enable support.
Chris@879: #
Chris@879: #   The first argument, if specified, indicates whether you insist on an
Chris@879: #   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
Chris@879: #   -std=c++11).  If neither is specified, you get whatever works, with
Chris@879: #   preference for an extended mode.
Chris@879: #
Chris@879: #   The second argument, if specified 'mandatory' or if left unspecified,
Chris@879: #   indicates that baseline C++11 support is required and that the macro
Chris@879: #   should error out if no mode with that support is found.  If specified
Chris@879: #   'optional', then configuration proceeds regardless, after defining
Chris@879: #   HAVE_CXX11 if and only if a supporting mode is found.
Chris@879: #
Chris@879: # LICENSE
Chris@879: #
Chris@879: #   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
Chris@879: #   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
Chris@879: #   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
Chris@879: #   Copyright (c) 2014 Alexey Sokolov <sokolov@google.com>
Chris@879: #
Chris@879: #   Copying and distribution of this file, with or without modification, are
Chris@879: #   permitted in any medium without royalty provided the copyright notice
Chris@879: #   and this notice are preserved. This file is offered as-is, without any
Chris@879: #   warranty.
Chris@879: 
Chris@879: m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
Chris@879:   template <typename T>
Chris@879:     struct check
Chris@879:     {
Chris@879:       static_assert(sizeof(int) <= sizeof(T), "not big enough");
Chris@879:     };
Chris@879: 
Chris@879:     struct Base {
Chris@879:     virtual void f() {}
Chris@879:     };
Chris@879:     struct Child : public Base {
Chris@879:     virtual void f() override {}
Chris@879:     };
Chris@879: 
Chris@879:     typedef check<check<bool>> right_angle_brackets;
Chris@879: 
Chris@879:     int a;
Chris@879:     decltype(a) b;
Chris@879: 
Chris@879:     typedef check<int> check_type;
Chris@879:     check_type c;
Chris@879:     check_type&& cr = static_cast<check_type&&>(c);
Chris@879: 
Chris@879:     auto d = a;
Chris@879:     auto l = [](){};
Chris@879: ]])
Chris@879: 
Chris@879: AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
Chris@879:   m4_if([$1], [], [],
Chris@879:         [$1], [ext], [],
Chris@879:         [$1], [noext], [],
Chris@879:         [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
Chris@879:   m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
Chris@879:         [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
Chris@879:         [$2], [optional], [ax_cxx_compile_cxx11_required=false],
Chris@879:         [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
Chris@879:   AC_LANG_PUSH([C++])dnl
Chris@879:   ac_success=no
Chris@879:   AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
Chris@879:   ax_cv_cxx_compile_cxx11,
Chris@879:   [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
Chris@879:     [ax_cv_cxx_compile_cxx11=yes],
Chris@879:     [ax_cv_cxx_compile_cxx11=no])])
Chris@879:   if test x$ax_cv_cxx_compile_cxx11 = xyes; then
Chris@879:     ac_success=yes
Chris@879:   fi
Chris@879: 
Chris@879:   m4_if([$1], [noext], [], [dnl
Chris@879:   if test x$ac_success = xno; then
Chris@879:     for switch in -std=gnu++11 -std=gnu++0x; do
Chris@879:       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
Chris@879:       AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
Chris@879:                      $cachevar,
Chris@879:         [ac_save_CXXFLAGS="$CXXFLAGS"
Chris@879:          CXXFLAGS="$CXXFLAGS $switch"
Chris@879:          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
Chris@879:           [eval $cachevar=yes],
Chris@879:           [eval $cachevar=no])
Chris@879:          CXXFLAGS="$ac_save_CXXFLAGS"])
Chris@879:       if eval test x\$$cachevar = xyes; then
Chris@879:         CXXFLAGS="$CXXFLAGS $switch"
Chris@879:         ac_success=yes
Chris@879:         break
Chris@879:       fi
Chris@879:     done
Chris@879:   fi])
Chris@879: 
Chris@879:   m4_if([$1], [ext], [], [dnl
Chris@879:   if test x$ac_success = xno; then
Chris@879:     for switch in -std=c++11 -std=c++0x; do
Chris@879:       cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
Chris@879:       AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
Chris@879:                      $cachevar,
Chris@879:         [ac_save_CXXFLAGS="$CXXFLAGS"
Chris@879:          CXXFLAGS="$CXXFLAGS $switch"
Chris@879:          AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
Chris@879:           [eval $cachevar=yes],
Chris@879:           [eval $cachevar=no])
Chris@879:          CXXFLAGS="$ac_save_CXXFLAGS"])
Chris@879:       if eval test x\$$cachevar = xyes; then
Chris@879:         CXXFLAGS="$CXXFLAGS $switch"
Chris@879:         ac_success=yes
Chris@879:         break
Chris@879:       fi
Chris@879:     done
Chris@879:   fi])
Chris@879:   AC_LANG_POP([C++])
Chris@879:   if test x$ax_cxx_compile_cxx11_required = xtrue; then
Chris@879:     if test x$ac_success = xno; then
Chris@879:       AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
Chris@879:     fi
Chris@879:   else
Chris@879:     if test x$ac_success = xno; then
Chris@879:       HAVE_CXX11=0
Chris@879:       AC_MSG_NOTICE([No compiler with C++11 support was found])
Chris@879:     else
Chris@879:       HAVE_CXX11=1
Chris@879:       AC_DEFINE(HAVE_CXX11,1,
Chris@879:                 [define if the compiler supports basic C++11 syntax])
Chris@879:     fi
Chris@879: 
Chris@879:     AC_SUBST(HAVE_CXX11)
Chris@879:   fi
Chris@879: ])
Chris@879: