protocol: hook up xmllint to check validity
diff --git a/configure.ac b/configure.ac
index 80a5d69..ac3878b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -474,6 +474,17 @@
 	AC_MSG_ERROR([wayland-scanner is needed to compile weston])
 fi
 
+PKG_CHECK_MODULES(WAYLAND_SCANNER, wayland-scanner)
+AC_PATH_PROG(XMLLINT, xmllint)
+AC_ARG_WITH([dtddir],
+	    AS_HELP_STRING([--with-dtddir],
+			   [Directory containing the Wayland
+			    protocol DTD @<:@default=from pkgconfig@:>@]),
+	    [dtddir="$withval"],
+	    [dtddir=$($PKG_CONFIG --variable=pkgdatadir wayland-scanner)])
+AC_SUBST([dtddir])
+AM_CONDITIONAL([HAVE_XMLLINT], [test "x$XMLLINT" != "x" -a "x$dtddir" != "x"])
+
 AC_CONFIG_FILES([Makefile
 		 shared/Makefile
 		 src/Makefile
diff --git a/protocol/Makefile.am b/protocol/Makefile.am
index 924e48f..d09d8eb 100644
--- a/protocol/Makefile.am
+++ b/protocol/Makefile.am
@@ -1,4 +1,4 @@
-EXTRA_DIST =					\
+protocol_sources =				\
 	desktop-shell.xml			\
 	screenshooter.xml			\
 	tablet-shell.xml			\
@@ -9,3 +9,18 @@
 	subsurface.xml				\
 	text-cursor-position.xml		\
 	wayland-test.xml
+
+if HAVE_XMLLINT
+.PHONY: validate
+
+.%.xml.valid: %.xml
+	$(AM_V_GEN)$(XMLLINT) --noout --dtdvalid $(dtddir)/wayland.dtd $^ > $@
+
+validate: $(protocol_sources:%.xml=.%.xml.valid)
+
+all-local: validate
+
+CLEANFILES= $(protocol_sources:%.xml=.%.xml.valid)
+EXTRA_DIST=$(protocol_sources)
+
+endif