10a48773fSEric van Gyzen# 20a48773fSEric van Gyzen# __ __ _ 30a48773fSEric van Gyzen# ___\ \/ /_ __ __ _| |_ 40a48773fSEric van Gyzen# / _ \\ /| '_ \ / _` | __| 50a48773fSEric van Gyzen# | __// \| |_) | (_| | |_ 60a48773fSEric van Gyzen# \___/_/\_\ .__/ \__,_|\__| 70a48773fSEric van Gyzen# |_| XML parser 80a48773fSEric van Gyzen# 9*fe927888SPhilip Paeps# Copyright (c) 2017-2025 Sebastian Pipping <sebastian@pipping.org> 10cc68614dSXin LI# Copyright (c) 2018 KangLin <kl222@126.com> 117ed8e142SXin LI# Copyright (c) 2022 Johnny Jazeix <jazeix@gmail.com> 124543ef51SXin LI# Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com> 13ffd294a1SEnji Cooper# Copyright (c) 2024 Alexander Bluhm <alexander.bluhm@gmx.net> 14ffd294a1SEnji Cooper# Copyright (c) 2024 Dag-Erling Smørgrav <des@des.dev> 150a48773fSEric van Gyzen# Licensed under the MIT license: 160a48773fSEric van Gyzen# 170a48773fSEric van Gyzen# Permission is hereby granted, free of charge, to any person obtaining 180a48773fSEric van Gyzen# a copy of this software and associated documentation files (the 190a48773fSEric van Gyzen# "Software"), to deal in the Software without restriction, including 200a48773fSEric van Gyzen# without limitation the rights to use, copy, modify, merge, publish, 210a48773fSEric van Gyzen# distribute, sublicense, and/or sell copies of the Software, and to permit 220a48773fSEric van Gyzen# persons to whom the Software is furnished to do so, subject to the 230a48773fSEric van Gyzen# following conditions: 240a48773fSEric van Gyzen# 250a48773fSEric van Gyzen# The above copyright notice and this permission notice shall be included 260a48773fSEric van Gyzen# in all copies or substantial portions of the Software. 270a48773fSEric van Gyzen# 280a48773fSEric van Gyzen# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 290a48773fSEric van Gyzen# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 300a48773fSEric van Gyzen# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 310a48773fSEric van Gyzen# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 320a48773fSEric van Gyzen# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 330a48773fSEric van Gyzen# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 340a48773fSEric van Gyzen# USE OR OTHER DEALINGS IN THE SOFTWARE. 350a48773fSEric van Gyzen 360a48773fSEric van GyzenAUTOMAKE_OPTIONS = \ 370a48773fSEric van Gyzen dist-bzip2 \ 386b2c1e49SXin LI dist-lzip \ 396b2c1e49SXin LI dist-xz \ 400a48773fSEric van Gyzen foreign \ 410a48773fSEric van Gyzen subdir-objects 420a48773fSEric van Gyzen 430a48773fSEric van GyzenACLOCAL_AMFLAGS = -I m4 440a48773fSEric van GyzenLIBTOOLFLAGS = --verbose 450a48773fSEric van Gyzen 466b2c1e49SXin LISUBDIRS = lib # lib goes first to build first 476b2c1e49SXin LIif WITH_EXAMPLES 486b2c1e49SXin LISUBDIRS += examples 496b2c1e49SXin LIendif 506b2c1e49SXin LIif WITH_TESTS 516b2c1e49SXin LISUBDIRS += tests 526b2c1e49SXin LIendif 530a48773fSEric van Gyzenif WITH_XMLWF 540a48773fSEric van GyzenSUBDIRS += xmlwf doc 550a48773fSEric van Gyzenendif 560a48773fSEric van Gyzen 570a48773fSEric van Gyzenpkgconfig_DATA = expat.pc 580a48773fSEric van Gyzenpkgconfigdir = $(libdir)/pkgconfig 590a48773fSEric van Gyzen 600a48773fSEric van Gyzen 61cc68614dSXin LIdist_cmake_DATA = \ 62cc68614dSXin LI cmake/autotools/expat.cmake 63cc68614dSXin LI 64cc68614dSXin LInodist_cmake_DATA = \ 65cc68614dSXin LI cmake/autotools/expat-config-version.cmake \ 66cc68614dSXin LI cmake/autotools/expat-noconfig.cmake \ 67cc68614dSXin LI cmake/expat-config.cmake 68cc68614dSXin LI 69cc68614dSXin LIcmakedir = $(libdir)/cmake/expat-@PACKAGE_VERSION@ 70cc68614dSXin LI 71cc68614dSXin LI 720a48773fSEric van Gyzen_EXTRA_DIST_CMAKE = \ 73cc68614dSXin LI cmake/autotools/expat-noconfig__linux.cmake.in \ 74cc68614dSXin LI cmake/autotools/expat-noconfig__macos.cmake.in \ 75cc68614dSXin LI cmake/autotools/expat-noconfig__windows.cmake.in \ 76cc68614dSXin LI cmake/autotools/expat-package-init.cmake \ 776b2c1e49SXin LI cmake/mingw-toolchain.cmake \ 786b2c1e49SXin LI \ 790a48773fSEric van Gyzen CMakeLists.txt \ 800a48773fSEric van Gyzen CMake.README \ 810a48773fSEric van Gyzen ConfigureChecks.cmake \ 82cc68614dSXin LI expat.pc.cmake \ 830a48773fSEric van Gyzen expat_config.h.cmake 840a48773fSEric van Gyzen 850a48773fSEric van Gyzen_EXTRA_DIST_WINDOWS = \ 866b2c1e49SXin LI win32/build_expat_iss.bat \ 870a48773fSEric van Gyzen win32/expat.iss \ 880a48773fSEric van Gyzen win32/MANIFEST.txt \ 897ed8e142SXin LI win32/README.txt \ 904543ef51SXin LI win32/version.rc.cmake 910a48773fSEric van Gyzen 920a48773fSEric van GyzenEXTRA_DIST = \ 930a48773fSEric van Gyzen $(_EXTRA_DIST_CMAKE) \ 940a48773fSEric van Gyzen $(_EXTRA_DIST_WINDOWS) \ 950a48773fSEric van Gyzen \ 960a48773fSEric van Gyzen conftools/expat.m4 \ 970a48773fSEric van Gyzen conftools/get-version.sh \ 98cc68614dSXin LI \ 99*fe927888SPhilip Paeps fuzz/xml_lpm_fuzzer.cpp \ 100*fe927888SPhilip Paeps fuzz/xml_lpm_fuzzer.proto \ 101cc68614dSXin LI fuzz/xml_parsebuffer_fuzzer.c \ 102cc68614dSXin LI fuzz/xml_parse_fuzzer.c \ 1030a48773fSEric van Gyzen \ 1046b2c1e49SXin LI xmlwf/xmlwf_helpgen.py \ 1056b2c1e49SXin LI xmlwf/xmlwf_helpgen.sh \ 1066b2c1e49SXin LI \ 107cc68614dSXin LI buildconf.sh \ 1080a48773fSEric van Gyzen Changes \ 1090a48773fSEric van Gyzen README.md \ 1106b2c1e49SXin LI \ 1116b2c1e49SXin LI fix-xmltest-log.sh \ 1120a48773fSEric van Gyzen test-driver-wrapper.sh 1130a48773fSEric van Gyzen 1140a48773fSEric van Gyzen 1150a48773fSEric van Gyzen.PHONY: buildlib 1160a48773fSEric van Gyzenbuildlib: 1170a48773fSEric van Gyzen @echo 'ERROR: Running "make buildlib LIBRARY=libexpatw.la"' >&2 1180a48773fSEric van Gyzen @echo 'ERROR: is no longer supported. INSTEAD please:' >&2 1190a48773fSEric van Gyzen @echo 'ERROR:' >&2 1200a48773fSEric van Gyzen @echo 'ERROR: * Mass-patch Makefile.am, e.g.' >&2 121ffd294a1SEnji Cooper @echo 'ERROR: # find . -name Makefile.am -exec sed \' >&2 1220a48773fSEric van Gyzen @echo 'ERROR: -e "s,libexpat\.la,libexpatw.la," \' >&2 1230a48773fSEric van Gyzen @echo 'ERROR: -e "s,libexpat_la,libexpatw_la," \' >&2 124ffd294a1SEnji Cooper @echo 'ERROR: -i.bak {} +' >&2 1250a48773fSEric van Gyzen @echo 'ERROR:' >&2 1260a48773fSEric van Gyzen @echo 'ERROR: * Run automake to re-generate Makefile.in files' >&2 1270a48773fSEric van Gyzen @echo 'ERROR:' >&2 1280a48773fSEric van Gyzen @echo 'ERROR: * Use "./configure --without-xmlwf" and/or' >&2 1290a48773fSEric van Gyzen @echo 'ERROR: "make -C lib all install" to bypass compilation' >&2 1300a48773fSEric van Gyzen @echo 'ERROR: of xmlwf (e.g. with -DXML_UNICODE)' >&2 1310a48773fSEric van Gyzen @echo 'ERROR:' >&2 1320a48773fSEric van Gyzen @false 1330a48773fSEric van Gyzen 1340a48773fSEric van Gyzen 1350a48773fSEric van Gyzen.PHONY: run-benchmark 1360a48773fSEric van Gyzenrun-benchmark: 1370a48773fSEric van Gyzen $(MAKE) -C tests/benchmark 1380a48773fSEric van Gyzen ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/recset.xml 65535 3 1394543ef51SXin LI ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/aaaaaa_attr.xml 4096 3 1404543ef51SXin LI ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/aaaaaa_cdata.xml 4096 3 1414543ef51SXin LI ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/aaaaaa_comment.xml 4096 3 1424543ef51SXin LI ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/aaaaaa_tag.xml 4096 3 1434543ef51SXin LI ./run.sh tests/benchmark/benchmark@EXEEXT@ -n $(top_srcdir)/../testdata/largefiles/aaaaaa_text.xml 4096 3 1440a48773fSEric van Gyzen 1456b2c1e49SXin LI.PHONY: download-xmlts-zip 1466b2c1e49SXin LIdownload-xmlts-zip: 1470a48773fSEric van Gyzen if test "$(XMLTS_ZIP)" = ""; then \ 1480a48773fSEric van Gyzen wget --output-document=tests/xmlts.zip \ 1490a48773fSEric van Gyzen https://www.w3.org/XML/Test/xmlts20080827.zip; \ 1500a48773fSEric van Gyzen else \ 1510a48773fSEric van Gyzen cp $(XMLTS_ZIP) tests/xmlts.zip; \ 1520a48773fSEric van Gyzen fi 1530a48773fSEric van Gyzen 1546b2c1e49SXin LItests/xmlts.zip: 1556b2c1e49SXin LI $(MAKE) download-xmlts-zip 1566b2c1e49SXin LI 1576b2c1e49SXin LI.PHONY: extract-xmlts-zip 1586b2c1e49SXin LIextract-xmlts-zip: tests/xmlts.zip 1596b2c1e49SXin LI [ -f $(builddir)/tests/xmlts.zip ] || $(MAKE) download-xmlts-zip # vpath workaround 1600a48773fSEric van Gyzen cd tests && unzip -q xmlts.zip 1610a48773fSEric van Gyzen 1626b2c1e49SXin LItests/xmlconf: tests/xmlts.zip 1636b2c1e49SXin LI $(MAKE) extract-xmlts-zip 1646b2c1e49SXin LI 1650a48773fSEric van Gyzen.PHONY: run-xmltest 1660a48773fSEric van Gyzenrun-xmltest: tests/xmlconf 1670a48773fSEric van Gyzenif WITH_XMLWF 1686b2c1e49SXin LI [ -d $(builddir)/tests/xmlconf ] || $(MAKE) extract-xmlts-zip # vpath workaround 1696b2c1e49SXin LI $(MAKE) -C lib 1700a48773fSEric van Gyzen $(MAKE) -C xmlwf 1716b2c1e49SXin LI $(srcdir)/tests/xmltest.sh "$(abs_builddir)/run.sh $(abs_builddir)/xmlwf/xmlwf@EXEEXT@" 2>&1 | tee $(builddir)/tests/xmltest.log 1726b2c1e49SXin LI $(srcdir)/fix-xmltest-log.sh $(builddir)/tests/xmltest.log 1736b2c1e49SXin LI diff -u $(srcdir)/tests/xmltest.log.expected $(builddir)/tests/xmltest.log 1740a48773fSEric van Gyzenelse 1750a48773fSEric van Gyzen @echo 'ERROR: xmlwf is needed for "make run-xmltest".' >&2 1760a48773fSEric van Gyzen @echo 'ERROR: Please re-configure without --without-xmlwf.' >&2 1770a48773fSEric van Gyzen @false 1780a48773fSEric van Gyzenendif 1790a48773fSEric van Gyzen 1800a48773fSEric van Gyzen.PHONY: qa 1810a48773fSEric van Gyzenqa: 1826b2c1e49SXin LI QA_COMPILER=clang QA_SANITIZER=address ./qa.sh 1836b2c1e49SXin LI QA_COMPILER=clang QA_SANITIZER=memory ./qa.sh 1846b2c1e49SXin LI QA_COMPILER=clang QA_SANITIZER=undefined ./qa.sh 1856b2c1e49SXin LI QA_COMPILER=gcc QA_PROCESSOR=gcov ./qa.sh 186