| 1 | #!/bin/ksh |
|---|
| 2 | # |
|---|
| 3 | # $Id: applypatch.sh,v 1.1 2001/01/31 17:18:07 gjertsen Exp $ |
|---|
| 4 | # $Log: applypatch.sh,v $ |
|---|
| 5 | # Revision 1.1 2001/01/31 17:18:07 gjertsen |
|---|
| 6 | # Move patch scripts to tools directory. |
|---|
| 7 | # |
|---|
| 8 | # Revision 1.3 2000/06/29 23:08:50 schmuck |
|---|
| 9 | # Fix problem where script got confused when patch command created a |
|---|
| 10 | # backup copy of its input file, because it did not exactly match the |
|---|
| 11 | # input from which the diff was produced. |
|---|
| 12 | # Avoid file name collisions by using a tmp file for patch output. |
|---|
| 13 | # |
|---|
| 14 | # Revision 1.2 2000/06/23 22:07:31 eshel |
|---|
| 15 | # minor changes to messages |
|---|
| 16 | # |
|---|
| 17 | # Revision 1.1 2000/06/22 23:02:03 eshel |
|---|
| 18 | # add createpatch.sh and applypatch.sh to patch linux source .h files |
|---|
| 19 | # |
|---|
| 20 | # |
|---|
| 21 | ## ###################################################################### ## |
|---|
| 22 | ## Copyright IBM 2000 ## |
|---|
| 23 | ## ###################################################################### ## |
|---|
| 24 | |
|---|
| 25 | #set nonomatch |
|---|
| 26 | #set -x; |
|---|
| 27 | |
|---|
| 28 | # Verify correct number of parameters |
|---|
| 29 | if [ $# != 3 ]; then |
|---|
| 30 | echo 'usage: applypatch.sh $SRC $DEST $FILENAME' |
|---|
| 31 | exit 1 |
|---|
| 32 | fi |
|---|
| 33 | |
|---|
| 34 | # Get parameter values |
|---|
| 35 | PGM=${0##*/} |
|---|
| 36 | SRC="$1" |
|---|
| 37 | DEST="$2" |
|---|
| 38 | DIFF_FILE="$3" |
|---|
| 39 | |
|---|
| 40 | # Construct name of the .h file to be patched and tmp file for patch output |
|---|
| 41 | H_FILE=${DIFF_FILE%.diff}.h |
|---|
| 42 | TMP_FILE=/tmp/$$.$H_FILE |
|---|
| 43 | |
|---|
| 44 | # Compare checksums to verify that the source file to be patched matches |
|---|
| 45 | # the file that was used to produce the .diff file |
|---|
| 46 | CKSUM1=$(head -1 $DIFF_FILE) |
|---|
| 47 | CKSUM2=$(cksum $SRC/$H_FILE) |
|---|
| 48 | if [ "$CKSUM1" != "$CKSUM2" ]; then |
|---|
| 49 | echo "$PGM: *** Warning: source file $SRC/$H_FILE has changed" |
|---|
| 50 | fi |
|---|
| 51 | |
|---|
| 52 | # Run the patch command; output goes into /tmp |
|---|
| 53 | patch --no-backup-if-mismatch --output $TMP_FILE $SRC/$H_FILE $DIFF_FILE |
|---|
| 54 | if [ $? != 0 ]; then |
|---|
| 55 | echo "$PGM: *** Error: patch command failed" |
|---|
| 56 | exit 1 |
|---|
| 57 | fi |
|---|
| 58 | |
|---|
| 59 | # If a file with the same name as the source file exists in the current |
|---|
| 60 | # directory, verify that its content matches the result of applying the patch |
|---|
| 61 | if [ -f $H_FILE ]; then |
|---|
| 62 | diff -q $H_FILE $TMP_FILE > /dev/null |
|---|
| 63 | if [ $? != 0 ]; then |
|---|
| 64 | echo "$PGM: *** Error: result of applying $DIFF_FILE does not match ./$H_FILE" |
|---|
| 65 | echo "$PGM: run createpatch.sh before running applypatch.sh again" |
|---|
| 66 | rm $TMP_FILE |
|---|
| 67 | exit 1 |
|---|
| 68 | fi |
|---|
| 69 | fi |
|---|
| 70 | |
|---|
| 71 | # Install the patched .h file in the destination directory |
|---|
| 72 | /usr/bin/install -c -m 0444 $TMP_FILE $DEST/$H_FILE |
|---|
| 73 | rc=$? |
|---|
| 74 | |
|---|
| 75 | # Clean up and return the result of the install command |
|---|
| 76 | rm $TMP_FILE |
|---|
| 77 | exit $rc |
|---|