[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

wayland: Changes to 'debian-unstable'



 configure.ac             |    2 
 debian/changelog         |    6 ++
 doc/doxygen/Makefile.am  |    2 
 doc/publican/Makefile.am |   25 ++++------
 src/wayland-client.c     |   63 +++++++++++++++++---------
 src/wayland-shm.c        |    2 
 tests/display-test.c     |  113 ++++++++++++++++++++++++++++++++++-------------
 7 files changed, 145 insertions(+), 68 deletions(-)

New commits:
commit 3a242a8476cc49d9c8ec6b2057d3b6b8fe05a04c
Author: Héctor Orón Martínez <zumbi@debian.org>
Date:   Fri Sep 12 18:23:06 2014 +0200

    d/changelog: update
    
    Signed-off-by: Héctor Orón Martínez <zumbi@debian.org>

diff --git a/debian/changelog b/debian/changelog
index 6c5990f..2a17185 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+wayland (1.5.93-1) UNRELEASED; urgency=medium
+
+  * New upstream development release.
+
+ -- Hector Oron <zumbi@debian.org>  Fri, 12 Sep 2014 16:17:43 +0200
+
 wayland (1.5.91-1) experimental; urgency=medium
 
   [ Andreas Henriksson ]

commit edf4e7abea4046f003f53c300acf9af7dffc2e48
Author: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Date:   Fri Sep 12 12:26:50 2014 +0300

    configure.ac: bump version to 1.5.93 for rc2
    
    Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/configure.ac b/configure.ac
index 5deed2b..c556d4f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ([2.64])
 
 m4_define([wayland_major_version], [1])
 m4_define([wayland_minor_version], [5])
-m4_define([wayland_micro_version], [92])
+m4_define([wayland_micro_version], [93])
 m4_define([wayland_version],
           [wayland_major_version.wayland_minor_version.wayland_micro_version])
 

commit 4d7dfa0867d7661c86b717998ea96a0f2987cee2
Author: Derek Foreman <derekf@osg.samsung.com>
Date:   Wed Sep 10 13:46:09 2014 -0500

    shm: fix error in comment

diff --git a/src/wayland-shm.c b/src/wayland-shm.c
index 3fce678..04ba4f2 100644
--- a/src/wayland-shm.c
+++ b/src/wayland-shm.c
@@ -372,7 +372,7 @@ wl_shm_buffer_get_stride(struct wl_shm_buffer *buffer)
  * Returns a pointer which can be used to read the data contained in
  * the given SHM buffer.
  *
- * As this buffer is memory-mapped, reading it from may generate
+ * As this buffer is memory-mapped, reading from it may generate
  * SIGBUS signals. This can happen if the client claims that the
  * buffer is larger than it is or if something truncates the
  * underlying file. To prevent this signal from causing the compositor

commit 083d8da432b2052db78f0a19405275c2b4391b5a
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Wed Sep 10 12:47:14 2014 +0200

    client: cancel read in wl_display_read_events() when last_error is set
    
    Calling wl_display_read_events() after an error should be equivalent
    to wl_display_cancel_read(), so that display state is consistent.
    
    Thanks to Pekka Paalanen <pekka.paalanen@collabora.co.uk>
    for pointing that out.
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 1b7a046..b0f77b9 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -1192,6 +1192,14 @@ read_events(struct wl_display *display)
 	return 0;
 }
 
