[PATCH] Update autotools to simplify cross-compiling

Kristian Høgsberg krh at bitplanet.net
Thu Dec 9 11:03:59 PST 2010


On Fri, Dec 3, 2010 at 11:54 AM, Michael Steinert
<mike.steinert at gmail.com> wrote:
> * Scanner

Hi Michael,

Thanks for the patch.  There's a lot of good stuff there, but there's
a little to much for just one patch.  I'd appreciate if you could
split it into different patches that each do one thing and repost the
patch series.

Also, signalfd, timerfd and epoll are hard requirements of wayland.
Checking for the in configure is OK, but if they're not there, we
can't build Wayland, and the #ifdef HAVE_SYS_SIGNALFD_H doesn't make
sense.  Also, describing the different clients is a good idea, but
lets put it in the README file instead of clients/Makefile.am.  And
finally, I appreciate the work you've put into making Wayland
cross-compile compatible, but it's not something I do on a regular
basis, so I can't promise I wont break it.  If you want to maintain
that feature of the build system, I'd much appreciate it, but be
patient with me as I don't typically have that in mind when I move
things around.

Oh and maybe you can explain this to me: why do we need #ifdef
HAVE_CONFIG_H around the config.h includes?  We don't support not
having a config.h and if for some reason it's not there, I want an
error instead of silently falling back to everything undefined.

Kristian

