summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-08-16 17:33:42 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-08-16 17:41:59 +0200
commitf8bed01825a72c906c320cd41751db35ff6d5b89 (patch)
tree8b72239261cc914e7890ce23a3e9d4631907602c
parentc9cf219dc57393d6efbfa756834c8c97b7cd4dff (diff)
writerfilter: abort build if model.xml does not validate
Most of the scripts parsing model.xml just load it as a DOM and extract info from it needed for their task, which means if you have a typo in an element / attribute name, it's just silently ignored. This is annoying, let's prevent that by validating the model before doing anything with it. Change-Id: I4229e57c12840fead62cbd150dd1408f2f0d29eb
-rw-r--r--writerfilter/CustomTarget_source.mk13
1 files changed, 11 insertions, 2 deletions
diff --git a/writerfilter/CustomTarget_source.mk b/writerfilter/CustomTarget_source.mk
index 1ac643c3dc7f..6e751c0832cc 100644
--- a/writerfilter/CustomTarget_source.mk
+++ b/writerfilter/CustomTarget_source.mk
@@ -13,6 +13,7 @@ writerfilter_WORK := $(call gb_CustomTarget_get_workdir,writerfilter/source)
writerfilter_SRC := $(SRCDIR)/writerfilter/source
writerfilter_PYTHONCOMMAND := $(call gb_ExternalExecutable_get_command,python)
+writerfilter_XMLLINTCOMMAND := $(call gb_ExternalExecutable_get_command,xmllint)
writerfilter_OOXMLNAMESPACES= \
dml-baseStylesheet \
@@ -51,6 +52,7 @@ writerfilter_ALL = \
$(writerfilter_GEN_ooxml_NamespaceIds_hxx) \
$(writerfilter_GEN_ooxml_QNameToStr_cxx) \
$(writerfilter_GEN_ooxml_ResourceIds_hxx) \
+ $(writerfilter_GEN_ooxml_Model_validated) \
$(writerfilter_GEN_ooxml_Model_processed) \
$(patsubst %,$(writerfilter_WORK)/ooxml/OOXMLFactory_%.hxx,$(writerfilter_OOXMLNAMESPACES)) \
$(patsubst %,$(writerfilter_WORK)/ooxml/OOXMLFactory_%.cxx,$(writerfilter_OOXMLNAMESPACES)) \
@@ -59,6 +61,7 @@ writerfilter_DEP_ooxml_Namespaces_txt=$(call gb_CustomTarget_get_workdir,oox/gen
writerfilter_GEN_ooxml_FactoryValues_hxx=$(writerfilter_WORK)/ooxml/OOXMLFactory_values.hxx
writerfilter_GEN_ooxml_Factory_cxx=$(writerfilter_WORK)/ooxml/OOXMLFactory_generated.cxx
writerfilter_GEN_ooxml_Factory_hxx=$(writerfilter_WORK)/ooxml/OOXMLFactory_generated.hxx
+writerfilter_GEN_ooxml_Model_validated=$(writerfilter_WORK)/ooxml/model.validated
writerfilter_GEN_ooxml_Model_processed=$(writerfilter_WORK)/ooxml/model_preprocessed.xml
writerfilter_GEN_ooxml_NamespaceIds_hxx=$(writerfilter_WORK)/ooxml/OOXMLnamespaceids.hxx
writerfilter_GEN_ooxml_QNameToStr_cxx=$(writerfilter_WORK)/ooxml/qnametostr.cxx
@@ -76,7 +79,13 @@ $(writerfilter_GEN_ooxml_Factory_hxx) : $(writerfilter_SRC)/ooxml/factoryinc.py
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),build,PY ,1)
$(call gb_Helper_abbreviate_dirs, $(writerfilter_PYTHONCOMMAND) $< $(writerfilter_GEN_ooxml_Model_processed)) > $@
-$(writerfilter_GEN_ooxml_Model_processed) : $(writerfilter_SRC_ooxml_Preprocess_py) $(writerfilter_DEP_ooxml_Namespaces_txt) $(writerfilter_SRC_ooxml_Model) | $(writerfilter_WORK)/ooxml/.dir
+$(writerfilter_GEN_ooxml_Model_validated) : $(writerfilter_SRC_ooxml_Model)
+ $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),build,VAL,1)
+ $(call gb_Helper_abbreviate_dirs,\
+ $(writerfilter_XMLLINTCOMMAND) --noout --relaxng $(writerfilter_SRC)/../documentation/ooxml/model.rng $(writerfilter_SRC_ooxml_Model) > $@ 2>&1 \
+ || (cat $@; false))
+
+$(writerfilter_GEN_ooxml_Model_processed) : $(writerfilter_SRC_ooxml_Preprocess_py) $(writerfilter_DEP_ooxml_Namespaces_txt) $(writerfilter_GEN_ooxml_Model_validated)
$(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),build,PY ,1)
$(call gb_Helper_abbreviate_dirs, $(writerfilter_PYTHONCOMMAND) $(writerfilter_SRC_ooxml_Preprocess_py) $(writerfilter_DEP_ooxml_Namespaces_txt) $(writerfilter_SRC_ooxml_Model)) > $@
@@ -103,6 +112,6 @@ $(writerfilter_WORK)/ooxml/OOXMLFactory%.hxx : $(writerfilter_SRC)/ooxml/factory
$(call gb_CustomTarget_get_target,writerfilter/source) : $(writerfilter_ALL)
-$(writerfilter_ALL) :| $(call gb_ExternalExecutable_get_dependencies,python) $(writerfilter_WORK)/ooxml/.dir
+$(writerfilter_ALL) :| $(call gb_ExternalExecutable_get_dependencies,python) $(call gb_ExternalExecutable_get_dependencies,xmllint) $(writerfilter_WORK)/ooxml/.dir
# vim: set noet sw=4 ts=4: