Blame src/openpa/confdb/aclocal_coverage.m4

Packit Service c5cf8c
Packit Service c5cf8c
dnl Macro to add --enable-coverage option (disabled by default) and add
Packit Service c5cf8c
dnl appropriate compiler flags to permit usage of gcov if that option is
Packit Service c5cf8c
dnl enabled.  If WRAPPER_xFLAGS variables are set then the flags will also be
Packit Service c5cf8c
dnl added to those variables.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Sets "pac_cv_use_coverage=yes" and AC_DEFINEs USE_COVERAGE if coverage was
Packit Service c5cf8c
dnl successfully enabled.  Also creates an AM_CONDITIONAL with the name
Packit Service c5cf8c
dnl "BUILD_COVERAGE" that is true iff pac_cv_use_coverage=yes.
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Usage: PAC_CONFIG_SUBDIR_ARGS
Packit Service c5cf8c
dnl
Packit Service c5cf8c
dnl Assumes that all of the compiler macros have already been invoked
Packit Service c5cf8c
dnl (AC_PROG_CC and friends).
Packit Service c5cf8c
AC_DEFUN([PAC_ENABLE_COVERAGE],[
Packit Service c5cf8c
Packit Service c5cf8c
AC_ARG_VAR([GCOV],[name/path for the gcov utility])
Packit Service c5cf8c
AC_CHECK_PROGS([GCOV],[gcov])
Packit Service c5cf8c
Packit Service c5cf8c
AC_ARG_ENABLE([coverage],
Packit Service c5cf8c
              [AC_HELP_STRING([--enable-coverage],
Packit Service c5cf8c
                              [Turn on coverage analysis using gcc and gcov])],
Packit Service c5cf8c
              [],[enable_coverage=no])
Packit Service c5cf8c
Packit Service c5cf8c
if test "$enable_coverage" = "yes" ; then
Packit Service c5cf8c
    if test "$ac_cv_prog_gcc" = "yes" ; then
Packit Service c5cf8c
        CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
        LIBS="$LIBS -lgcov"
Packit Service c5cf8c
        if test ${WRAPPER_CFLAGS+set} = set ; then
Packit Service c5cf8c
            WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    else
Packit Service c5cf8c
        AC_MSG_WARN([--enable-coverage only supported for GCC])
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if test "$enable_cxx" = "yes" ; then
Packit Service c5cf8c
        if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
Packit Service c5cf8c
            CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
            LIBS="$LIBS -lgcov"
Packit Service c5cf8c
            if test ${WRAPPER_CXXFLAGS+set} = set ; then
Packit Service c5cf8c
                WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
            fi
Packit Service c5cf8c
        else
Packit Service c5cf8c
            AC_MSG_WARN([--enable-coverage only supported for GCC])
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    # Add similar options for g77 so that the Fortran tests will also
Packit Service c5cf8c
    # 
Packit Service c5cf8c
    if test "$enable_f77" = yes ; then
Packit Service c5cf8c
        if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
Packit Service c5cf8c
             FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
             LIBS="$LIBS -lgcov"
Packit Service c5cf8c
             if test ${WRAPPER_FFLAGS+set} = set ; then
Packit Service c5cf8c
                 WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
             fi
Packit Service c5cf8c
        else
Packit Service c5cf8c
            AC_MSG_WARN([--enable-coverage only supported for G77/GFORTRAN])
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    if test "$enable_fc" = yes ; then
Packit Service c5cf8c
        if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
Packit Service c5cf8c
             FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
             LIBS="$LIBS -lgcov"
Packit Service c5cf8c
             if test ${WRAPPER_FCFLAGS+set} = set ; then
Packit Service c5cf8c
                 WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
Packit Service c5cf8c
             fi
Packit Service c5cf8c
        else
Packit Service c5cf8c
            AC_MSG_WARN([--enable-coverage only supported for GFORTRAN])
Packit Service c5cf8c
        fi
Packit Service c5cf8c
    fi
Packit Service c5cf8c
    # On some platforms (e.g., Mac Darwin), we must also *link* 
Packit Service c5cf8c
    # with the -fprofile-args -ftest-coverage option.
Packit Service c5cf8c
    AC_MSG_CHECKING([whether compilation with coverage analysis enabled works])
Packit Service c5cf8c
    AC_LINK_IFELSE([AC_LANG_SOURCE([int main(int argc, char **argv){return 1;}])],
Packit Service c5cf8c
                   [AC_MSG_RESULT([yes])],
Packit Service c5cf8c
                   [AC_MSG_RESULT([no])
Packit Service c5cf8c
                    AC_MSG_ERROR([Unable to link programs when coverage analysis enabled])])
Packit Service c5cf8c
    
Packit Service c5cf8c
    # Test for the routines that we need to use to ensure that the
Packit Service c5cf8c
    # data files are (usually) written out
Packit Service c5cf8c
    # FIXME: Some versions of Linux provide usleep, but it rounds times
Packit Service c5cf8c
    # up to the next second (!)
Packit Service c5cf8c
    AC_CHECK_FUNCS([usleep])
Packit Service c5cf8c
Packit Service c5cf8c
    # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
Packit Service c5cf8c
    pac_cv_use_coverage=yes
Packit Service c5cf8c
    AC_DEFINE([USE_COVERAGE],[1],[Define if performing coverage tests])
Packit Service c5cf8c
fi
Packit Service c5cf8c
AM_CONDITIONAL([BUILD_COVERAGE],[test "X$pac_cv_use_coverage" = "Xyes"])
Packit Service c5cf8c
])