# Copyright © 2016 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.

BUILT_SOURCES += \
	$(GENXML_GENERATED_FILES)

EXTRA_DIST += \
	$(GENXML_XML_FILES) \
	$(GENXML_GENERATED_FILES)

SUFFIXES = _pack.h _xml.h .xml

$(GENXML_GENERATED_PACK_FILES): genxml/gen_pack_header.py

.xml_pack.h:
	$(MKDIR_GEN)
	$(PYTHON_GEN) $(srcdir)/genxml/gen_pack_header.py $< > $@ || ($(RM) $@; false)

genxml/genX_xml.h: genxml/gen_zipped_file.py $(GENXML_XML_FILES)
	$(MKDIR_GEN)
	$(PYTHON_GEN) $(srcdir)/genxml/gen_zipped_file.py $(GENXML_XML_FILES:%=$(srcdir)/%) > $@ || ($(RM) $@; false)

genxml/genX_bits.h: genxml/gen_bits_header.py $(GENXML_XML_FILES)
	$(MKDIR_GEN)
	$(PYTHON_GEN) $(srcdir)/genxml/gen_bits_header.py -o $@ $(GENXML_XML_FILES:%=$(srcdir)/%)

EXTRA_DIST += \
	genxml/genX_pack.h \
	genxml/gen_macros.h \
	genxml/gen_pack_header.py \
	genxml/gen_zipped_file.py \
	genxml/gen_bits_header.py \
	genxml/README
