.gitignore | 79 ++++++++++++++++++++++ COPYING | 19 +++++ Makefile.am | 34 +++++++++ README | 72 +++++++++++++++++++- aclocal/Makefile.am | 27 +++++++ aclocal/xorg-gtest.m4 | 110 +++++++++++++++++++++++++++++++ conf/dummy.conf | 4 - configure.ac | 81 +++++++++++++++++------ data/Makefile.am | 26 +++++++ data/xorg/gtest/dummy.conf | 4 + doc/Makefile.am | 46 ++++++------- examples/Makefile.am | 70 +++++++++++++++----- examples/xorg-gtest-example.cpp | 18 +++++ examples/xorg-gtest.cpp | 18 ----- include/Makefile.am | 31 ++++++++ include/xorg/gtest/environment.h | 33 +++++---- include/xorg/gtest/evemu/device.h | 91 ++++++++++++++++++++++++++ include/xorg/gtest/process.h | 35 ++++++---- include/xorg/gtest/test.h | 32 +++++---- include/xorg/gtest/xorg-gtest.h | 34 +++++++++ m4/gtest.m4 | 71 +++++++++++++++----- src/Makefile-xorg-gtest.am | 61 +++++++++++++++++ src/Makefile.am | 67 ++++++++++--------- src/defines.h | 6 + src/device.cpp | 94 +++++++++++++++++++++++++++ src/environment.cpp | 56 +++++++++------- src/libxorg-gtest.ver | 15 ---- src/libxorg-gtest_main.ver | 7 -- src/main.cpp | 125 ------------------------------------ src/process.cpp | 32 +++++---- src/test.cpp | 32 +++++---- src/xorg-gtest-all.cpp | 34 +++++++++ src/xorg-gtest_main.cpp | 131 ++++++++++++++++++++++++++++++++++++++ xorg-gtest.pc.in | 6 - 34 files changed, 1225 insertions(+), 376 deletions(-)
New commits: commit ad440d9c228a44981f1e2364fb0678840b08be3c Author: Chase Douglas <chase.doug...@canonical.com> Date: Mon Mar 19 17:00:45 2012 -0700 Release version 0.2.0 Signed-off-by: Chase Douglas <chase.doug...@canonical.com> diff --git a/configure.ac b/configure.ac index 2d70801..f3dd610 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([Dummy X.org Testing Environment for Google Test], - [0.1.1], + [0.2.0], [], [xorg-gtest]) AC_CONFIG_SRCDIR([Makefile.am]) commit 852b504288ca579a06b741b4588ee1b98b1b45f5 Author: Chase Douglas <chase.doug...@canonical.com> Date: Thu Mar 8 14:51:40 2012 -0800 Ship xorg-gtest.m4 and Makefile-xorg-gtest.am See README for instructions on how to use them. Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-by: Christopher James Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/Makefile.am b/Makefile.am index 2542b44..8e0a0c6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -23,7 +23,7 @@ # SOFTWARE. # -SUBDIRS = data doc include src examples +SUBDIRS = aclocal data doc include src examples pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = xorg-gtest.pc diff --git a/README b/README index 6b79f05..7a44075 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -X.Org dummy testing environment for Google Test +X.Org GTest testing environment for Google Test =============================================== Provides a Google Test environment for starting and stopping @@ -7,6 +7,70 @@ environment is defined in header environment.h. Please refer to the Google test documentation for information on how to add a custom environment. -Moreover, a custom main()-function that takes care of setting up the -environment is provided in libxtestingenvironment_main.a. This library can be -used as a replacement for libgtest_main.a +Moreover, a custom main() function that takes care of setting up the +environment is provided in xorg-gtest_main.cpp. This can be used as a +replacement for libgtest_main.a + +Using X.org GTest in a project +============================== + +The X.org GTest does not provide precompiled libraries. Each project must build +the X.org GTest sources. To facilitate this, aclocal and automake include files +are provided. Perform the following to integrate xorg-gtest into an autotools- +based project. + +Add the following line to the top level Makefile.am for your project: + +ACLOCAL_AMFLAGS = -I m4 --install + +This will ensure the latest xorg-gtest.m4 macro installed on your system is +copied into aclocal/. If a user runs autoreconf, they will already have the +macro even if they don't have xorg-gtest installed. + +Call CHECK_XORG_GTEST from configure.ac This will set the value of +$have_xorg_gtest and set $(XORG_GTEST_CPPFLAGS) and $(XORG_GTEST_CXXFLAGS). + +The last step is to modify your test automake rules for compiling and using +xorg-gtest. There are two methods to do this: simplified or manual. + +Simplified +---------- + +This method requires less changes to your Makefile.am, but has a few drawbacks: + +* xorg-gtest is compiled only once. If you need multiple versions of xorg-gtest + or gtest compiled with different flags, you will need to use the manual + method. +* The flags used to compile xorg-gtest must be the same as the flags used to + compile the tests. This means any flags other than XORG_GTEST_CPPFLAGS and + XORG_GTEST_CXXFLAGS must be provided through the AM_CPPFLAGS and AM_CXXFLAGS + variables. + +Copy Makefile-xorg-gtest.am into your project. + +In your test Makefile.am, add: + +include $(top_srcdir)/path/to/Makefile-xorg-gtest.am + +Append $(XORG_GTEST_BUILD_LIBS) to check_LIBRARIES. + +Append CPPFLAGS with $(XORG_GTEST_CPPFLAGS) and CXXFLAGS with +$(XORG_GTEST_CXXFLAGS) for any testing source objects. + +Finally, link against $(XORG_GTEST_LIBS). If you want the xorg-gtest main() +integration, link against $(XORG_GTEST_MAIN_LIBS) as well. + +Manual +------ + +This method is more flexible, but it requires the user to modify the Makefile.am +file manually. It is recommended that the user be familiar with automake before +attempting. + +Copy the contents of Makefile-xorg-gtest.am into your Makefile.am file. Adjust +the compilation flags as needed, keeping in mind that all non-warning flags must +match the flags used when compiling the test cases. Remove the gtest and/or +xorg-gtest main() library targets if you will not use them. Copy the gtest and +xorg-gtest library targets if multiple builds with different compilation flags +are needed. Finally, link the tests with the appropriate gtest and xorg-gtest +libraries and their dependencies: libpthread and libX11. diff --git a/aclocal/Makefile.am b/aclocal/Makefile.am new file mode 100644 index 0000000..3ea9969 --- /dev/null +++ b/aclocal/Makefile.am @@ -0,0 +1,27 @@ +# +# Makefile for the src subdirectory of xorg-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. +# + +aclocaldir = $(datadir)/aclocal +dist_aclocal_DATA = xorg-gtest.m4 diff --git a/aclocal/xorg-gtest.m4 b/aclocal/xorg-gtest.m4 new file mode 100644 index 0000000..52dd5aa --- /dev/null +++ b/aclocal/xorg-gtest.m4 @@ -0,0 +1,110 @@ +# serial 1 + +# 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])], + [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_CHECK_FILES([$GTEST_SOURCE/src/gtest-all.cc] + [$GTEST_SOURCE/src/gtest_main.cc], + [have_gtest=yes], + [have_gtest=no]) + + AS_IF([test "x$have_gtest_source" = xyes], + [AC_SUBST(GTEST_CPPFLAGS)] + [AC_SUBST(GTEST_SOURCE)]) +]) # _CHECK_GTEST + +# CHECK_XORG_GTEST([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Checks whether the xorg-gtest source is available on the system. Allows for +# adjusting the include and source path. Sets have_xorg_gtest=yes if the source +# is present. Sets XORG_GTEST_CPPFLAGS and XORG_GTEST_SOURCE to the preprocessor +# flags and source location respectively. Sets XORG_GTEST_LIBS to all the +# libraries needed to link against a built xorg-gtest library. +# +# Both default actions are no-ops. +AC_DEFUN([CHECK_XORG_GTEST], +[ + AC_REQUIRE([_CHECK_GTEST]) + + PKG_CHECK_EXISTS([xorg-gtest], + [have_xorg_gtest=yes], + [have_xorg_gtest=no]) + + XORG_GTEST_SOURCE=`$PKG_CONFIG --variable=sourcedir --print-errors xorg-gtest` + XORG_GTEST_CPPFLAGS=`$PKG_CONFIG --variable=CPPflags --print-errors xorg-gtest` + XORG_GTEST_CPPFLAGS="$GTEST_CPPFLAGS $XORG_GTEST_CPPFLAGS" + XORG_GTEST_CPPFLAGS="$XORG_GTEST_CPPFLAGS -I$XORG_GTEST_SOURCE" + + PKG_CHECK_MODULES(X11, [x11], [have_x11=yes], [have_x11=no]) + + # Check if we should include support for utouch-evemu + AC_ARG_WITH([evemu], + [AS_HELP_STRING([--with-evemu], + [support Linux input device recording playback + (default: enabled if available)])], + [], + [with_evemu=check]) + + AS_IF([test "x$with_evemu" = xyes], + [PKG_CHECK_MODULES(EVEMU, [utouch-evemu], [have_xorg_gtest_evemu=yes])], + [test "x$with_evemu" = xcheck], + [PKG_CHECK_MODULES(EVEMU, + [utouch-evemu], + [have_xorg_gtest_evemu=yes], + [have_xorg_gtest_evemu=no])]) + AS_IF([test "x$have_xorg_gtest_evemu" = xyes], + [XORG_GTEST_CPPFLAGS="$XORG_GTEST_CPPFLAGS -DHAVE_EVEMU"]) + + AS_IF([test "x$have_gtest" != xyes -o "x$have_x11" != xyes], + [have_xorg_gtest=no]) + + AS_IF([test "x$have_xorg_gtest" = xyes], + [AC_SUBST(XORG_GTEST_SOURCE)] + [AC_SUBST(XORG_GTEST_CPPFLAGS)] + + # Get BASE_CXXFLAGS and STRICT_CXXFLAGS + [XORG_MACROS_VERSION(1.17)] + [AC_LANG_PUSH([C++])] + [XORG_STRICT_OPTION] + [AC_LANG_POP] + [$1], + [$2]) + +]) # CHECK_XORG_GTEST diff --git a/configure.ac b/configure.ac index 37a6dc0..2d70801 100644 --- a/configure.ac +++ b/configure.ac @@ -74,6 +74,7 @@ AS_IF([test "x$enable_integration_tests" = xyes -a \ AM_CONDITIONAL(ENABLE_XORG_GTEST_TESTS, [test "x$have_dummy_module" = xyes ]) AC_CONFIG_FILES([Makefile + aclocal/Makefile data/Makefile doc/Makefile examples/Makefile diff --git a/src/Makefile-xorg-gtest.am b/src/Makefile-xorg-gtest.am new file mode 100644 index 0000000..185381d --- /dev/null +++ b/src/Makefile-xorg-gtest.am @@ -0,0 +1,61 @@ +# 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. +# + +XORG_GTEST_BUILD_LIBS = \ + libgtest.a \ + libgtest_main.a \ + libxorg-gtest.a \ + libxorg-gtest_main.a + +nodist_libgtest_a_SOURCES = $(GTEST_SOURCE)/src/gtest-all.cc +libgtest_a_CPPFLAGS = $(GTEST_CPPFLAGS) $(AM_CPPFLAGS) -w +libgtest_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS) + +nodist_libgtest_main_a_SOURCES = $(GTEST_SOURCE)/src/gtest_main.cc +libgtest_main_a_CPPFLAGS = $(GTEST_CPPFLAGS) $(AM_CPPFLAGS) -w +libgtest_main_a_CXXFLAGS = $(GTEST_CXXFLAGS) $(AM_CXXFLAGS) + +nodist_libxorg_gtest_a_SOURCES = $(XORG_GTEST_SOURCE)/src/xorg-gtest-all.cpp +libxorg_gtest_a_CPPFLAGS = \ + $(XORG_GTEST_CPPFLAGS) \ + $(GTEST_CPPFLAGS) \ + $(AM_CPPFLAGS) \ + -w +libxorg_gtest_a_CXXFLAGS = \ + $(XORG_GTEST_CXXFLAGS) \ + $(GTEST_CXXFLAGS) \ + $(AM_CPPFLAGS) + +nodist_libxorg_gtest_main_a_SOURCES = \ + $(XORG_GTEST_SOURCE)/src/xorg-gtest_main.cpp +libxorg_gtest_main_a_CPPFLAGS = \ + $(XORG_GTEST_CPPFLAGS) \ + $(GTEST_CPPFLAGS) \ + $(AM_CPPFLAGS) \ + -w +libxorg_gtest_main_a_CXXFLAGS = \ + $(XORG_GTEST_CXXFLAGS) \ + $(GTEST_CXXFLAGS) \ + $(AM_CXXFLAGS) + +XORG_GTEST_LIBS = libxorg-gtest.a libgtest.a -lpthread $(X11_LIBS) +XORG_GTEST_MAIN_LIBS = libxorg-gtest_main.a diff --git a/src/Makefile.am b/src/Makefile.am index c5a8413..148f1f2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -35,4 +35,7 @@ libxorg_gtest_main_sources = \ xorg-gtest_main.cpp srcinstalldir = $(prefix)/src/xorg-gtest/src -dist_srcinstall_DATA = $(libxorg_gtest_sources) $(libxorg_gtest_main_sources) +dist_srcinstall_DATA = \ + Makefile-xorg-gtest.am \ + $(libxorg_gtest_sources) \ + $(libxorg_gtest_main_sources) commit 3f019e8272e33869312a7b5a94af94e14c81cd15 Author: Chase Douglas <chase.doug...@canonical.com> Date: Tue Mar 13 23:30:39 2012 -0700 Print more helpful error message when X server fails to start Usually, xorg-gtest requires the dummy video driver. It also requires an X server at least version 1.12, or to be run as root when testing with a previous X server. Print this information when the server fails to start, and point the user to the log file for further details. Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/src/environment.cpp b/src/environment.cpp index 3da27cb..f4bb9e1 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -122,16 +122,22 @@ void xorg::testing::Environment::SetUp() { int status; int pid = waitpid(d_->process.Pid(), &status, WNOHANG); - if (pid == d_->process.Pid()) - throw std::runtime_error("Dummy X server failed to start, did you run as " - "root?"); - else if (pid == 0) + if (pid == d_->process.Pid()) { + std::string message; + message += "X server failed to start. Ensure that the \"dummy\" video " + "driver is installed. If the X.org server is older than 1.12, " + "tests will need to be run as root. Check "; + message += d_->path_to_log_file; + message += " for any errors"; + throw std::runtime_error(message); + } else if (pid == 0) { sleep(1); /* Give the dummy X server some time to start */ - else if (pid == -1) + } else if (pid == -1) { throw std::runtime_error("Could not get status of dummy X server " "process"); - else + } else { throw std::runtime_error("Invalid child PID returned by Process::Wait()"); + } } throw std::runtime_error("Unable to open connection to dummy X server"); commit 6d0cd228d5ea5ff734f3bc1754d0dfbb93e6d1b4 Author: Chase Douglas <chase.doug...@canonical.com> Date: Tue Mar 13 11:32:02 2012 -0700 Allow user to override default Xorg server binary This can be accomplished by compiling xorg-gtest with -DDEFAULT_XORG_SERVER=path/to/Xorg. Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/src/defines.h b/src/defines.h index 3bfc1da..3fb3304 100644 --- a/src/defines.h +++ b/src/defines.h @@ -2,7 +2,11 @@ #define XORGGTEST_DEFINES #define DEFAULT_XORG_LOGFILE "/tmp/Xorg.GTest.log" -#define DEFAULT_XORG_SERVER "Xorg" #define DEFAULT_DISPLAY 133 +/* Allow user to override default Xorg server*/ +#ifndef DEFAULT_XORG_SERVER +#define DEFAULT_XORG_SERVER "Xorg" +#endif + #endif commit 4acb16f939c73dc081775e29eb4089e4184fffbf Author: Chase Douglas <chase.doug...@canonical.com> Date: Thu Mar 8 14:24:16 2012 -0800 Install, but do not build into a library, the xorg-gtest sources This mimics the Google Test distribution mechanism. See: http://code.google.com/p/googletest/wiki/FAQ#Why_is_it_not_recommended_to_install_a_pre-compiled_copy_of_Goog Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/configure.ac b/configure.ac index 40a97f1..37a6dc0 100644 --- a/configure.ac +++ b/configure.ac @@ -11,13 +11,6 @@ AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE([enable]) -LIB_VERSION=0:0:0 -AC_SUBST([LIB_VERSION]) - -# Initialize libtool -AC_PROG_LIBTOOL - - # Checks for programs. AC_PROG_CXX AC_PROG_RANLIB @@ -55,6 +48,9 @@ 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])]) +AC_SUBST(SOURCEDIR, ['${prefix}/src/xorg-gtest']) +AC_SUBST(DUMMY_CONF_PATH, ['${datarootdir}/xorg/gtest/dummy.conf']) + # Check if we can build integration tests AS_IF([test "x$enable_integration_tests" != xno], [AC_MSG_CHECKING([for X.org server])] diff --git a/src/Makefile.am b/src/Makefile.am index e12e772..c5a8413 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,39 +23,16 @@ # SOFTWARE. # -lib_LTLIBRARIES = libxorg-gtest.la libxorg-gtest_main.la - -AM_CXXFLAGS = -I$(top_srcdir)/include $(XSERVER_CFLAGS) $(BASE_CXXFLAGS) - -libxorg_gtest_la_SOURCES = xorg-gtest-all.cpp - -libxorg_gtest_la_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - $(GTEST_CPPFLAGS) \ - -DDUMMY_CONF_PATH="\"$(datadir)/xorg/gtest/dummy.conf\"" - -libxorg_gtest_main_la_SOURCES = \ +libxorg_gtest_sources = \ + environment.cpp \ + device.cpp \ + process.cpp \ + test.cpp \ + xorg-gtest-all.cpp + +libxorg_gtest_main_sources = \ defines.h \ xorg-gtest_main.cpp -libxorg_gtest_main_la_LIBADD = libxorg-gtest.la - -libxorg_gtest_main_la_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - $(GTEST_CPPFLAGS) - -libxorg_gtest_la_LDFLAGS = $(XSERVER_LIBS) -Wl,--version-script=$(top_srcdir)/src/libxorg-gtest.ver -libxorg_gtest_main_la_LDFLAGS = \ - $(XSERVER_LIBS) \ - -Wl,--version-script=$(top_srcdir)/src/libxorg-gtest_main.ver - -if HAVE_EVEMU -libxorg_gtest_la_SOURCES += device.cpp - -libxorg_gtest_la_LIBADD = $(EVEMU_LIBS) -endif - srcinstalldir = $(prefix)/src/xorg-gtest/src -dist_srcinstall_DATA = $(libxorg_gtest_la_SOURCES) $(libxorg_gtest_main_la_SOURCES) - -EXTRA_DIST = libxorg-gtest.ver libxorg-gtest_main.ver +dist_srcinstall_DATA = $(libxorg_gtest_sources) $(libxorg_gtest_main_sources) diff --git a/src/libxorg-gtest.ver b/src/libxorg-gtest.ver deleted file mode 100644 index c617446..0000000 --- a/src/libxorg-gtest.ver +++ /dev/null @@ -1,24 +0,0 @@ -XORG_GTEST_1.0 { - global: - extern "C++" { - xorg::testing::Environment::*; - xorg::testing::Process::*; - xorg::testing::Test::*; - "typeinfo for xorg::testing::Environment"; - "typeinfo for xorg::testing::Test"; - "typeinfo name for xorg::testing::Environment"; - "typeinfo name for xorg::testing::Test"; - "vtable for xorg::testing::Environment"; - "vtable for xorg::testing::Test"; - }; - - local: - *; -}; - -XORG_GTEST_1.1 { - global: - extern "C++" { - xorg::testing::evemu::*; - }; -} XORG_GTEST_1.0; diff --git a/src/libxorg-gtest_main.ver b/src/libxorg-gtest_main.ver deleted file mode 100644 index 001ce91..0000000 --- a/src/libxorg-gtest_main.ver +++ /dev/null @@ -1,7 +0,0 @@ -XORG_GTEST_1.0 { - global: - main; - - local: - *; -}; diff --git a/xorg-gtest.pc.in b/xorg-gtest.pc.in index 7df6fbf..a80f666 100644 --- a/xorg-gtest.pc.in +++ b/xorg-gtest.pc.in @@ -1,11 +1,9 @@ prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ includedir=@includedir@ +sourcedir=@SOURCEDIR@ datarootdir=@datarootdir@ +CPPflags=-I${includedir} -I${sourcedir} -DDUMMY_CONF_PATH=\"@DUMMY_CONF_PATH@\" Name: xorg-gtest Description: X.org Google Test Environment Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -DDUMMY_CONF_PATH=@DUMMY_CONF_PATH@ -Libs: -L${libdir} -lxorg-gtest commit 71f006cadac2bc7f249965896d898143d7592f12 Author: Chase Douglas <chase.doug...@canonical.com> Date: Thu Mar 8 14:18:39 2012 -0800 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.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> 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 commit d02b5095dbe69b695034242a978c489aaef61109 Author: Chase Douglas <chase.doug...@canonical.com> Date: Thu Mar 8 14:00:04 2012 -0800 Provide meta-source file xorg-gtest-all.cpp This will make compiling the project each time it is used much easier. Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/src/Makefile.am b/src/Makefile.am index bfe1b16..e12e772 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -27,10 +27,7 @@ lib_LTLIBRARIES = libxorg-gtest.la libxorg-gtest_main.la AM_CXXFLAGS = -I$(top_srcdir)/include $(XSERVER_CFLAGS) $(BASE_CXXFLAGS) -libxorg_gtest_la_SOURCES = \ - environment.cpp \ - process.cpp \ - test.cpp +libxorg_gtest_la_SOURCES = xorg-gtest-all.cpp libxorg_gtest_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ diff --git a/src/xorg-gtest-all.cpp b/src/xorg-gtest-all.cpp new file mode 100644 index 0000000..fab6425 --- /dev/null +++ b/src/xorg-gtest-all.cpp @@ -0,0 +1,34 @@ +/******************************************************************************* + * + * X testing environment - Google Test environment feat. dummy x server + * + * Copyright (C) 2011, 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. + * + ******************************************************************************/ + +#include "src/environment.cpp" +#include "src/process.cpp" +#include "src/test.cpp" + +#ifdef HAVE_EVEMU +#include "src/device.cpp" +#endif commit 5afddf4681d6ce651164c5486a15b41a0b098ac4 Author: Chase Douglas <chase.doug...@canonical.com> Date: Thu Mar 8 11:55:01 2012 -0800 Rename main.cpp to xorg-gtest_main.cpp This matches the library name and will help with understanding what the includes since we are now shipping the source code. Signed-off-by: Chase Douglas <chase.doug...@canonical.com> Reviewed-By: Christopher Halse Rogers <christopher.halse.rog...@canonical.com> diff --git a/src/Makefile.am b/src/Makefile.am index c675bab..bfe1b16 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -39,7 +39,7 @@ libxorg_gtest_la_CPPFLAGS = \ libxorg_gtest_main_la_SOURCES = \ defines.h \ - main.cpp + xorg-gtest_main.cpp libxorg_gtest_main_la_LIBADD = libxorg-gtest.la diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 5e5a748..0000000 --- a/src/main.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * - * X testing environment - Google Test environment feat. dummy x server - * - * Copyright (C) 2011, 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. - * - ******************************************************************************/ - -#include <getopt.h> - -#include <gtest/gtest.h> - -#include "xorg/gtest/environment.h" -#include "defines.h" - -namespace { - -int help = false; -int no_dummy_server = false; -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1s9ntw-0002do...@vasks.debian.org