87 lines
2.5 KiB
Bash
Executable file
87 lines
2.5 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2010 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
# Script used to patch a source directory from a series of patches
|
|
# located under a directory hierarchy
|
|
|
|
. `dirname $0`/prebuilt-common.sh
|
|
|
|
PROGRAM_PARAMETERS="<src-dir> <patches-dir>"
|
|
PROGRAM_DESCRIPTION=\
|
|
"Patch a target source directory with a series of patches taken
|
|
from another directory hierarchy. The idea is that anything that
|
|
is found under <patches-dir>/subdir/foo.patch will be applied with
|
|
'patch -p1' in <src-dir>/subdir.
|
|
|
|
Patches are applied in the order they are found by 'find'."
|
|
|
|
OPTION_REVERSE=no
|
|
register_var_option "--reverse" OPTION_REVERSE "Reverse the patches applied previously"
|
|
|
|
parse_parameters ()
|
|
{
|
|
SRC_DIR=$1
|
|
if [ -z "$SRC_DIR" ] ; then
|
|
echo "ERROR: Missing source directory. See --help for usage."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$SRC_DIR" ] ; then
|
|
echo "ERROR: Invalid target source directory: $SRC_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
PATCHES_DIR=$2
|
|
if [ -z "$PATCHES_DIR" ] ; then
|
|
echo "ERROR: Missing patches directory. See --help for usage."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$PATCHES_DIR" ] ; then
|
|
echo "ERROR: Invalid patches directory: $PATCHES_DIR"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
extract_parameters "$@"
|
|
parse_parameters $PARAMETERS
|
|
|
|
if [ "$OPTION_REVERSE" = "yes" ]; then
|
|
SORT="-r"
|
|
REVERSE="-R"
|
|
fi
|
|
|
|
PATCHES=`(cd $PATCHES_DIR && find . -name "*.patch" | sort $SORT) 2> /dev/null`
|
|
|
|
if [ -z "$PATCHES" ] ; then
|
|
log "No patches files in $PATCHES_DIR"
|
|
exit 0
|
|
fi
|
|
PATCHES=`echo $PATCHES | sed -e s%^\./%%g`
|
|
for PATCH in $PATCHES; do
|
|
PATCHDIR=`dirname $PATCH`
|
|
PATCHNAME=`basename $PATCH`
|
|
if [ -d $SRC_DIR/$PATCHDIR ]; then
|
|
log "Applying $PATCHNAME into $SRC_DIR/$PATCHDIR"
|
|
cd $SRC_DIR/$PATCHDIR && patch $REVERSE -p1 < $PATCHES_DIR/$PATCH
|
|
fail_panic "Patch failure with $PATCHES_DIR/$PATCH!! !! Please check your patches directory!"
|
|
else
|
|
echo "Ignore non-existance $SRC_DIR/$PATCHDIR"
|
|
fi
|
|
done
|
|
|
|
dump "Done!"
|