diff options
Diffstat (limited to 'm4macros/ax_gtest.m4')
-rw-r--r-- | m4macros/ax_gtest.m4 | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/m4macros/ax_gtest.m4 b/m4macros/ax_gtest.m4 new file mode 100644 index 0000000..2681b43 --- /dev/null +++ b/m4macros/ax_gtest.m4 @@ -0,0 +1,165 @@ +AC_DEFUN([AX_ISC_GTEST], [ + +enable_gtest="no" +GTEST_INCLUDES= + +AC_ARG_WITH([gtest-source], + [AS_HELP_STRING([--with-gtest-source[[=PATH]]], + [location of the Googletest source])], + [enable_gtest="yes" ; GTEST_SOURCE="$withval"]) + +AC_ARG_WITH([gtest], + [AS_HELP_STRING([--with-gtest[[=PATH]]], + [specify a path to gtest header files (PATH/include) and library (PATH/lib)])], + [gtest_path="$withval"; enable_gtest="yes"], [gtest_path="no"]) + +AC_ARG_WITH([lcov], + [AS_HELP_STRING([--with-lcov[[=PROGRAM]]], + [enable gtest and coverage target using the specified lcov])], + [lcov="$withval"], + [lcov="no"]) + +USE_LCOV="no" +if test "$lcov" != "no"; then + # force gtest if not set + if test "$enable_gtest" = "no"; then +# AC_MSG_ERROR("lcov needs gtest for test coverage report") + AC_MSG_NOTICE([gtest support is now enabled, because used by coverage tests]) + enable_gtest="yes" + fi + if test "$lcov" != "yes"; then + LCOV=$lcov + else + AC_PATH_PROG([LCOV], [lcov]) + fi + if test -x "${LCOV}"; then + USE_LCOV="yes" + else + AC_MSG_ERROR([Cannot find lcov.]) + fi + # is genhtml always in the same directory? + GENHTML=`echo "$LCOV" | ${SED} s/lcov$/genhtml/` + if test ! -x $GENHTML; then + AC_MSG_ERROR([genhtml not found, needed for lcov]) + fi + # GCC specific? + CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage" + LIBS=" $LIBS -lgcov" + AC_SUBST(CPPFLAGS) + AC_SUBST(LIBS) + AC_SUBST(LCOV) + AC_SUBST(GENHTML) +fi +AC_SUBST(USE_LCOV) + +# +# Check availability of gtest, which will be used for unit tests. +# +GTEST_LDFLAGS= +GTEST_LDADD= +DISTCHECK_GTEST_CONFIGURE_FLAG= +GTEST_VERSION="unknown" + +if test "x$enable_gtest" = "xyes" ; then + + DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest=$gtest_path" + + if test -n "$with_gtest_source" ; then + + if test "x$GTEST_SOURCE" = "xyes" ; then + + AC_MSG_CHECKING([for gtest source]) + # If not specified, try some common paths. + GTEST_SOURCE= + for d in /usr/src/gtest /usr/local /usr/pkg /opt /opt/local ; do + if test -f $d/src/gtest-all.cc -a $d/src/gtest_main.cc; then + GTEST_SOURCE=$d + AC_MSG_RESULT([$GTEST_SOURCE]) + break + fi + done + if test -z $GTEST_SOURCE ; then + AC_MSG_ERROR([no gtest source but it was selected]) + fi + else + if test ! -d $GTEST_SOURCE/src -a -d $GTEST_SOURCE/googletest; then + GTEST_SOURCE=$GTEST_SOURCE/googletest + fi + if test -f $GTEST_SOURCE/src/gtest-all.cc -a $GTEST_SOURCE/src/gtest_main.cc; then + have_gtest_source=yes + else + AC_MSG_ERROR([no gtest source at $GTEST_SOURCE]) + fi + fi + have_gtest_source=yes + + GTEST_LDADD="\$(top_builddir)/ext/gtest/libgtest.a" + DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest-source=$GTEST_SOURCE" + GTEST_INCLUDES="-I$GTEST_SOURCE -I$GTEST_SOURCE/include" + GTEST_VERSION="`basename $GTEST_SOURCE`" + +# Versions starting from 1.8.0 are put in the googletest directory. If the basename +# returns googletest string, we need to cut it off and try baseline again. + if test "$GTEST_VERSION" = "googletest"; then + GTEST_VERSION=${GTEST_SOURCE%"/googletest"} + GTEST_VERSION=`basename $GTEST_VERSION` + fi + GTEST_VERSION="${GTEST_VERSION#googletest-release-}" + GTEST_VERSION="${GTEST_VERSION#gtest-}" + fi + + if test "$gtest_path" != "no" ; then + if test "$gtest_path" != "yes"; then + GTEST_PATHS=$gtest_path + if test -x "${gtest_path}/bin/gtest-config" ; then + GTEST_CONFIG="${gtest_path}/bin/gtest-config" + fi + else + AC_PATH_PROG([GTEST_CONFIG], [gtest-config]) + fi + if test -x "${GTEST_CONFIG}" ; then : + # using cppflags instead of cxxflags + GTEST_INCLUDES=`${GTEST_CONFIG} --cppflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LDADD=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version` + GTEST_FOUND="true" + else + AC_MSG_WARN([Unable to locate Google Test gtest-config.]) + if test -z "${GTEST_PATHS}" ; then + GTEST_PATHS="/usr /usr/local" + fi + GTEST_FOUND="false" + fi + if test "${GTEST_FOUND}" != "true"; then + GTEST_FOUND="false" + for dir in $GTEST_PATHS; do + if test -f "$dir/include/gtest/gtest.h"; then + if test -f "$dir/lib/libgtest.a" || \ + test -f "$dir/lib/libgtest.so"; then + GTEST_INCLUDES="-I$dir/include" + GTEST_LDFLAGS="-L$dir/lib" + GTEST_LDADD="-lgtest" + GTEST_FOUND="true" + break + else + AC_MSG_WARN([Found Google Test include but not the library in $dir.]) + fi + fi + done + fi + if test "${GTEST_FOUND}" != "true"; then + AC_MSG_ERROR([Cannot find gtest in: $GTEST_PATHS]) + fi + + fi +fi +AM_CONDITIONAL(HAVE_GTEST, test $enable_gtest != "no") +AM_CONDITIONAL(HAVE_GTEST_SOURCE, test "X$have_gtest_source" = "Xyes") +AC_SUBST(DISTCHECK_GTEST_CONFIGURE_FLAG) +AC_SUBST(GTEST_INCLUDES) +AC_SUBST(GTEST_LDFLAGS) +AC_SUBST(GTEST_LDADD) +AC_SUBST(GTEST_SOURCE) + +])dnl AX_ISC_GTEST |