+static void
+cancel_read(struct wl_display *display)
+{
+	display->reader_count--;
+	if (display->reader_count == 0)
+		display_wakeup_threads(display);
+}
+
 /** Read events from display file descriptor
  *
  * \param display The display context object
@@ -1219,6 +1227,7 @@ wl_display_read_events(struct wl_display *display)
 	pthread_mutex_lock(&display->mutex);
 
 	if (display->last_error) {
+		cancel_read(display);
 		pthread_mutex_unlock(&display->mutex);
 
 		errno = display->last_error;
@@ -1365,9 +1374,7 @@ wl_display_cancel_read(struct wl_display *display)
 {
 	pthread_mutex_lock(&display->mutex);
 
-	display->reader_count--;
-	if (display->reader_count == 0)
-		display_wakeup_threads(display);
+	cancel_read(display);
 
 	pthread_mutex_unlock(&display->mutex);
 }

commit a31a7360093dd5f4ce1a34b9889560fc37dbb7a9
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Wed Sep 10 12:47:13 2014 +0200

    client: wake-up threads on all return paths from read_events
    
    If wl_connection_read returned EAGAIN, we must wake up sleeping
    threads. If we don't do this and the thread calling
    wl_connection_read won't call wl_display_read_events again,
    the sleeping threads will sleep indefinitely.
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 9f817f6..1b7a046 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -1152,8 +1152,13 @@ read_events(struct wl_display *display)
 	if (display->reader_count == 0) {
 		total = wl_connection_read(display->connection);
 		if (total == -1) {
-			if (errno == EAGAIN)
+			if (errno == EAGAIN) {
+				/* we must wake up threads whenever
+				 * the reader_count dropped to 0 */
+				display_wakeup_threads(display);
+
 				return 0;
+			}
 
 			display_fatal_error(display, errno);
 			return -1;

commit 65d02b7a83329ab5a65a0effde854baf8d5d2040
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Wed Sep 10 12:47:12 2014 +0200

    display-test: test if threads are woken up on EAGAIN
    
    When wl_connection_read() in wl_display_read_events() returns with EAGAIN,
    we want the sleeping threads to be woken up. Test it!
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/tests/display-test.c b/tests/display-test.c
index 451cabd..a1e45b1 100644
--- a/tests/display-test.c
+++ b/tests/display-test.c
@@ -495,6 +495,45 @@ TEST(threading_cancel_read_tst)
 	display_destroy(d);
 }
 
+static void
+threading_read_eagain(void)
+{
+	struct client *c = client_connect();
+	pthread_t th1, th2, th3;
+
+	register_reading(c->wl_display);
+
+	th1 = create_thread(c, thread_prepare_and_read);
+	th2 = create_thread(c, thread_prepare_and_read);
+	th3 = create_thread(c, thread_prepare_and_read);
+
+	/* All the threads are sleeping, waiting until read or cancel
+	 * is called. Since we have no data on socket waiting,
+	 * the wl_connection_read should end up with error and set errno
+	 * to EAGAIN. Check if the threads are woken up in this case. */
+	assert(wl_display_read_events(c->wl_display) == 0);
+	/* errno should be still set to EAGAIN if wl_connection_read
+	 * set it - check if we're testing the right case */
+	assert(errno == EAGAIN);
+
+	alarm(3);
+	pthread_join(th1, NULL);
+	pthread_join(th2, NULL);
+	pthread_join(th3, NULL);
+
+	client_disconnect(c);
+}
+
+TEST(threading_read_eagain_tst)
+{
+	struct display *d = display_create();
+	client_create(d, threading_read_eagain);
+
+	display_run(d);
+
+	display_destroy(d);
+}
+
 static void *
 thread_prepare_and_read2(void *data)
 {

commit d8377411663ff4c17d8752e1be1cf94d00f4dc54
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Tue Sep 9 11:11:52 2014 +0200

    tests: use nanosleep instead of usleep
    
    man usleep says that bahaviour of using usleep with SIGALRM signal
    is unspecified. So create our own usleep that calls nanosleep instead.
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/tests/display-test.c b/tests/display-test.c
index 1289866..451cabd 100644
--- a/tests/display-test.c
+++ b/tests/display-test.c
@@ -333,6 +333,21 @@ register_reading(struct wl_display *display)
 	assert(wl_display_flush(display) >= 0);
 }
 
+#define USEC_TO_NSEC(n) (1000 * (n))
+
+/* since we are using alarm() and SIGABRT, we can not
+ * use usleep function (see 'man usleep') */
+static void
+test_usleep(useconds_t usec)
+{
+	struct timespec ts = {
+		.tv_sec = 0,
+		.tv_nsec = USEC_TO_NSEC(usec)
+	};
+
+	assert(nanosleep(&ts, NULL) == 0);
+}
+
 /* create thread that will call prepare+read so that
  * it will block */
 static pthread_t
