cpython/Modules/expat/refresh.sh
Miss Islington (bot) 79c504454a
[3.14] gh-161192: Update bundled Expat to 2.10.0 (GH-161202) (#161216)
(cherry picked from commit a7017f2ca9)

Co-authored-by: Stan Ulbrych <stan@python.org>
Co-authored-by: Gregory P. Smith <68491+gpshead@users.noreply.github.com>
2026-11-03 07:37:53 +00:00

87 lines
2.7 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Use this script to update libexpat
set -e
set -o pipefail
if [[ "${BASH_VERSINFO[0]}" -lt 4 ]]; then
echo "A bash version >= 4 required. Got: $BASH_VERSION" >&2
exit 1
fi
# Update this when updating to a new version after verifying that the changes
# the update brings in are good. These values are used for verifying the SBOM, too.
expected_libexpat_tag="R_2_10_0"
expected_libexpat_version="2.10.0"
expected_libexpat_sha256="5466a341f9c692ef7a958a6881311be597f8e1ce345984cf78414f54793dea4c"
expat_dir="$(realpath "$(dirname -- "${BASH_SOURCE[0]}")")"
cd ${expat_dir}
# Step 1: download and copy files
curl --location "https://github.com/libexpat/libexpat/releases/download/${expected_libexpat_tag}/expat-${expected_libexpat_version}.tar.gz" > libexpat.tar.gz
echo "${expected_libexpat_sha256} libexpat.tar.gz" | sha256sum --check
# Step 2: Pull files from the libexpat distribution
tar xzvf libexpat.tar.gz "expat-${expected_libexpat_version}/COPYING" --strip-components 2
declare -a lib_files
lib_files=(
ascii.h
asciitab.h
entities.h
expat.h
expat_external.h
fallthrough.h
hash_table.h
iasciitab.h
internal.h
latin1tab.h
memory_sanitizer.h
nametab.h
siphash.h
utf8tab.h
winconfig.h
xcs.c
xcs.h
xmlparse.c
xmlrole.c
xmlrole.h
xmltok.c
xmltok.h
xmltok_impl.c
xmltok_impl.h
xmltok_ns.c
)
for f in "${lib_files[@]}"; do
tar xzvf libexpat.tar.gz "expat-${expected_libexpat_version}/lib/${f}" --strip-components 2
done
rm libexpat.tar.gz
# Step 3: Add the namespacing include to expat_external.h
sed -i 's/# define Expat_External_INCLUDED 1/&\n\/* Namespace external symbols to allow multiple libexpat version to\n co-exist. \*\/\n#include "pyexpatns.h"/' expat_external.h
# Step 4: Skip the Windows rand_s entropy path in xmlparse.c when
# XML_POOR_ENTROPY is set.
sed -z -i 's|#if defined(_WIN32)\n# include "random_rand_s\.h"\n#endif /\* defined(_WIN32) \*/|#if defined(_WIN32) \&\& ! defined(XML_POOR_ENTROPY)\n# include "random_rand_s.h"\n#endif /* defined(_WIN32) \&\& ! defined(XML_POOR_ENTROPY) */|' xmlparse.c
sed -z -i 's|# ifdef _WIN32\n if (writeRandomBytes_rand_s|# if defined(_WIN32) \&\& ! defined(XML_POOR_ENTROPY)\n if (writeRandomBytes_rand_s|' xmlparse.c
if ! grep -q '#if defined(_WIN32) && ! defined(XML_POOR_ENTROPY)' xmlparse.c; then
echo "
Error: rand_s gate not patched in xmlparse.c;
This may be due to source changes and will require updating this script" >&2
exit 1
fi
echo "
Updated! next steps:
- Verify all is okay:
git diff
git status
- Regenerate the sbom file
make regen-sbom
- Update warning count in Tools/build/.warningignore_macos
(use info from CI if not on a Mac)
"