1#!/usr/bin/env nix-shell
2#!nix-shell --pure -i bash -p wget -p gnupg -p cacert -p nix
3
4# Update patch set for GNU Bash or Readline.
5
6if [ $# -ne 2 ]
7then
8 echo "Usage: $(basename "$0") PROJECT VERSION"
9 echo ""
10 echo "Update the patch set for PROJECT (one of \`bash' or \`readline') for"
11 echo "the given version (e.g., \`4.0'). Produce \`PROJECT-patches.nix'."
12 exit 1
13fi
14
15PROJECT="$1"
16VERSION="$2"
17DIR=$(dirname "$0")
18VERSION_CONDENSED="$(echo "$VERSION" | sed -es/\\.//g)"
19PATCH_LIST="$DIR/$PROJECT-$VERSION-patches.nix"
20
21set -e
22
23rm -vf "$PATCH_LIST"
24
25wget "https://tiswww.case.edu/php/chet/gpgkey.asc"
26echo "4ef5051ce7200241e65d29c11eb57df8 gpgkey.asc" > gpgkey.asc.md5
27md5sum -c gpgkey.asc.md5
28gpg --import ./gpgkey.asc
29rm gpgkey.asc{,.md5}
30
31( echo "# Automatically generated by \`$(basename "$0")'; do not edit." ; \
32 echo "" ; \
33 echo "patch: [" ) \
34>> "$PATCH_LIST"
35
36for i in {001..100}
37do
38 wget -P "$DIR" "ftp.gnu.org/gnu/$PROJECT/$PROJECT-$VERSION-patches/$PROJECT$VERSION_CONDENSED-$i" || break
39 wget -P "$DIR" "ftp.gnu.org/gnu/$PROJECT/$PROJECT-$VERSION-patches/$PROJECT$VERSION_CONDENSED-$i.sig"
40 gpg --verify "$DIR/$PROJECT$VERSION_CONDENSED-$i.sig"
41 hash=$(nix-hash --flat --type sha256 --base32 "$DIR/$PROJECT$VERSION_CONDENSED-$i")
42 echo "(patch \"$i\" \"$hash\")" \
43 >> "$PATCH_LIST"
44
45 rm -f "$DIR/$PROJECT$VERSION_CONDENSED-$i"{,.sig}
46done
47
48echo "]" >> "$PATCH_LIST"
49
50# bash interprets numbers starting with 0 as octals
51echo "Got $((10#$i - 1)) patches."
52echo "Patch list has been written to \`$PATCH_LIST'."