[PATCH xorg-gtest 6/8] Build gtest as part of the project

Gaetan Nadon memsize at videotron.ca
Fri Mar 9 13:36:11 PST 2012


On 12-03-09 03:45 PM, Chase Douglas wrote:
> Google Test does not recommend using precompiled gtest libraries. See:
>
> http://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog
>
> This change modifies the build system so the examples build the gtest
> and xorg-gtest libraries and link against the locally built libraries
> instead of any other precompiled libraries on the system. It uses the
> same compiler flags to compile everything so the C++ One-Definition Rule
> is not broken.
>
> Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> ---
>  configure.ac         |    6 +++-
>  examples/Makefile.am |   39 ++++++++++++++++++++++++---
>  m4/gtest.m4          |   71 ++++++++++++++++++++++++++++++++++++++-----------
>  3 files changed, 93 insertions(+), 23 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 1082886..b5fa25d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -20,6 +20,7 @@ AC_PROG_LIBTOOL
>  
>  # Checks for programs.
>  AC_PROG_CXX
> +AC_PROG_RANLIB
>  
>  AC_LANG([C++])
>  
> @@ -28,13 +29,14 @@ m4_ifndef([XORG_MACROS_VERSION],
>  	  [m4_fatal([must install xorg-macros 1.16 or later before running autoconf/autogen])])
>  XORG_MACROS_VERSION(1.16)
>  XORG_DEFAULT_OPTIONS
> +XORG_ENABLE_INTEGRATION_TESTS
>  
>  PKG_CHECK_MODULES(XSERVER, x11)
>   
>  # Check for Google Test
> -AC_CHECK_GTEST
> +CHECK_GTEST
>  
> -AS_IF([test "x$ac_cv_lib_gtest_main" != xyes],
> +AS_IF([test "x$have_gtest" != xyes],
>        AC_MSG_ERROR([package 'gtest' not found]))
>  
>  AC_SUBST([GTEST_CPPFLAGS])
> diff --git a/examples/Makefile.am b/examples/Makefile.am
> index fcaca2b..da2485b 100644
> --- a/examples/Makefile.am
> +++ b/examples/Makefile.am
> @@ -24,12 +24,41 @@
>  # SOFTWARE.
>  #
>  
> -noinst_PROGRAMS = xorg-gtest-example
> +check_LIBRARIES = libgtest.a libxorg-gtest.a libxorg-gtest_main.a
>  
> -xorg_gtest_example_SOURCES = xorg-gtest-example.cpp
> -
> -AM_CPPFLAGS = -I$(top_srcdir)/include
>  AM_CXXFLAGS = $(XSERVER_CFLAGS) $(GTEST_CPPFLAGS) $(BASE_CXXFLAGS)
>  
> -xorg_gtest_example_LDADD = $(top_builddir)/src/libxorg-gtest.la $(top_builddir)/src/libxorg-gtest_main.la -lgtest -lpthread -lX11
> +nodist_libgtest_a_SOURCES = $(GTEST_SOURCE)/src/gtest-all.cc
> +libgtest_a_CPPFLAGS = $(GTEST_CPPFLAGS) -w
> +libgtest_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS)
> +
> +libxorg_gtest_a_SOURCES = $(top_srcdir)/src/xorg-gtest-all.cpp
> +libxorg_gtest_a_CPPFLAGS = \
> +	$(GTEST_CPPFLAGS) \
> +	-I$(top_srcdir)/include \
> +	-I$(top_srcdir) \
> +	-DDUMMY_CONF_PATH="\"$(top_srcdir)/data/xorg/gtest/dummy.conf\""
> +libxorg_gtest_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS)
> +
> +libxorg_gtest_main_a_SOURCES = $(top_srcdir)/src/xorg-gtest_main.cpp
> +libxorg_gtest_main_a_CPPFLAGS = \
> +	$(GTEST_CPPFLAGS) \
> +	-I$(top_srcdir)/include \
> +	-I$(top_srcdir)
> +libxorg_gtest_main_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS)
> +
> +check_PROGRAMS = xorg-gtest-example
> +
> +if ENABLE_INTEGRATION_TESTS
~/xorg/src/test/xorg-gtest$ autoreconf -vfi
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I /home/nadon/xorg/inst/share/aclocal
--force -I m4
autoreconf: configure.ac: tracing
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
autoreconf: configure.ac: not using Autoheader
autoreconf: running: automake --add-missing --copy --force-missing
examples/Makefile.am:52: ENABLE_INTEGRATION_TESTS does not appear in
AM_CONDITIONAL
autoreconf: automake failed with exit status: 1