@@ -349,8 +364,8 @@ create_thread(struct client *c, void *(*func)(void*))
 	 * so call usleep once again after the loop ends - it should
 	 * be sufficient... */
 	while (c->display_stopped == 0)
-		usleep(500);
-	usleep(10000);
+		test_usleep(500);
+	test_usleep(10000);
 
 	return thread;
 }
@@ -517,8 +532,8 @@ threading_read_after_error(void)
 
 	/* make sure thread is sleeping */
 	while (c->display_stopped == 0)
-		usleep(500);
-	usleep(10000);
+		test_usleep(500);
+	test_usleep(10000);
 
 	assert(wl_display_read_events(c->wl_display) == -1);
 

commit 44bf13ba0f3b881c0c5055a7225591395bc80583
Author: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Date:   Fri Sep 5 14:57:03 2014 +0300

    configure.ac: bump version to 1.5.92 for rc1
    
    Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/configure.ac b/configure.ac
index d8e42d9..5deed2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ AC_PREREQ([2.64])
 
 m4_define([wayland_major_version], [1])
 m4_define([wayland_minor_version], [5])
-m4_define([wayland_micro_version], [91])
+m4_define([wayland_micro_version], [92])
 m4_define([wayland_version],
           [wayland_major_version.wayland_minor_version.wayland_micro_version])
 

