#!/usr/bin/env bash
#
# sage-apply-patches [-p<num>] [-d patch-subdir] [patch-dir] -- [...]
#
# Apply any patches to original spkg sources. Patch files must have
# the .patch extension.
#
# By default the patches are applied from ../patches/ using the -p1
# option, and it is assumed that the patches are being applied from
# the root of the package source.
#
# An optional patch subdirectory may be specified with the -d flag.
# For example `sage-apply-patches -d macos` applies only those
# patches under <patch-dir>/macos.
#
# The -p<num> arg is the argument accepted by the `patch` command,
# and overrides the default -p1
#
# Any additional arguments following " -- " are passed directly
# to the `patch` command.
#
#***************************************************************************
#
# Distributed under the terms of the GNU General Public License (GPL)
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
# http://www.gnu.org/licenses/
#***************************************************************************
patchdir="../patches"
patch_subdir=""
patch_strip="-p1"
patch_args_sep=""
patch_args=""
while [[ $# > 0 ]]; do
if [[ -z "$patch_args_sep" ]]; then
case $1 in
-d)
patch_subdir="${2%/}"
shift
;;
-p[0-9])
patch_strip="$1"
;;
--)
patch_args_sep="$1"
;;
*)
patchdir="${1%/}"
;;
esac
else
patch_args="$patch_args $1"
fi
shift
done
patchdir="${patchdir}/${patch_subdir}"
patchdir="${patchdir%/}"
patches=( "${patchdir}"/*.patch )
if [[ -r "${patches[0]}" ]]; then
echo "Applying patches from ${patchdir}..."
for patch in ${patches[@]}; do
# Skip non-existing or non-readable patches
[ -r "$patch" ] || continue
echo "Applying $patch"
patch $patch_strip $patch_args < "$patch"
if [ $? -ne 0 ]; then
echo >&2 "Error applying '$patch'"
exit 1
fi
done
else
>&2 echo "No patch files found in $patchdir"
fi