+/*
+ * Both of these workarounds can be removed when support for ancient
+ * libxml versions is dropped. versions 1.8.11 and 2.3.4 provide the
+ * correct fixes.
+ */
+
+/*
+ * Older libxml polluted the global headerspace, while libxml2 fixed
+ * this. To support both old and recent libxmls, we have this
+ * workaround.
+ */
+#ifdef HAVE_OLD_XML_HEADERS
+# include <parser.h>
+#else /* ! HAVE_OLD_XML_HEADERS */
+# include <libxml/parser.h>
+#endif /* HAVE_OLD_XML_HEADERS */
+
+/*
+ * handle non-native spelling mistakes in earlier versions and provide
+ * the source-compat fix for this that may not be in older versions.
+ */
+#ifndef xmlChildrenNode
+# if LIBXML_VERSION >= 20000
+# define xmlChildrenNode children
+# define xmlRootNode children
+# else
+# define xmlChildrenNode childs
+# define xmlRootNode root
+# endif /* LIBXML_VERSION */
+#endif /* xmlChildrenNode */