commit 7af5920031df9981a23bf92cef3445813fa73a2e
Author: Bryce W. Harrington <b.harrington@samsung.com>
Date:   Mon Jul 21 19:23:49 2014 +0000

    doc: Quell warnings about missing man3 directory before its been built
    
    The shell command for dist_man3_MANS gets invoked several times during
    the make process but before the man pages have been generated, which
    causes the following warnings when running `make`:
    
        find: `man/man3': No such file or directory
        find: `man/man3': No such file or directory
        find: `man/man3': No such file or directory
          GEN    xml/client/index.xml
    
    Despite these error messages, the generated dist tarball contains the
    man3 pages as intended, both before and after this patch.
    
        $ make dist
        $ tar xxf wayland-1.5.90.tar.xz
        $ find wayland-1.5.90/doc/doxygen/man/man3 -name "wl_*.3" | wc -l
        85
    
    Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
    Acked-by: Peter Hutterer <peter.hutterer@who-t.net>
    Tested-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/doc/doxygen/Makefile.am b/doc/doxygen/Makefile.am
index de3b31f..83622af 100644
--- a/doc/doxygen/Makefile.am
+++ b/doc/doxygen/Makefile.am
@@ -20,7 +20,7 @@ scanned_src_files_server = 				\
 # find all man/man3/wl_foo.3 pages
 # for this to work, we need to create them before the man target (hence
 # all-local below)
-dist_man3_MANS= $(shell find man/man3/ -name "wl_*.3" -printf "man/man3/%P\n")
+dist_man3_MANS = $(shell test -d man && find man/man3 -name "wl_*.3" -printf "man/man3/%P\n")
 
 xml/client/index.xml: $(scanned_src_files_client) wayland.doxygen
 	$(AM_V_GEN)$(MKDIR_P) xml/client && \

commit aa49a79d7a1cf2b0c94f2b172b770dac05bd1c35
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Fri Aug 29 11:21:29 2014 +0200

    display-test: make use of create_thread function
    
    This function is used in one test only, but its functionality can be
    used in another tests to (create thread and wait until it is sleeping).
    We just need to pass the starting function for the thread as an argument.
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/tests/display-test.c b/tests/display-test.c
index c420cbe..1289866 100644
--- a/tests/display-test.c
+++ b/tests/display-test.c
@@ -333,6 +333,28 @@ register_reading(struct wl_display *display)
 	assert(wl_display_flush(display) >= 0);
 }
 
+/* create thread that will call prepare+read so that
+ * it will block */
+static pthread_t
+create_thread(struct client *c, void *(*func)(void*))
+{
+	pthread_t thread;
+
+	c->display_stopped = 0;
+	/* func must set display->stopped to 1 before sleeping */
+	assert(pthread_create(&thread, NULL, func, c) == 0);
+
+	/* make sure the thread is sleeping. It's a little bit racy
+	 * (setting display_stopped to 1 and calling wl_display_read_events)
+	 * so call usleep once again after the loop ends - it should
+	 * be sufficient... */
+	while (c->display_stopped == 0)
+		usleep(500);
+	usleep(10000);
+
+	return thread;
+}
+
 static void *
 thread_read_error(void *data)
 {
@@ -369,16 +391,7 @@ threading_post_err(void)
 	c->display_stopped = 0;
 
 	/* create new thread that will register its intention too */
-	assert(pthread_create(&thread, NULL, thread_read_error, c) == 0);
-
-	/* make sure thread is sleeping. It's a little bit racy
-	 * (setting display_stopped to 1 and calling wl_display_read_events)
-	 * so call usleep once again after the loop ends - it should
-	 * be sufficient... */
-	while (c->display_stopped == 0)
-		usleep(500);
-
-	usleep(10000);
+	thread = create_thread(c, thread_read_error);
 
 	/* so now we have sleeping thread waiting for a pthread_cond signal.
 	 * The main thread must call wl_display_read_events().
@@ -429,22 +442,6 @@ thread_prepare_and_read(void *data)
 	pthread_exit(NULL);
 }
 
-static pthread_t
-create_thread(struct client *c)
-{
-	pthread_t thread;
-
-	c->display_stopped = 0;
-	assert(pthread_create(&thread, NULL, thread_prepare_and_read, c) == 0);
-
-	/* make sure thread is sleeping */
-	while (c->display_stopped == 0)
-		usleep(500);
-	usleep(10000);
-
-	return thread;
-}
-
 /* test cancel read*/
 static void
 threading_cancel_read(void)
@@ -454,9 +451,9 @@ threading_cancel_read(void)
 
 	register_reading(c->wl_display);
 
-	th1 = create_thread(c);
-	th2 = create_thread(c);
-	th3 = create_thread(c);
+	th1 = create_thread(c, thread_prepare_and_read);
+	th2 = create_thread(c, thread_prepare_and_read);
+	th3 = create_thread(c, thread_prepare_and_read);
 
 	/* all the threads are sleeping, waiting until read or cancel
 	 * is called. Cancel the read and let the threads proceed */

commit 1e0f9698d44fb7a72c27ac41b8e360d47734dcd2
Author: Marek Chalupa <mchqwerty@gmail.com>
Date:   Fri Aug 29 11:21:28 2014 +0200

    client: add display_wakeup_threads function
    
    This helper function wraps the always-repeated pattern:
    
      display->read_serial++;
      pthread_cond_broadcast(&display->reader_cond);
    
    [Pekka Paalanen: minor whitespace and comment fixes.]
    
    Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
    signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 88ee2dd..9f817f6 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -110,6 +110,26 @@ struct wl_display {
 static int debug_client = 0;
 
 /**
+ * This helper function wakes up all threads that are
+ * waiting for display->reader_cond (i. e. when reading is done,
+ * canceled, or an error occured)
+ *
+ * NOTE: must be called with display->mutex locked
+ */
+static void
+display_wakeup_threads(struct wl_display *display)
+{
+	/* Thread can get sleeping only in read_events(). If we're
+	 * waking it up, it means that the read completed or was
+	 * canceled, so we must increase the read_serial.
+	 * This prevents from indefinite sleeping in read_events().
+	 */
+	++display->read_serial;
+
+	pthread_cond_broadcast(&display->reader_cond);
+}
+
+/**
  * This function is called for local errors (no memory, server hung up)
  *
  * \param display
@@ -128,11 +148,7 @@ display_fatal_error(struct wl_display *display, int error)
 
 	display->last_error = error;
 
-       pthread_cond_broadcast(&display->reader_cond);
-       /* prevent from indefinite looping in read_events()
-	* (when calling pthread_cond_wait under condition
-	* display->read_serial == serial) */
-       ++display->read_serial;
+	display_wakeup_threads(display);
 }
 
 /**
@@ -182,7 +198,7 @@ display_protocol_error(struct wl_display *display, uint32_t code,
 	display->protocol_error.interface = intf;
 
 	/*
-	 * here it is not necessary to broadcast reader's cond like in
+	 * here it is not necessary to wake up threads like in
 	 * display_fatal_error, because this function is called from
 	 * an event handler and that means that read_events() is done
 	 * and woke up all threads. Since wl_display_prepare_read()
@@ -1160,8 +1176,7 @@ read_events(struct wl_display *display)
 			}
 		}
 
-		display->read_serial++;
-		pthread_cond_broadcast(&display->reader_cond);
+		display_wakeup_threads(display);
 	} else {
 		serial = display->read_serial;
 		while (display->read_serial == serial)
@@ -1346,10 +1361,8 @@ wl_display_cancel_read(struct wl_display *display)
 	pthread_mutex_lock(&display->mutex);
 
 	display->reader_count--;
-	if (display->reader_count == 0) {
-		display->read_serial++;
-		pthread_cond_broadcast(&display->reader_cond);
-	}
+	if (display->reader_count == 0)
+		display_wakeup_threads(display);
 
 	pthread_mutex_unlock(&display->mutex);
 }

commit 5c7d30b691d9bcc891b9a7e2c7e677d1a498b523
Author: Nils Chr. Brause <nilschrbrause@gmail.com>
Date:   Sat Aug 30 17:12:26 2014 +0200

    wayland-client: Initialize newly created wl_proxys to zero
    
    Up until now, newly created wl_proxys (with proxy_create or
    wl_proxy_create_for_id) are not initialized properly after memory
    allocation. The wl_display object in contrast is. To prevent giving
    uninitialized data to the user (e.g. user_data) an appropriate memset
    has been added. Also, after a memset members don't have to be
    explicitly initialized with zero anymore.
    
    Signed-off-by: Nils Chr. Brause <nilschrbrause@googlemail.com>
    Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

diff --git a/src/wayland-client.c b/src/wayland-client.c
index 9159ee0..88ee2dd 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -270,12 +270,11 @@ proxy_create(struct wl_proxy *factory, const struct wl_interface *interface)
 	if (proxy == NULL)
 		return NULL;
 
+	memset(proxy, 0, sizeof *proxy);
+
 	proxy->object.interface = interface;
-	proxy->object.implementation = NULL;
-	proxy->dispatcher = NULL;
 	proxy->display = display;
 	proxy->queue = factory->queue;
-	proxy->flags = 0;
 	proxy->refcount = 1;
 
 	proxy->object.id = wl_map_insert_new(&display->objects, 0, proxy);
@@ -327,13 +326,12 @@ wl_proxy_create_for_id(struct wl_proxy *factory,
 	if (proxy == NULL)
 		return NULL;
 
+	memset(proxy, 0, sizeof *proxy);
+
 	proxy->object.interface = interface;
-	proxy->object.implementation = NULL;
 	proxy->object.id = id;
-	proxy->dispatcher = NULL;
 	proxy->display = display;
 	proxy->queue = factory->queue;
-	proxy->flags = 0;
 	proxy->refcount = 1;
 
 	wl_map_insert_at(&display->objects, 0, id, proxy);

commit fb97550ce6ff56e57d12f95173b2608cbc546b36
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Sep 2 09:50:14 2014 +1000

    doc/publican: stop excessive rebuilds
    
    Traced down to the server/client target always rebuilding, causing a rebuild
    of everything else. Rework this so the target name is a file we actually
    produce and can check for a timestamp.
    
    Note: this also changes the generated file from the doxygen directory into the
    en-US publican path and renames it to (server|client)API.xml.tmp to avoid
    copying it into the xml output directory.

diff --git a/doc/publican/Makefile.am b/doc/publican/Makefile.am
index a20b1d3..47fc66d 100644
--- a/doc/publican/Makefile.am
+++ b/doc/publican/Makefile.am
@@ -55,31 +55,28 @@ en-US/ProtocolInterfaces.xml: $(top_srcdir)/protocol/wayland.xml $(srcdir)/proto
 	$(AM_V_GEN)$(XSLTPROC) $(srcdir)/protocol-interfaces-to-docbook.xsl \
 		$(top_srcdir)/protocol/wayland.xml > en-US/ProtocolInterfaces.xml
 
-combine_xml: server client
-
 # * we don't want wayland-{server|client}_8h.xml to avoid duplicating output methods,
 #   move it out of the way first.
 # * use doxygen's combine.xslt to merge the xml files into one single file
 # * move wayland-<foo>_8h.xml back to its original location
-server client:
-	$(AM_V_GEN)mv $(top_builddir)/doc/doxygen/xml/$@/wayland-$@_8h.xml \
+en-US/%API.xml.tmp:
+	$(AM_V_GEN)mv $(top_builddir)/doc/doxygen/xml/$*/wayland-$*_8h.xml \
 		$(top_builddir)/doc/doxygen/xml/
-	$(AM_V_GEN)$(XSLTPROC) $(top_builddir)/doc/doxygen/xml/$@/combine.xslt \
-		$(top_builddir)/doc/doxygen/xml/$@/index.xml > \
-		$(top_builddir)/doc/doxygen/xml/$@/$@API.xml
-	$(AM_V_GEN)mv $(top_builddir)/doc/doxygen/xml/wayland-$@_8h.xml \
-		$(top_builddir)/doc/doxygen/xml/$@
+	$(AM_V_GEN)$(XSLTPROC) $(top_builddir)/doc/doxygen/xml/$*/combine.xslt \
+		$(top_builddir)/doc/doxygen/xml/$*/index.xml > $@
+	$(AM_V_GEN)mv $(top_builddir)/doc/doxygen/xml/wayland-$*_8h.xml \
+		$(top_builddir)/doc/doxygen/xml/$*
 
 # WaylandClientAPI.xml:
-# merge doxygen xml files into one single file (see combine_xml), then transform the combined XML file into docbook format
-en-US/WaylandClientAPI.xml: combine_xml $(top_builddir)/doc/doxygen/xml/client/index.xml $(srcdir)/doxygen-to-publican.xsl
+# merge doxygen xml files into one single file, then transform the combined XML file into docbook format
+en-US/WaylandClientAPI.xml: en-US/clientAPI.xml.tmp $(top_builddir)/doc/doxygen/xml/client/index.xml $(srcdir)/doxygen-to-publican.xsl
 	$(AM_V_GEN)$(XSLTPROC)  --stringparam which Client $(srcdir)/doxygen-to-publican.xsl \
-		$(top_builddir)/doc/doxygen/xml/client/clientAPI.xml > en-US/WaylandClientAPI.xml
+		$(builddir)/en-US/clientAPI.xml.tmp > en-US/WaylandClientAPI.xml
 
 # WaylandServerAPI.xml: see WaylandClientAPI.xml
-en-US/WaylandServerAPI.xml: combine_xml $(top_builddir)/doc/doxygen/xml/client/index.xml $(srcdir)/doxygen-to-publican.xsl
+en-US/WaylandServerAPI.xml: en-US/serverAPI.xml.tmp $(top_builddir)/doc/doxygen/xml/client/index.xml $(srcdir)/doxygen-to-publican.xsl
 	$(AM_V_GEN)$(XSLTPROC) --stringparam which Server $(srcdir)/doxygen-to-publican.xsl \
-		$(top_builddir)/doc/doxygen/xml/server/serverAPI.xml > en-US/WaylandServerAPI.xml
+		$(builddir)/en-US/serverAPI.xml.tmp > en-US/WaylandServerAPI.xml
 
 # Copy the sources source files into en-US destination
 # This is required for out-of-source-tree build as publican does not allow us


Reply to: