diff --git a/m4/gtkdoc_jh_check_xml_catalog.m4 b/m4/gtkdoc_jh_check_xml_catalog.m4
index 618c1c9..1842a0d 100644
--- a/m4/gtkdoc_jh_check_xml_catalog.m4
+++ b/m4/gtkdoc_jh_check_xml_catalog.m4
@@ -10,7 +10,21 @@ AC_DEFUN([JH_CHECK_XML_CATALOG],
 		AC_MSG_RESULT([found])
 		ifelse([$3],,,[$3])
 	else
-		AC_MSG_RESULT([not found])
-		ifelse([$4],,[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],[$4])
+		jh_check_xml_catalog_saved_ifs="$IFS"
+		IFS=' '
+		for f in $XML_CATALOG_FILES; do
+			if [[ -f "$f" ]] && \
+				AC_RUN_LOG([$XMLCATALOG --noout "$f" "$1" >&2]); then
+				jh_found_xmlcatalog=true
+				AC_MSG_RESULT([found])
+				ifelse([$3],,,[$3])
+				break
+			fi
+		done
+		IFS="$jh_check_xml_catalog_saved_ifs"
+		if ! $jh_found_xmlcatalog; then
+			AC_MSG_RESULT([not found])
+			ifelse([$4],,[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],[$4])
+		fi
 	fi
 ])
