[PATCH xorg-gtest v2 8/9] Ship xorg-gtest.m4 and Makefile-xorg-gtest.am

Christopher James Halse Rogers christopher.halse.rogers at canonical.com
Sun Mar 18 15:41:30 PDT 2012


On Thu, 2012-03-15 at 12:00 +1100, Christopher James Halse Rogers wrote:
> On Tue, 2012-03-13 at 11:47 -0700, Chase Douglas wrote:
> > See README for instructions on how to use them.
> > 
> > Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
> > ---
> >  Makefile.am                |    2 +-
> >  README                     |   41 +++++++++++++++--
> >  aclocal/Makefile.am        |   27 +++++++++++
> >  aclocal/xorg-gtest.m4      |  105 ++++++++++++++++++++++++++++++++++++++++++++
> >  configure.ac               |    3 +
> >  src/Makefile-xorg-gtest.am |   61 +++++++++++++++++++++++++
> >  src/Makefile.am            |    5 ++-
> >  xorg-gtest.pc.in           |    1 +
> >  8 files changed, 239 insertions(+), 6 deletions(-)
> >  create mode 100644 aclocal/Makefile.am
> >  create mode 100644 aclocal/xorg-gtest.m4
> >  create mode 100644 src/Makefile-xorg-gtest.am
> > 
> > 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..83c5d38 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,39 @@ 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).
> > +
> > +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.
> > 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..a1ef1cf
> > --- /dev/null
> > +++ b/aclocal/xorg-gtest.m4
> > @@ -0,0 +1,105 @@
> > +# 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
> > +
> > +# 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.
> > +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_MAKEFILE=`$PKG_CONFIG --variable=makefile --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_MAKEFILE)]
> > +        [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
> > +]) # CHECK_XORG_GTEST
> > diff --git a/configure.ac b/configure.ac
> > index afb10b3..c5ee350 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -50,8 +50,11 @@ 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'])
> > +AC_SUBST(SOURCE_MAKEFILE,
> > +         ['${prefix}/src/xorg-gtest/src/Makefile-xorg-gtest.am'])
> >  
> >  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
> 
> I think we could probably do better than this with a static makefile;
> that way client interface would be a simple "include $THE_MAKEFILE"
> rather than needing special autofoo treatment.
> 
> I'll see how hard it is to write such a beast.

It turns out to be significantly uglier than I originally thought.
Please push this.

I'll send a patch for an additional plain-jane makefile for non-autofoo
projects, but this looks to be as good as we'll get for autotools
projects.

Reviewed-By: Christopher James Halse Rogers
<christopher.halse.rogers at canonical.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.x.org/archives/xorg-devel/attachments/20120319/6a83b5a9/attachment.pgp>


More information about the xorg-devel mailing list