> The scanner was renamed to "wayland-scanner" and is now an installed
> program. When configure detects cross-compilation it will look for
> wayland-scanner in $PATH instead of compiling it. The environment
> variable $WAYLAND_SCANNER may be supplied at configure time if
> wayland-scanner is not installed in $PATH.
>
> Scanner output will be directed to the source directory when
> $top_builddir != $top_srcdir.
>
> * Sample clients & compositor
>
> The sample clients & compositor can now be disabled via the configure
> options --disable-compositor and --disable-clients. These options
> default to "auto", i.e. they will be built if all of the prerequisites
> are satisfied.
>
> * General
>
> Updated .gitignore for the case where $top_builddir != $top_srcdir.
>
> All C files now properly include "config.h".
>
> Pkg-config files are installed in "$(libdir)/pkgconfig".
>
> Signed-off-by: Michael Steinert <mike.steinert at gmail.com>
> ---
>  .gitignore                      |   15 +++-
>  Makefile.am                     |    3 +-
>  clients/Makefile.am             |   89 +++++++++++++++-------
>  clients/cairo-util.c            |    4 +
>  clients/dnd.c                   |    4 +
>  clients/flower.c                |    4 +
>  clients/gears.c                 |    4 +
>  clients/image.c                 |    4 +
>  clients/screenshot.c            |    4 +
>  clients/smoke.c                 |    4 +
>  clients/terminal.c              |    4 +
>  clients/view.c                  |    4 +
>  clients/wayland-glib.c          |    4 +
>  clients/window.c                |    4 +-
>  compositor/Makefile.am          |   17 +++--
>  compositor/compositor-drm.c     |    4 +
>  compositor/compositor-wayland.c |    2 +-
>  compositor/compositor-x11.c     |    2 +-
>  compositor/compositor.c         |    4 +
>  compositor/drm.c                |    4 +
>  compositor/screenshooter.c      |    4 +
>  compositor/shm.c                |    4 +
>  configure.ac                    |  155 +++++++++++++++++++++++++++-----------
>  m4/wayland.m4                   |   15 ++++
>  wayland/Makefile.am             |   52 ++++++++-----
>  wayland/connection.c            |    4 +
>  wayland/event-loop.c            |   21 +++++-
>  wayland/scanner.c               |    4 +
>  wayland/scanner.mk              |   12 ++--
>  wayland/wayland-client.c        |    4 +
>  wayland/wayland-hash.c          |    4 +
>  wayland/wayland-server.c        |    4 +
>  wayland/wayland-util.c          |    4 +
>  33 files changed, 353 insertions(+), 118 deletions(-)
>  create mode 100644 m4/wayland.m4
>
> diff --git a/.gitignore b/.gitignore
> index 7c5bfe5..6f47900 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -1,3 +1,4 @@
> +*.a
>  *.deps
>  *.jpg
>  *.la
> @@ -7,22 +8,26 @@
>  *.so
>  *.swp
>  *~
> +*-client-protocol.h
> +*-protocol.c
> +*-server-protocol.h
>  .libs
>  /aclocal.m4
>  /autom4te.cache
>  /config.guess
> -/config.h
> +config.h
>  /config.h.in
> -/config.log
> +config.log
>  /config.mk
> -/config.status
> +config.status
>  /config.sub
>  /configure
>  /depcomp
>  /install-sh
> -/libtool
> +libtool
>  /ltmain.sh
>  /missing
> -/stamp-h1
> +stamp-h1
>  Makefile
>  Makefile.in
> +wayland-scanner
> diff --git a/Makefile.am b/Makefile.am
> index 03d15db..67ba936 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -1,3 +1,4 @@
> -SUBDIRS = wayland compositor clients data
> +SUBDIRS = wayland data $(WAYLAND_COMPOSITOR) $(WAYLAND_CLIENTS)
> +DIST_SUBDIRS = compositor clients
>
>  ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
> diff --git a/clients/Makefile.am b/clients/Makefile.am
> index 56b6a2b..8faf198 100644
> --- a/clients/Makefile.am
> +++ b/clients/Makefile.am
> @@ -1,42 +1,73 @@
> -noinst_PROGRAMS = gears flower screenshot terminal image view dnd smoke
> +noinst_PROGRAMS = dnd flower gears image screenshot smoke terminal view
>  noinst_LTLIBRARIES = libtoytoolkit.la
>
> -INCLUDES =                                     \
> -       -I$(top_srcdir)/wayland                 \
> -       -I$(top_builddir)/wayland                       \
> -       $(CLIENT_CFLAGS) $(POPPLER_CFLAGS)
> +AM_CPPFLAGS =                                          \
> +       -DDATADIR='"$(datadir)"'                        \
> +       $(CLIENT_CFLAGS)
>
> -LDADD = libtoytoolkit.la                               \
> +LDADD =                                                        \
> +       libtoytoolkit.la                                \
>        $(top_builddir)/wayland/libwayland-client.la    \
>        $(CLIENT_LIBS) -lrt -lm
>
> -AM_CFLAGS = $(GCC_CFLAGS)
> -AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
> +# dnd: drag 'n' drop demo
> +dnd_SOURCES =                                          \
> +       dnd.c
>
> -libtoytoolkit_la_SOURCES =                     \
> -       window.c                                \
> -       window.h                                \
> -       wayland-glib.c                          \
> -       wayland-glib.h                          \
> -       cairo-util.c                            \
> -       cairo-util.h
> +# flower: display a rotating flower
> +flower_SOURCES =                                       \
> +       flower.c
> +
> +# gears: similar to the X11 glxgears demo
> +gears_SOURCES =                                                \
> +       gears.c
>
> -flower_SOURCES = flower.c
> -smoke_SOURCES = smoke.c
> -gears_SOURCES = gears.c
> -screenshot_SOURCES = screenshot.c screenshooter-protocol.c
> -terminal_SOURCES = terminal.c
> -image_SOURCES = image.c
> -view_SOURCES = view.c
> -dnd_SOURCES = dnd.c
> -
> -BUILT_SOURCES =                                        \
> -       screenshooter-client-protocol.h         \
> +# image: display image
> +image_SOURCES =                                                \
> +       image.c
> +
> +# screeshot: create a screenshot image
> +screenshot_SOURCES =                                   \
> +       screenshot.c                                    \
>        screenshooter-protocol.c
>
> +# smoke:
> +smoke_SOURCES =                                                \
> +       smoke.c
> +
> +# terminal: a simple terminal emulator
> +terminal_LDADD = -lutil
> +
> +terminal_SOURCES =                                     \
> +       terminal.c
> +
> +# view: display PDF files (requires a URI)
> +view_CPPFLAGS =                                                \
> +       $(POPPLER_CFLAGS)
> +
> +view_LDADD = $(POPPLER_LIBS)
> +
> +view_SOURCES =                                         \
> +       view.c
> +
> +# libtoytoolkit: support library
> +libtoytoolkit_la_SOURCES =                             \
> +       window.c                                        \
> +       window.h                                        \
> +       wayland-glib.c                                  \
> +       wayland-glib.h                                  \
> +       cairo-util.c                                    \
> +       cairo-util.h
> +
> +if CROSS_COMPILING
> +else
> +$(BUILT_SOURCES): $(top_srcdir)/wayland/wayland-scanner
> +endif
> +
> +BUILT_SOURCES =                                                \
> +       $(srcdir)/screenshooter-client-protocol.h       \
> +       $(srcdir)/screenshooter-protocol.c
> +
>  CLEANFILES = $(BUILT_SOURCES)
>
>  include $(top_srcdir)/wayland/scanner.mk
> -
> -terminal_LDADD = $(LDADD) -lutil
> -view_LDADD = $(LDADD) $(POPPLER_LIBS)
> diff --git a/clients/cairo-util.c b/clients/cairo-util.c
> index 3aef0af..5377054 100644
> --- a/clients/cairo-util.c
> +++ b/clients/cairo-util.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdlib.h>
>  #include <string.h>
> diff --git a/clients/dnd.c b/clients/dnd.c
> index e6dd091..988a32a 100644
> --- a/clients/dnd.c
> +++ b/clients/dnd.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/flower.c b/clients/flower.c
> index b919cf5..3ce585e 100644
> --- a/clients/flower.c
> +++ b/clients/flower.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/gears.c b/clients/gears.c
> index 7d3c310..d8d8e83 100644
> --- a/clients/gears.c
> +++ b/clients/gears.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/image.c b/clients/image.c
> index bb563ed..6c193df 100644
> --- a/clients/image.c
> +++ b/clients/image.c
> @@ -21,6 +21,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/screenshot.c b/clients/screenshot.c
> index 8f44460..0e501ac 100644
> --- a/clients/screenshot.c
> +++ b/clients/screenshot.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdlib.h>
>  #include <stdio.h>
> diff --git a/clients/smoke.c b/clients/smoke.c
> index 43226ad..078a374 100644
> --- a/clients/smoke.c
> +++ b/clients/smoke.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/terminal.c b/clients/terminal.c
> index 2f12f8a..3eef1f7 100644
> --- a/clients/terminal.c
> +++ b/clients/terminal.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/view.c b/clients/view.c
> index 67149fb..499199d 100644
> --- a/clients/view.c
> +++ b/clients/view.c
> @@ -21,6 +21,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <stdio.h>
>  #include <stdlib.h>
> diff --git a/clients/wayland-glib.c b/clients/wayland-glib.c
> index fa7a9f5..95c8e5a 100644
> --- a/clients/wayland-glib.c
> +++ b/clients/wayland-glib.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdint.h>
>  #include <glib/giochannel.h>
>  #include "wayland-client.h"
> diff --git a/clients/window.c b/clients/window.c
> index d03ef4b..e07ebd4 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -20,7 +20,9 @@
>  * OF THIS SOFTWARE.
>  */
>
> -#include "../config.h"
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
>
>  #include <stdint.h>
>  #include <stdio.h>
> diff --git a/compositor/Makefile.am b/compositor/Makefile.am
> index 0b28cad..f20b8b0 100644
> --- a/compositor/Makefile.am
> +++ b/compositor/Makefile.am
> @@ -1,13 +1,11 @@
>  noinst_PROGRAMS = compositor
>
> -INCLUDES =                                     \
> +compositor_CPPFLAGS =                          \
> +       -DDATADIR='"$(datadir)"'                \
>        -I$(top_srcdir)/wayland                 \
>        -I$(top_builddir)/wayland               \
>        $(COMPOSITOR_CFLAGS)
>
> -AM_CFLAGS = $(GCC_CFLAGS)
> -AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
> -
>  compositor_LDADD =                                     \
>        $(top_builddir)/wayland/libwayland-server.la    \
>        $(top_builddir)/wayland/libwayland-client.la    \
> @@ -30,9 +28,14 @@ udevrulesddir = $(sysconfdir)/udev/rules.d
>  dist_udevrulesd_DATA =                         \
>        70-wayland.rules
>
> -BUILT_SOURCES =                                        \
> -       screenshooter-server-protocol.h         \
> -       screenshooter-protocol.c
> +if CROSS_COMPILING
> +else
> +$(BUILT_SOURCES): $(top_srcdir)/wayland/wayland-scanner
> +endif
> +
> +BUILT_SOURCES =                                                \
> +       $(srcdir)/screenshooter-server-protocol.h       \
> +       $(srcdir)/screenshooter-protocol.c
>
>  CLEANFILES = $(BUILT_SOURCES)
>
> diff --git a/compositor/compositor-drm.c b/compositor/compositor-drm.c
> index 1d04c06..61b9316 100644
> --- a/compositor/compositor-drm.c
> +++ b/compositor/compositor-drm.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
> diff --git a/compositor/compositor-wayland.c b/compositor/compositor-wayland.c
> index fa630bc..df625d9 100644
> --- a/compositor/compositor-wayland.c
> +++ b/compositor/compositor-wayland.c
> @@ -17,7 +17,7 @@
>  */
>
>  #ifdef HAVE_CONFIG_H
> -#include <config.h>
> +#include "config.h"
>  #endif
>
>  #include <stddef.h>
> diff --git a/compositor/compositor-x11.c b/compositor/compositor-x11.c
> index 3aa2475..bf1f2d6 100644
> --- a/compositor/compositor-x11.c
> +++ b/compositor/compositor-x11.c
> @@ -17,7 +17,7 @@
>  */
>
>  #ifdef HAVE_CONFIG_H
> -#include <config.h>
> +#include "config.h"
>  #endif
>
>  #include <stddef.h>
> diff --git a/compositor/compositor.c b/compositor/compositor.c
> index 025b022..23ec0a2 100644
> --- a/compositor/compositor.c
> +++ b/compositor/compositor.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #define _GNU_SOURCE
>
>  #include <stdio.h>
> diff --git a/compositor/drm.c b/compositor/drm.c
> index 59a72f2..5c6bf4e 100644
> --- a/compositor/drm.c
> +++ b/compositor/drm.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
> diff --git a/compositor/screenshooter.c b/compositor/screenshooter.c
> index c1716ec..c8363ca 100644
> --- a/compositor/screenshooter.c
> +++ b/compositor/screenshooter.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>  #include <GLES2/gl2.h>
>  #include <gdk-pixbuf/gdk-pixbuf.h>
> diff --git a/compositor/shm.c b/compositor/shm.c
> index 023cde0..4d9bb9c 100644
> --- a/compositor/shm.c
> +++ b/compositor/shm.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include <string.h>
> diff --git a/configure.ac b/configure.ac
> index 5568218..ca456f7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1,62 +1,127 @@
> +# Initialize autoconf & automake
>  AC_PREREQ([2.64])
> -AC_INIT([wayland],
> -        [0.1],
> -        [https://bugs.freedesktop.org/enter_bug.cgi?product=wayland],
> -        [wayland],
> -        [http://wayland.freedesktop.org/])
> -
> -AC_CONFIG_HEADERS([config.h])
> +AC_INIT([Wayland], [0.1],
> +       [https://bugs.freedesktop.org/enter_bug.cgi?product=wayland],
> +       [wayland], [http://wayland.freedesktop.org/])
>  AC_CONFIG_MACRO_DIR([m4])
> -
>  AM_INIT_AUTOMAKE([1.11 foreign dist-bzip2])
> -
>  AM_SILENT_RULES([yes])
> +AC_CONFIG_SRCDIR([wayland/wayland-client.h])
>
>  # Check for programs
>  AC_PROG_CC
> +PKG_PROG_PKG_CONFIG
>
>  # Initialize libtool
>  LT_PREREQ([2.2])
>  LT_INIT
>
> -PKG_PROG_PKG_CONFIG()
> -PKG_CHECK_MODULES(FFI, [libffi])
> +# Enable gcc options
> +WAYLAND_GCC_OPTIONS([-Wall -g -Wstrict-prototypes -Wmissing-prototypes -fvisibility=hidden])
>
> -PKG_CHECK_MODULES(COMPOSITOR,
> -                 [egl glesv2 gdk-pixbuf-2.0 libudev >= 136 libdrm >= 2.4.17] xcb-dri2 xcb-xfixes)
> -PKG_CHECK_MODULES(CLIENT, [egl gl cairo gdk-pixbuf-2.0 glib-2.0 gobject-2.0 xkbcommon libdrm])
> -PKG_CHECK_MODULES(POPPLER, [poppler-glib gdk-2.0])
> -PKG_CHECK_MODULES(CAIRO_GL, [cairo-gl],
> -                 [have_cairo_gl=yes], [have_cairo_gl=no])
> -AS_IF([test "x$have_cairo_gl" = "xyes"],
> -      [AC_DEFINE([HAVE_CAIRO_GL], [1], [Have cairo-gl])])
> +# Check Wayland prerequisites
> +PKG_CHECK_MODULES([FFI], [libffi])
>
> -if test $CC = gcc; then
> -       GCC_CFLAGS="-Wall -g -Wstrict-prototypes -Wmissing-prototypes -fvisibility=hidden"
> -fi
> -AC_SUBST(GCC_CFLAGS)
> -
> -EXPAT_LIB=""
> -AC_ARG_WITH(expat, [  --with-expat=<dir>      Use expat from here],
> -                  [ expat=$withval
> -                    CPPFLAGS="$CPPFLAGS -I$withval/include"
> -                    LDFLAGS="$LDFLAGS -L$withval/lib" ] )
> -AC_CHECK_HEADERS(expat.h, [AC_DEFINE(HAVE_EXPAT_H)],
> -                [AC_MSG_ERROR([Can't find expat.h. Please install expat.])])
> -AC_CHECK_LIB(expat, XML_ParserCreate, [EXPAT_LIBS="-lexpat"],
> -            [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
> -AC_SUBST(EXPAT_LIBS)
> -
> -# workaround a bug in xcb-dri2 generated by xcb-proto 1.6
> -AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
> -            [AC_DEFINE([XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN], [1],
> +# signalfd & timerfd: Linux 2.6.22 [8 July 2007]
> +AC_CHECK_HEADERS([sys/signalfd.h sys/timerfd.h])
> +
> +# Compositor option
> +AC_ARG_ENABLE([compositor],
> +       [AC_HELP_STRING([--enable-compositor],
> +               [enable the test compositor @<:@default=auto@:>@])],,
> +       [enableval=auto])
> +AC_CACHE_CHECK([if the test compositor is enabled],
> +       [wayland_cv_enable_compositor],
> +       [wayland_cv_enable_compositor="$enableval"])
> +if test "x$wayland_cv_enable_compositor" != "xno"; then
> +       WAYLAND_COMPOSITOR=compositor
> +       PKG_CHECK_MODULES([COMPOSITOR],
> +               [egl glesv2 gdk-pixbuf-2.0 libudev >= 136 libdrm >= 2.4.17 xcb-dri2 xcb-xfixes],
> +               [],
> +               [WAYLAND_COMPOSITOR=
> +               wayland_cv_enable_compositor=no])
> +       # workaround a bug in xcb-dri2 generated by xcb-proto 1.6
> +       AC_CHECK_LIB([xcb-dri2], [xcb_dri2_connect_alignment_pad], [],
> +               [AC_DEFINE([XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN], [1],
>                        [Define to 1 if xcb_dri2_connect_device_name is broken])])
> +fi
> +AC_SUBST([WAYLAND_COMPOSITOR])
> +
> +# Clients option
> +AC_ARG_ENABLE([clients],
> +       [AC_HELP_STRING([--enable-clients],
> +               [enable the test clients @<:@default=auto@:>@])],,
> +       [enableval=auto])
> +AC_CACHE_CHECK([if the test clients are enabled],
> +       [wayland_cv_enable_clients],
> +       [wayland_cv_enable_clients="$enableval"])
> +if test "x$wayland_cv_enable_clients" != "xno"; then
> +       WAYLAND_CLIENTS=clients
> +       PKG_CHECK_MODULES([CLIENT],
> +               [egl gl cairo gdk-pixbuf-2.0 glib-2.0 gobject-2.0 xkbcommon libdrm],
> +               [],
> +               [WAYLAND_CLIENTS=
> +               wayland_cv_enable_clients=no])
> +       PKG_CHECK_MODULES([POPPLER], [poppler-glib gdk-2.0],
> +               [],
> +               [WAYLAND_CLIENTS=
> +               wayland_cv_enable_clients=no])
> +       PKG_CHECK_MODULES([CAIRO_GL], [cairo-gl],
> +               [AC_DEFINE([HAVE_CAIRO_GL], [1],
> +                       [Define to 1 if cairo-gl is available])],
> +               [:])
> +fi
> +AC_SUBST([WAYLAND_CLIENTS])
>
> -AC_CONFIG_FILES([wayland/wayland-server.pc
> -                wayland/wayland-client.pc
> -                Makefile
> -                wayland/Makefile
> -                compositor/Makefile
> -                clients/Makefile
> -                data/Makefile])
> +# Configure the Wayland scanner
> +AM_CONDITIONAL([CROSS_COMPILING], [test "x$cross_compiling" = "xyes"])
> +if test "x$cross_compiling" = "xyes"; then
> +       AC_ARG_VAR([WAYLAND_SCANNER],
> +               [Set the full path to the Wayland scanner when cross-compiling])
> +       AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner])
> +       if test "x$WAYLAND_SCANNER" = "x"; then
> +               AC_MSG_WARN([A native version of wayland-scanner is required when cross-compiling])
> +               wayland_scanner=wayland-scanner
> +       else
> +               wayland_scanner=$WAYLAND_SCANNER
> +       fi
> +else
> +       AC_ARG_WITH([expat],
> +               [AC_HELP_STRING([--with-expat=PREFIX],
> +                       [Use Expat from PREFIX/include and PREFIX/lib])],
> +               [if test "x$withval" = "xyes"; then
> +                       AC_MSG_WARN(['--with-expat' requires an argument.])
> +               else
> +                       if test -d "$withval"; then
> +                               CPPFLAGS="$CPPFLAGS -I$withval/include"
> +                               LDFLAGS="$LDFLAGS -L$withval/lib"
> +                       else
> +                               AC_MSG_WARN(['--with-expat': $withval is not a directory])
> +                       fi
> +               fi])
> +       AC_CHECK_HEADERS([expat.h], [],
> +               [AC_MSG_ERROR([Unable to find Expat header file; See http://expat.sourceforge.net/])])
> +       AC_CHECK_LIB([expat], [XML_ParserCreate], [],
> +               [AC_MSG_ERROR([Unable to find Expat library; See http://expat.sourceforge.net/])])
> +       wayland_scanner='$(top_builddir)/wayland/wayland-scanner'
> +fi
> +AC_SUBST([wayland_scanner])
> +
> +# Output files
> +AC_CONFIG_HEADERS([config.h])
> +AC_CONFIG_FILES([
> +       clients/Makefile
> +       compositor/Makefile
> +       data/Makefile
> +       Makefile
> +       wayland/Makefile
> +       wayland/wayland-server.pc
> +       wayland/wayland-client.pc])
>  AC_OUTPUT
> +AC_MSG_RESULT([
> +$PACKAGE_NAME build options
> +       Host: $host
> +       Version: $VERSION
> +       Compositor: $wayland_cv_enable_compositor
> +       Clients: $wayland_cv_enable_clients
> +])
> diff --git a/m4/wayland.m4 b/m4/wayland.m4
> new file mode 100644
> index 0000000..87d1413
> --- /dev/null
> +++ b/m4/wayland.m4
> @@ -0,0 +1,15 @@
> +#serial 1
> +
> +# WAYLAND_GCC_OPTIONS(options)
> +# ----------------------------
> +# Enable compiler options for gcc.
> +AC_DEFUN([WAYLAND_GCC_OPTIONS],
> +[if test "x$GCC" = "xyes"; then
> +    for option in "$1"; do
> +        case " $CFLAGS " in
> +        *[[\ \ ]]$option[[\ \  ]]*) ;;
> +        *) CFLAGS="$CFLAGS $option" ;;
> +        esac
> +    done
> +fi
> +])dnl
> diff --git a/wayland/Makefile.am b/wayland/Makefile.am
> index 6e48eb8..4f9ccae 100644
> --- a/wayland/Makefile.am
> +++ b/wayland/Makefile.am
> @@ -1,48 +1,58 @@
> -lib_LTLIBRARIES = libwayland-server.la libwayland-client.la
> +lib_LTLIBRARIES = libwayland-client.la libwayland-server.la
>  noinst_LTLIBRARIES = libwayland-util.la
>
>  include_HEADERS =                              \
> -       wayland-util.h                          \
> -       wayland-server-protocol.h               \
> -       wayland-server.h                        \
> +       wayland-client.h                        \
>        wayland-client-protocol.h               \
> -       wayland-client.h
> +       wayland-server.h                        \
> +       wayland-server-protocol.h               \
> +       wayland-util.h
>
> +libwayland_util_la_CPPFLAGS = $(FFI_CFLAGS)
>  libwayland_util_la_SOURCES =                   \
>        connection.c                            \
>        connection.h                            \
> +       wayland-hash.c                          \
>        wayland-util.c                          \
> -       wayland-util.h                          \
> -       wayland-hash.c
> +       wayland-util.h
>
> +libwayland_server_la_CPPFLAGS = $(FFI_CFLAGS)
>  libwayland_server_la_LIBADD = $(FFI_LIBS) libwayland-util.la
>  libwayland_server_la_SOURCES =                 \
> +       event-loop.c                            \
>        wayland-protocol.c                      \
>        wayland-server.c                        \
> -       event-loop.c
> +       wayland-server-protocol.h
>
> +libwayland_client_la_CPPFLAGS = $(FFI_CFLAGS)
>  libwayland_client_la_LIBADD = $(FFI_LIBS) libwayland-util.la
>  libwayland_client_la_SOURCES =                 \
> -       wayland-protocol.c                      \
> -       wayland-client.c
> -
> -INCLUDES = $(FFI_CFLAGS)
> -AM_CFLAGS = $(GCC_CFLAGS)
> +       wayland-client.c                        \
> +       wayland-client-protocol.h               \
> +       wayland-protocol.c
>
> -include $(top_srcdir)/wayland/scanner.mk
> +pkgconfigdir = $(libdir)/pkgconfig
> +pkgconfig_DATA =                               \
> +       wayland-client.pc                       \
> +       wayland-server.pc
>
> -noinst_PROGRAMS = scanner
> +if CROSS_COMPILING
> +else
> +bin_PROGRAMS = wayland-scanner
>
> -scanner_SOURCES =                              \
> +wayland_scanner_SOURCES =                      \
>        scanner.c
>
> -scanner_LDADD = $(EXPAT_LIBS) libwayland-util.la
> +wayland_scanner_LDADD = libwayland-util.la
>
> -$(BUILT_SOURCES) : scanner
> +$(BUILT_SOURCES): wayland-scanner
> +endif
>
>  BUILT_SOURCES =                                        \
> -       wayland-server-protocol.h               \
> -       wayland-client-protocol.h               \
> -       wayland-protocol.c
> +       $(srcdir)/wayland-protocol.c            \
> +       $(srcdir)/wayland-client-protocol.h     \
> +       $(srcdir)/wayland-server-protocol.h
>
>  CLEANFILES = $(BUILT_SOURCES)
> +
> +include scanner.mk
> diff --git a/wayland/connection.c b/wayland/connection.c
> index dadf2c3..3d577a5 100644
> --- a/wayland/connection.c
> +++ b/wayland/connection.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>  #include <stdint.h>
>  #include <string.h>
> diff --git a/wayland/event-loop.c b/wayland/event-loop.c
> index bf2a9aa..39dae23 100644
> --- a/wayland/event-loop.c
> +++ b/wayland/event-loop.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stddef.h>
>  #include <stdio.h>
>  #include <errno.h>
> @@ -29,8 +33,12 @@
>  #include <sys/socket.h>
>  #include <sys/un.h>
>  #include <sys/epoll.h>
> +#ifdef HAVE_SYS_SIGNALFD_H
>  #include <sys/signalfd.h>
> +#endif /* HAVE_SYS_SIGNALFD_H */
> +#ifdef HAVE_SYS_TIMERFD_H
>  #include <sys/timerfd.h>
> +#endif /* HAVE_SYS_TIMERFD_H */
>  #include <unistd.h>
>  #include <assert.h>
>  #include "wayland-server.h"
> @@ -190,6 +198,7 @@ wl_event_loop_add_timer(struct wl_event_loop *loop,
>                        wl_event_loop_timer_func_t func,
>                        void *data)
>  {
> +#ifdef HAVE_SYS_TIMERFD_H
>        struct wl_event_source_timer *source;
>        struct epoll_event ep;
>
> @@ -220,11 +229,15 @@ wl_event_loop_add_timer(struct wl_event_loop *loop,
>        }
>
>        return &source->base;
> +#else /* HAVE_SYS_TIMERFD_H */
> +       return NULL;
> +#endif /* HAVE_SYS_TIMERFD_H */
>  }
>
>  WL_EXPORT int
>  wl_event_source_timer_update(struct wl_event_source *source, int ms_delay)
>  {
> +#ifdef HAVE_SYS_TIMERFD_H
>        struct wl_event_source_timer *timer_source =
>                (struct wl_event_source_timer *) source;
>        struct itimerspec its;
> @@ -237,7 +250,7 @@ wl_event_source_timer_update(struct wl_event_source *source, int ms_delay)
>                fprintf(stderr, "could not set timerfd\n: %m");
>                return -1;
>        }
> -
> +#endif /* HAVE_SYS_TIMERFD_H */
>        return 0;
>  }
>
> @@ -253,6 +266,7 @@ static void
>  wl_event_source_signal_dispatch(struct wl_event_source *source,
>                               struct epoll_event *ep)
>  {
> +#ifdef HAVE_SYS_SIGNALFD_H
>        struct wl_event_source_signal *signal_source =
>                (struct wl_event_source_signal *) source;
>        struct signalfd_siginfo signal_info;
> @@ -260,6 +274,7 @@ wl_event_source_signal_dispatch(struct wl_event_source *source,
>        read(signal_source->fd, &signal_info, sizeof signal_info);
>
>        signal_source->func(signal_source->signal_number, signal_source->data);
> +#endif /* HAVE_SYS_SIGNALFD_H */
>  }
>
>  static int
> @@ -287,6 +302,7 @@ wl_event_loop_add_signal(struct wl_event_loop *loop,
>                        wl_event_loop_signal_func_t func,
>                        void *data)
>  {
> +#ifdef HAVE_SYS_SIGNALFD_H
>        struct wl_event_source_signal *source;
>        struct epoll_event ep;
>        sigset_t mask;
> @@ -321,6 +337,9 @@ wl_event_loop_add_signal(struct wl_event_loop *loop,
>        }
>
>        return &source->base;
> +#else /* HAVE_SYS_SIGNALFD_H */
> +       return NULL;
> +#endif /* HAVE_SYS_SIGNALFD_H */
>  }
>
>  struct wl_event_source_idle {
> diff --git a/wayland/scanner.c b/wayland/scanner.c
> index 9d099fb..106d9dd 100644
> --- a/wayland/scanner.c
> +++ b/wayland/scanner.c
> @@ -16,6 +16,10 @@
>  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdio.h>
>  #include <string.h>
>  #include <errno.h>
> diff --git a/wayland/scanner.mk b/wayland/scanner.mk
> index efdb42b..729ffd2 100644
> --- a/wayland/scanner.mk
> +++ b/wayland/scanner.mk
> @@ -1,8 +1,8 @@
> -%-protocol.c : $(top_srcdir)/protocol/%.xml
> -       $(AM_V_GEN)$(top_builddir)/wayland/scanner code < $< > $@
> +$(srcdir)/%-protocol.c: $(top_srcdir)/protocol/%.xml
> +       $(AM_V_GEN)$(wayland_scanner) code < $< > $@
>
> -%-server-protocol.h : $(top_srcdir)/protocol/%.xml
> -       $(AM_V_GEN)$(top_builddir)/wayland/scanner server-header < $< > $@
> +$(srcdir)/%-server-protocol.h: $(top_srcdir)/protocol/%.xml
> +       $(AM_V_GEN)$(wayland_scanner) server-header < $< > $@
>
> -%-client-protocol.h : $(top_srcdir)/protocol/%.xml
> -       $(AM_V_GEN)$(top_builddir)/wayland/scanner client-header < $< > $@
> +$(srcdir)/%-client-protocol.h: $(top_srcdir)/protocol/%.xml
> +       $(AM_V_GEN)$(wayland_scanner) client-header < $< > $@
> diff --git a/wayland/wayland-client.c b/wayland/wayland-client.c
> index 0259017..806f59f 100644
> --- a/wayland/wayland-client.c
> +++ b/wayland/wayland-client.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>  #include <stdint.h>
>  #include <stddef.h>
> diff --git a/wayland/wayland-hash.c b/wayland/wayland-hash.c
> index b299a33..3c35b30 100644
> --- a/wayland/wayland-hash.c
> +++ b/wayland/wayland-hash.c
> @@ -32,6 +32,10 @@
>  *    Keith Packard <keithp at keithp.com>
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>
>  #include "wayland-util.h"
> diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c
> index 57599fa..41bccb3 100644
> --- a/wayland/wayland-server.c
> +++ b/wayland/wayland-server.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>  #include <stdint.h>
>  #include <stddef.h>
> diff --git a/wayland/wayland-util.c b/wayland/wayland-util.c
> index a287cce..fbce075 100644
> --- a/wayland/wayland-util.c
> +++ b/wayland/wayland-util.c
> @@ -20,6 +20,10 @@
>  * OF THIS SOFTWARE.
>  */
>
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
>  #include <stdlib.h>
>  #include <stdint.h>
>  #include <string.h>
> --
> 1.7.3.2
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>


More information about the wayland-devel mailing list