1#!/bin/bash
2# Download and extract MarkupSafe
3# Homepage:
4# https://github.com/mitsuhiko/markupsafe
5# Download page:
6# https://pypi.python.org/pypi/MarkupSafe
7PACKAGE='MarkupSafe'
8VERSION='0.18'
9PACKAGE_DIR='markupsafe'
10
11CHROMIUM_FILES="README.chromium OWNERS get_markupsafe.sh"
12EXTRA_FILES='LICENSE AUTHORS'
13REMOVE_FILES='tests.py'
14
15SRC_URL='https://pypi.python.org/packages/source/'
16SRC_URL+="${PACKAGE:0:1}/$PACKAGE/$PACKAGE-$VERSION.tar.gz"
17FILENAME="$(basename $SRC_URL)"
18MD5_FILENAME="$FILENAME.md5"
19SHA512_FILENAME="$FILENAME.sha512"
20CHROMIUM_FILES+=" $MD5_FILENAME $SHA512_FILENAME"
21
22BUILD_DIR="$PACKAGE-$VERSION"
23THIRD_PARTY="$(dirname $(realpath $(dirname "${BASH_SOURCE[0]}")))"
24INSTALL_DIR="$THIRD_PARTY/$PACKAGE_DIR"
25OUT_DIR="$INSTALL_DIR/$BUILD_DIR/$PACKAGE_DIR"
26OLD_DIR="$THIRD_PARTY/$PACKAGE_DIR.old"
27
28function check_hashes {
29  # Hashes generated via:
30  # FILENAME=MarkupSafe-0.18.tar.gz
31  # md5sum "$FILENAME" > "$FILENAME.md5"
32  # sha512sum "$FILENAME" > "$FILENAME.sha512"
33  # unset FILENAME
34
35  # MD5
36  if ! [ -f "$MD5_FILENAME" ]
37  then
38    echo "MD5 hash file $MD5_FILENAME not found, could not verify archive"
39    exit 1
40  fi
41
42  # 32-digit hash, followed by filename
43  MD5_HASHFILE_REGEX="^[0-9a-f]{32}  $FILENAME"
44  if ! grep --extended-regex --line-regex --silent \
45    "$MD5_HASHFILE_REGEX" "$MD5_FILENAME"
46  then
47    echo "MD5 hash file $MD5_FILENAME does not contain hash for $FILENAME," \
48         'could not verify archive'
49    echo 'Hash file contents are:'
50    cat "$MD5_FILENAME"
51    exit 1
52  fi
53
54  if ! md5sum --check "$MD5_FILENAME"
55  then
56    echo 'MD5 hash does not match,' \
57         "archive file $FILENAME corrupt or compromised!"
58    exit 1
59  fi
60
61  # SHA-512
62  if ! [ -f "$SHA512_FILENAME" ]
63  then
64    echo "SHA-512 hash file $SHA512_FILENAME not found," \
65         'could not verify archive'
66    exit 1
67  fi
68
69  # 128-digit hash, followed by filename
70  SHA512_HASHFILE_REGEX="^[0-9a-f]{128}  $FILENAME"
71  if ! grep --extended-regex --line-regex --silent \
72    "$SHA512_HASHFILE_REGEX" "$SHA512_FILENAME"
73  then
74    echo "SHA-512 hash file $SHA512_FILENAME does not contain hash for" \
75         "$FILENAME, could not verify archive"
76    echo 'Hash file contents are:'
77    cat "$SHA512_FILENAME"
78    exit 1
79  fi
80
81  if ! sha512sum --check "$SHA512_FILENAME"
82  then
83    echo 'SHA-512 hash does not match,' \
84         "archive file $FILENAME corrupt or compromised!"
85    exit 1
86  fi
87}
88
89
90################################################################################
91# Body
92
93cd "$INSTALL_DIR"
94echo "Downloading $SRC_URL"
95curl --remote-name "$SRC_URL"
96check_hashes
97tar xvzf "$FILENAME"
98# Copy extra files over
99for FILE in $CHROMIUM_FILES
100do
101  cp "$FILE" "$OUT_DIR"
102done
103
104cd "$BUILD_DIR"
105for FILE in $EXTRA_FILES
106do
107  cp "$FILE" "$OUT_DIR"
108done
109
110cd "$OUT_DIR"
111for FILE in $REMOVE_FILES
112do
113  rm -fr "$FILE"
114done
115
116# Replace with new directory
117cd ..
118mv "$INSTALL_DIR" "$OLD_DIR"
119mv "$PACKAGE_DIR" "$INSTALL_DIR"
120cd "$INSTALL_DIR"
121rm -fr "$OLD_DIR"
122