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