Files
docker-php/eol/patches/docker-php-source-patch

61 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
set -eu
# Applies the patches listed in the series file "$1" to /usr/src/php.tar.xz and repacks it in
# place, so the official build and any later "docker-php-ext-install" compile the patched sources.
# "$2" holds deb.sury.org's patches, as unpacked from the Salsa archive.
series="$1"
set -- "$2"/*/debian/patches
if [ $# -ne 1 ] || [ ! -f "$1/series" ]; then
echo >&2 "error: no debian/patches with a series in the Salsa archive"
exit 1
fi
debDir="$1"
src=/usr/src/php.tar.xz
work="$(mktemp -d)"
# every patch of deb.sury.org's series must be listed, applied or commented out, so a new revision
# can't add patches nobody has reviewed
grep -v -e '^[[:space:]]*#' -e '^[[:space:]]*$' "$debDir/series" | awk '{ print $1 }' > "$work/deb"
sed -n -e '/^[^#[:space:]]/p' -e 's/^# [a-z]*: \([^ ]*\.patch\)$/\1/p' "$series" > "$work/ours"
if ! diff -u "$work/deb" "$work/ours" > "$work/diff"; then
echo >&2 "error: $series doesn't match deb.sury.org's series:"
cat >&2 "$work/diff"
exit 1
fi
installed=
# busybox's patch (old Alpine releases) lacks -d and the long options used below
if ! patch --version 2> /dev/null | grep -q GNU; then
if command -v apk > /dev/null; then
apk add --no-cache --virtual .patch-deps patch
else
apt-get update
apt-get install -y --no-install-recommends patch
rm -rf /var/lib/apt/lists/*
fi
installed=1
fi
mkdir "$work/php"
tar -xJf "$src" -C "$work/php" --strip-components=1
grep -v -e '^[[:space:]]*#' -e '^[[:space:]]*$' "$series" | while read -r p; do
echo "Applying $p"
patch -d "$work/php" -p1 --forward --no-backup-if-mismatch < "$debDir/$p"
done
tar -cJf "$src" -C "$work" php
# the upstream signature no longer matches the repacked tarball
rm -f "$src.asc"
rm -rf "$work"
if [ -n "$installed" ]; then
if command -v apk > /dev/null; then
apk del --no-network .patch-deps
else
apt-get purge -y --auto-remove patch
fi
fi