mirror of
https://github.com/python/cpython.git
synced 2026-05-05 01:51:01 +00:00
91 lines
3 KiB
Bash
Executable file
91 lines
3 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_8_0"
|
|
expected_libexpat_version="2.8.0"
|
|
expected_libexpat_sha256="c7cec5f60ea3a42e7780781c6745255c19aa3dbfeeae58646b7132f88dc24780"
|
|
|
|
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
|
|
expat.h
|
|
expat_external.h
|
|
iasciitab.h
|
|
internal.h
|
|
latin1tab.h
|
|
nametab.h
|
|
siphash.h
|
|
utf8tab.h
|
|
winconfig.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
|
|
|
|
if ! grep -q '#include "pyexpatns\.h"' expat_external.h; then
|
|
echo "
|
|
Error: namespacing include not found in expat_external.h;
|
|
This may be due to source changes and will require updating this script" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# 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
|
|
- Update the sbom file:
|
|
Under the package "SPDXRef-PACKAGE-expat", update the "checksumValue",
|
|
"downloadLocation", "referenceLocator", and "versionInfo" fields.
|
|
- Regenerate the sbom file:
|
|
make regen-sbom
|
|
- Update the warning count in Tools/build/.warningignore_macos:
|
|
(use info from CI if not on a Mac)
|
|
'
|