mirror of
https://github.com/chialab/docker-php.git
synced 2026-11-06 12:40:34 -04:00
61 lines
1.9 KiB
Bash
Executable File
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
|