summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-03-08 14:18:39 -0800
committerChase Douglas <chase.douglas@canonical.com>2012-03-16 15:23:42 -0700
commit71f006cadac2bc7f249965896d898143d7592f12 (patch)
tree271b6a7491d58e3bce07be1d225d47b0697ee59e
parentd02b5095dbe69b695034242a978c489aaef61109 (diff)
Build gtest as part of the project
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@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rogers@canonical.com>
-rw-r--r--configure.ac34
-rw-r--r--examples/Makefile.am42
-rw-r--r--m4/gtest.m471
3 files changed, 121 insertions, 26 deletions
diff --git a/configure.ac b/configure.ac
index 1082886..40a97f1 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
+# Require X.Org macros 1.17 or later for XORG_ENABLE_INTEGRATION_TESTS
m4_ifndef([XORG_MACROS_VERSION],
- [m4_fatal([must install xorg-macros 1.16 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.16)
+ [m4_fatal([must install xorg-macros 1.17 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.17)
XORG_DEFAULT_OPTIONS
+XORG_ENABLE_INTEGRATION_TESTS([yes])
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])
@@ -53,6 +55,28 @@ AS_IF([test "x$with_evemu" == xyes],
AM_CONDITIONAL([HAVE_EVEMU], [test "x$have_evemu" = "xyes"])
AS_IF([test "x$have_evemu" = xyes], [AC_DEFINE([HAVE_EVEMU])])
+# Check if we can build integration tests
+AS_IF([test "x$enable_integration_tests" != xno],
+ [AC_MSG_CHECKING([for X.org server])]
+ [PKG_CHECK_EXISTS([xorg-server],
+ [have_xorg_server=yes],
+ [have_xorg_server=no])]
+ [AC_MSG_RESULT([$have_xorg_server])])
+AS_IF([test "x$enable_integration_tests" = xyes -a \
+ "x$have_xorg_server" != xyes],
+ [AC_MSG_ERROR([X.org server required for integration tests])])
+
+AS_IF([test "x$have_xorg_server" = xyes],
+ [MODULES=`$PKG_CONFIG --variable=moduledir --print-errors xorg-server`
+ test "x$?" = "x0" && have_modules=yes])
+AS_IF([test "x$have_modules" = xyes],
+ [AC_CHECK_FILE([$MODULES/drivers/dummy_drv.so], [have_dummy_module=yes])])
+AS_IF([test "x$enable_integration_tests" = xyes -a \
+ "x$have_dummy_module" != xyes],
+ [AC_MSG_ERROR([X.org Dummy video driver required for integration tests])])
+
+AM_CONDITIONAL(ENABLE_XORG_GTEST_TESTS, [test "x$have_dummy_module" = xyes ])
+
AC_CONFIG_FILES([Makefile
data/Makefile
doc/Makefile
diff --git a/examples/Makefile.am b/examples/Makefile.am
index fcaca2b..5c41732 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -24,12 +24,44 @@
# 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 = $(GTEST_CPPFLAGS)
+AM_CXXFLAGS = $(XSERVER_CFLAGS) $(BASE_CXXFLAGS)
+
+nodist_libgtest_a_SOURCES = $(GTEST_SOURCE)/src/gtest-all.cc
+libgtest_a_CPPFLAGS = $(AM_CPPFLAGS) -w
+libgtest_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS)
+
+libxorg_gtest_a_SOURCES = $(top_srcdir)/src/xorg-gtest-all.cpp
+libxorg_gtest_a_CPPFLAGS = \
+ $(AM_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 = \
+ $(AM_CPPFLAGS) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)
+libxorg_gtest_main_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS)
-AM_CPPFLAGS = -I$(top_srcdir)/include
-AM_CXXFLAGS = $(XSERVER_CFLAGS) $(GTEST_CPPFLAGS) $(BASE_CXXFLAGS)
+check_PROGRAMS = xorg-gtest-example
+
+if ENABLE_XORG_GTEST_TESTS
+TESTS = $(check_PROGRAMS)
+endif
+
+xorg_gtest_example_SOURCES = xorg-gtest-example.cpp
-xorg_gtest_example_LDADD = $(top_builddir)/src/libxorg-gtest.la $(top_builddir)/src/libxorg-gtest_main.la -lgtest -lpthread -lX11
+xorg_gtest_example_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include
+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