[PATCH xorg-gtest v2 6/9] Build gtest as part of the project
Chase Douglas
chase.douglas at canonical.com
Tue Mar 13 11:47:43 PDT 2012
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 | 8 +++--
examples/Makefile.am | 39 ++++++++++++++++++++++++---
m4/gtest.m4 | 71 ++++++++++++++++++++++++++++++++++++++-----------
3 files changed, 94 insertions(+), 24 deletions(-)
diff --git a/configure.ac b/configure.ac
index 1082886..a3e3319 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,21 +20,23 @@ AC_PROG_LIBTOOL
# Checks for programs.
AC_PROG_CXX
+AC_PROG_RANLIB
AC_LANG([C++])
# Require X.Org macros 1.16 or later for XORG_TESTSET_CFLAG
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_MACROS_VERSION(1.17)
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
+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
--
1.7.9.1
More information about the xorg-devel
mailing list