> +TESTS = $(check_PROGRAMS)
> +endif
> +
> +xorg_gtest_example_SOURCES = xorg-gtest-example.cpp
>  
> +xorg_gtest_example_LDADD = \
> +	libgtest.a \
> +	libxorg-gtest.a \
> +	libxorg-gtest_main.a \
> +	-lpthread \
> +	$(XSERVER_LIBS) \
> +	$(EVEMU_LIBS)
> diff --git a/m4/gtest.m4 b/m4/gtest.m4
> index cd41b21..2de334c 100644
> --- a/m4/gtest.m4
> +++ b/m4/gtest.m4
> @@ -1,24 +1,63 @@
> -# Checks whether the gtest library is available on the system
> -# Allows for adjusting the include and library path.
> -# Sets have_gtest=yes if the library is present and
> -# reports the compiler and linker flags in 
> -# GTEST_CXXFLAGS AND GTEST_LDFLAGS, respectively.
> -AC_DEFUN([AC_CHECK_GTEST],
> +# Copyright (C) 2012 Canonical, Ltd.
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a copy
> +# of this software and associated documentation files (the "Software"), to deal
> +# in the Software without restriction, including without limitation the rights
> +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> +# copies of the Software, and to permit persons to whom the Software is
> +# furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> +# SOFTWARE.
> +
> +# Checks whether the gtest source is available on the system. Allows for
> +# adjusting the include and source path. Sets have_gtest=yes if the source is
> +# present. Sets GTEST_CPPFLAGS and GTEST_SOURCE to the preprocessor flags and
> +# source location respectively.
> +AC_DEFUN([CHECK_GTEST],
>  [
>    AC_ARG_WITH([gtest-include-path],
> -  [AS_HELP_STRING([--with-gtest-include-path],
> -    [location of the Google test headers, defaults to /usr/include])],
> -  [GTEST_CPPFLAGS="-I$withval"])
> +              [AS_HELP_STRING([--with-gtest-include-path],
> +                              [location of the Google test headers])],
> +              [GTEST_CPPFLAGS="-I$withval"])
> +
> +  AC_ARG_WITH([gtest-source-path],
> +              [AS_HELP_STRING([--with-gtest-source-path],
> +                              [location of the Google test sources, defaults to /usr/src/gtest])],
> +              [GTEST_SOURCE="$withval"],
> +              [GTEST_SOURCE="/usr/src/gtest"])
> +
> +  GTEST_CPPFLAGS="$GTEST_CPPFLAGS -I$GTEST_SOURCE"
>  
> -  AC_ARG_WITH([gtest-lib-path],
> -  [AS_HELP_STRING([--with-gtest-lib-path], [location of the Google test libraries])],
> -  [GTEST_LDFLAGS="-L$withval -lpthread"],
> -  [GTEST_LDFLAGS='-lpthread'])
> +  AC_LANG_PUSH([C++])
>  
> -  AC_LANG_PUSH(C++)
> +  tmp_CPPFLAGS="$CPPFLAGS"
> +  CPPFLAGS="$CPPFLAGS $GTEST_CPPFLAGS"
>  
> -  AC_CHECK_LIB([gtest], [main], [:], [:], [$GTEST_LDFLAGS])
> +  AC_CHECK_HEADER([gtest/gtest.h])
> +
> +  CPPFLAGS="$tmp_CPPFLAGS"
>  
>    AC_LANG_POP
> -]) # AC_CHECK_GTEST
>  
> +  AC_CHECK_FILES([$GTEST_SOURCE/src/gtest-all.cc]
> +                 [$GTEST_SOURCE/src/gtest_main.cc],
> +                 [have_gtest_source=yes],
> +                 [have_gtest_source=no])
> +
> +  AS_IF([test "x$ac_cv_header_gtest_gtest_h" = xyes -a \
> +              "x$have_gtest_source" = xyes],
> +        [have_gtest=yes]
> +        [AC_SUBST(GTEST_CPPFLAGS)]
> +        [AC_SUBST(GTEST_SOURCE)],
> +        [have_gtest=no])
> +]) # CHECK_GTEST



More information about the xorg-devel mailing list