mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 15:00:19 +00:00
101 lines
3.5 KiB
Bash
Executable File
101 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# shellcheck source=bin/utils
|
|
source "$BIN_DIR/utils"
|
|
|
|
sqlite3_version() {
|
|
if [ "$STACK" = "cedar-14" ]; then
|
|
SQLITE3_VERSION="3.8.2-1ubuntu2.2"
|
|
elif [ "$STACK" = "heroku-16" ]; then
|
|
SQLITE3_VERSION="3.11.0-1ubuntu1.3"
|
|
else
|
|
SQLITE3_VERSION="3.22.0-1ubuntu0.2"
|
|
fi
|
|
|
|
export SQLITE3_VERSION
|
|
}
|
|
|
|
sqlite3_install() {
|
|
HEROKU_PYTHON_DIR="$1"
|
|
SQLITE3_VERSION="$2"
|
|
HEADERS_ONLY="$3"
|
|
|
|
mkdir -p "$HEROKU_PYTHON_DIR"
|
|
|
|
APT_CACHE_DIR="$HEROKU_PYTHON_DIR/apt/cache"
|
|
APT_STATE_DIR="$HEROKU_PYTHON_DIR/apt/state"
|
|
|
|
mkdir -p "$APT_CACHE_DIR/archives/partial"
|
|
mkdir -p "$APT_STATE_DIR/lists/partial"
|
|
|
|
APT_OPTIONS="-o debug::nolocking=true"
|
|
APT_OPTIONS="$APT_OPTIONS -o dir::cache=$APT_CACHE_DIR"
|
|
APT_OPTIONS="$APT_OPTIONS -o dir::state=$APT_STATE_DIR"
|
|
APT_OPTIONS="$APT_OPTIONS -o dir::etc::sourcelist=/etc/apt/sources.list"
|
|
|
|
apt-get $APT_OPTIONS update > /dev/null 2>&1
|
|
if [ -z "$HEADERS_ONLY" ]; then
|
|
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION" sqlite3="$SQLITE3_VERSION" > /dev/null 2>&1
|
|
else
|
|
apt-get $APT_OPTIONS -y -d --reinstall install libsqlite3-dev="$SQLITE3_VERSION"
|
|
fi
|
|
|
|
find "$APT_CACHE_DIR/archives/" -name "*.deb" -exec dpkg -x {} "$HEROKU_PYTHON_DIR/sqlite3/" \;
|
|
|
|
mkdir -p "$HEROKU_PYTHON_DIR/include"
|
|
mkdir -p "$HEROKU_PYTHON_DIR/lib"
|
|
|
|
# remove old sqlite3 libraries/binaries
|
|
find "$HEROKU_PYTHON_DIR/include/" -name "sqlite3*.h" -exec rm -f {} \;
|
|
find "$HEROKU_PYTHON_DIR/lib/" -name "libsqlite3.*" -exec rm -f {} \;
|
|
rm -f "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
|
|
rm -f "$HEROKU_PYTHON_DIR/bin/sqlite3"
|
|
|
|
# copy over sqlite3 headers & bins and setup linking against the stack image library
|
|
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/include/"* "$HEROKU_PYTHON_DIR/include/"
|
|
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu"/libsqlite3.*a "$HEROKU_PYTHON_DIR/lib/"
|
|
mkdir -p "$HEROKU_PYTHON_DIR/lib/pkgconfig"
|
|
# set the right prefix/lib directories
|
|
sed -e 's/prefix=\/usr/prefix=\/app\/.heroku\/python/' -e 's/\/x86_64-linux-gnu//' "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/pkgconfig/sqlite3.pc" > "$HEROKU_PYTHON_DIR/lib/pkgconfig/sqlite3.pc"
|
|
# need to point the libsqlite3.so to the stack image library for /usr/bin/ld -lsqlite3
|
|
SQLITE3_LIBFILE="/usr/lib/x86_64-linux-gnu/$(readlink -n "$HEROKU_PYTHON_DIR/sqlite3/usr/lib/x86_64-linux-gnu/libsqlite3.so")"
|
|
ln -s "$SQLITE3_LIBFILE" "$HEROKU_PYTHON_DIR/lib/libsqlite3.so"
|
|
if [ -z "$HEADERS_ONLY" ]; then
|
|
mv "$HEROKU_PYTHON_DIR/sqlite3/usr/bin"/* "$HEROKU_PYTHON_DIR/bin/"
|
|
fi
|
|
|
|
# cleanup
|
|
rm -rf "$HEROKU_PYTHON_DIR/sqlite3/"
|
|
rm -rf "$HEROKU_PYTHON_DIR/apt/"
|
|
}
|
|
|
|
buildpack_sqlite3_install() {
|
|
sqlite3_version
|
|
HEROKU_PYTHON_DIR="$BUILD_DIR/.heroku/python"
|
|
|
|
SQLITE3_VERSION_FILE="$BUILD_DIR/.heroku/python-sqlite3-version"
|
|
if [ -f "$SQLITE3_VERSION_FILE" ]; then
|
|
INSTALLED_SQLITE3_VERSION=$(cat "$SQLITE3_VERSION_FILE")
|
|
fi
|
|
|
|
# python version check
|
|
if python_sqlite3_check "$PYTHON_VERSION"; then
|
|
# only install if the sqlite3 version has changed
|
|
if [ "$INSTALLED_SQLITE3_VERSION" != "$SQLITE3_VERSION" ]; then
|
|
puts-step "Installing SQLite3"
|
|
|
|
if sqlite3_install "$BUILD_DIR/.heroku/python" "$SQLITE3_VERSION" ; then
|
|
echo "Sqlite3 successfully installed."
|
|
mcount "success.python.sqlite3"
|
|
else
|
|
echo "Sqlite3 failed to install."
|
|
mcount "failure.python.sqlite3"
|
|
fi
|
|
|
|
# save version installed
|
|
mkdir -p "$CACHE_DIR/.heroku/"
|
|
echo "$SQLITE3_VERSION" > "$CACHE_DIR/.heroku/python-sqlite3-version"
|
|
fi
|
|
fi
|
|
}
|