mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-21 08:42:23 +00:00
5d33e04596
Where appropriate fiddle with a few other things.
169 lines
3.5 KiB
Bash
169 lines
3.5 KiB
Bash
#!/bin/sh
|
|
#
|
|
# MAINTAINER: portmgr@FreeBSD.org
|
|
|
|
set -e
|
|
set -o pipefail
|
|
|
|
. "${dp_SCRIPTSDIR}/functions.sh"
|
|
|
|
validate_env dp_BZCAT dp_CAT dp_DISTDIR dp_ECHO_MSG dp_EXTRA_PATCHES \
|
|
dp_EXTRA_PATCH_TREE dp_GZCAT dp_OPSYS dp_PATCH dp_PATCHDIR \
|
|
dp_PATCHFILES dp_PATCH_ARGS dp_PATCH_DEBUG_TMP dp_PATCH_DIST_ARGS \
|
|
dp_PATCH_SILENT dp_PATCH_WRKSRC dp_PKGNAME dp_PKGORIGIN \
|
|
dp_UNZIP_NATIVE_CMD dp_XZCAT
|
|
|
|
[ -n "${DEBUG_MK_SCRIPTS}" -o -n "${DEBUG_MK_SCRIPTS_DO_PATCH}" ] && set -x
|
|
|
|
set -u
|
|
|
|
has_failed=""
|
|
|
|
cat_file() {
|
|
case "$1" in
|
|
*.Z|*.gz)
|
|
${dp_GZCAT} "$1"
|
|
;;
|
|
*.bz2)
|
|
${dp_BZCAT} "$1"
|
|
;;
|
|
*.xz)
|
|
${dp_XZCAT} "$1"
|
|
;;
|
|
*.zip)
|
|
${dp_UNZIP_NATIVE_CMD} -p "$1"
|
|
;;
|
|
*)
|
|
${dp_CAT} "$1"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# If we want to continue when one patch fails, set the flag, otherwise, abort.
|
|
if [ -n "${dp_PATCH_CONTINUE_ON_FAIL}" ]; then
|
|
failure_fatal() {
|
|
has_failed=1
|
|
}
|
|
else
|
|
failure_fatal() {
|
|
false
|
|
}
|
|
fi
|
|
|
|
apply_one_patch() {
|
|
local file="$1"
|
|
local msg="$2"
|
|
local verbose="$3"
|
|
shift 3
|
|
local patch_strip=""
|
|
|
|
case ${file} in
|
|
*:-p[0-9])
|
|
patch_strip=${file##*:}
|
|
file=${file%:-p[0-9]}
|
|
;;
|
|
esac
|
|
|
|
if [ -n "${verbose}" -o -n "${dp_PATCH_DEBUG_TMP}" ]; then
|
|
${dp_ECHO_MSG} "===> Applying ${msg} ${file}${patch_strip:+ with ${patch_strip}}"
|
|
fi
|
|
|
|
if ! cat_file "$file" | do_patch "$@" ${patch_strip}; then
|
|
${dp_ECHO_MSG} "===> FAILED Applying ${msg} ${file}${patch_strip:+ with ${patch_strip}}"
|
|
false
|
|
fi
|
|
}
|
|
|
|
do_patch() {
|
|
"${dp_PATCH}" -d "${dp_PATCH_WRKSRC}" "$@"
|
|
}
|
|
|
|
patch_from_directory() {
|
|
local dir="$1"
|
|
local msg="$2"
|
|
local patches_applied=""
|
|
local patches_failed=""
|
|
|
|
if [ -d "${dir}" ]; then
|
|
cd "${dir}"
|
|
|
|
if [ "$(echo patch-*)" != "patch-*" ]; then
|
|
|
|
${dp_ECHO_MSG} "===> Applying ${msg} patches for ${dp_PKGNAME} from ${dir}"
|
|
|
|
|
|
for i in patch-*; do
|
|
case ${i} in
|
|
*.orig|*.rej|*~|*,v)
|
|
${dp_ECHO_MSG} "====> IGNORING patchfile ${i}"
|
|
;;
|
|
*)
|
|
if apply_one_patch "${i}" "${msg}" "" ${dp_PATCH_ARGS}; then
|
|
patches_applied="${patches_applied} ${i}"
|
|
else
|
|
patches_failed="${patches_failed} ${i}"
|
|
if ! failure_fatal; then
|
|
break
|
|
fi
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "${patches_failed}" -a "${dp_PATCH_SILENT}" != "yes" ]; then
|
|
if [ -n "${patches_applied}" ]; then
|
|
${dp_ECHO_MSG} "===> Cleanly applied ${msg} patch(es) ${patches_applied}"
|
|
fi
|
|
${dp_ECHO_MSG} "===> FAILED to apply cleanly ${msg} patch(es) ${patches_failed}"
|
|
# If we want to stop after the first failure, this returns false,
|
|
# let its return value bubble up here and stop everything.
|
|
failure_fatal
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
if [ -n "${dp_PATCHFILES}" ]; then
|
|
${dp_ECHO_MSG} "===> Applying distribution patches for ${dp_PKGNAME}"
|
|
cd "${dp_DISTDIR}"
|
|
for i in ${dp_PATCHFILES}; do
|
|
if ! apply_one_patch "${i}" \
|
|
"distribution patch" \
|
|
"" \
|
|
${dp_PATCH_DIST_ARGS}; then
|
|
failure_fatal
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -n "${dp_EXTRA_PATCHES}" ]; then
|
|
for i in ${dp_EXTRA_PATCHES}; do
|
|
if [ -d "${i}" ]; then
|
|
patch_from_directory "${i}" \
|
|
"extra patch"
|
|
else
|
|
if ! apply_one_patch "${i}" \
|
|
"extra patch" \
|
|
"verbose" \
|
|
${dp_PATCH_ARGS}; then
|
|
failure_fatal
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
patch_from_directory "${dp_PATCHDIR}" "${dp_OPSYS}"
|
|
|
|
if [ -n "${dp_EXTRA_PATCH_TREE}" ]; then
|
|
patch_from_directory "${dp_EXTRA_PATCH_TREE}/${dp_PKGORIGIN}" "local"
|
|
fi
|
|
|
|
if [ -n "$has_failed" ]; then
|
|
if [ -n "${dp_PATCH_DEBUG_TMP}" ]; then
|
|
${dp_ECHO_MSG} "==> Some patches failed to apply cleanly."
|
|
${dp_ECHO_MSG} "==> Look for FAILED messages above."
|
|
fi
|
|
false
|
|
fi
|
|
|