[PATCH v2 1/3] Add xorg-gtest integration test framework

Chase Douglas chase.douglas at canonical.com
Tue May 15 16:51:40 PDT 2012


On 05/15/2012 04:18 PM, Peter Hutterer wrote:
> On Tue, May 15, 2012 at 11:05:25AM -0700, Chase Douglas wrote:

[snip]

>> diff --git a/m4/xorg-gtest.m4 b/m4/xorg-gtest.m4
>> new file mode 100644
>> index 0000000..52dd5aa
>> --- /dev/null
>> +++ b/m4/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"])
> 
> I've had a diff for this in my xorg-gtest tree (forgot to send it out,
> sorry) that uses the include path from the source if one is given. Right
> now, I have to specify source and include path, though both essentially
> point to the right directory.
> 
> http://patchwork.freedesktop.org/patch/10339/

Yes, I'll merge that in, and then redo this patch.

>> +
>> +  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
> 
> does anyone actually use the term "Linux input device recording playback"
> instead of just calling it evemu?

I can see a BSD user not realizing that it's Linux only. This is a file
copied from the xorg-gtest distribution (via aclocal), so if you want to
change it send a patch there. But I don't see why a more verbose
configure help string is a problem :).

>> +                               (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"])
> 
> no AC_DEFINE for HAVE_EVEMU? that seems to be the traditional way
> might be worth having a test-config.h.in for hese things

An AC_DEFINE would modify the compilation of every source file. This
limits the macro definition only to those files that are compiled with
XORG_GTEST_CPPFLAGS, which is the xorg-gtest implementation itself.

This is an aclocal macro from xorg-gtest, so it shouldn't be modifying
the build of the project itself.

>> +
>> +  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/test/integration/Makefile-xorg-gtest.am b/test/integration/Makefile-xorg-gtest.am
>> new file mode 100644
>> index 0000000..185381d
>> --- /dev/null
>> +++ b/test/integration/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
> 
> -w? really?

Note that this is also another xorg-gtest file, so any changes would
need to be patched there :).

The reason for the -w here is that we don't want to cause warnings (and
errors when built with -Werror) due to issues in xorg-gtest and gtest
themselves. This flag is only used for building those sources. It isn't
used for building any tests in the project that is using xorg-gtest.

-- Chase


More information about the xorg-devel mailing list