mirror of
https://github.com/kennethreitz/heroku-buildpack-python.git
synced 2026-06-05 23:10:16 +00:00
826193ef5a
The current regex assumes that pylibmc appears at the beginning of a line
(whitespace only precedes it), which is a fair assumption in a single 'flat'
requirements.txt file. However, if you are using nested requirements then
this is not the case - your pylibmc may exist in a sub-directory. This is
very similar to the way in which mercurial is installed if "hg+" is found
in the requirements file (see the /bin/compile script). By insisting that
pylibmc appear at the beginning of the file, it's impossible to fool the
compilation into installing libmemcached (as this script does) by simply
putting the phrase into a comment, which is what you *can* do with 'hg+'.
I've updated the regex to remove the beginning of line restriction. This
means that you can add a comment to a top-level requirements.txt that
will trigger the install, without having to functionally alter your
nested requirements.
e.g. top-level requirements.txt:
# fake comment to trigger pylibmc script
# fake comment to trigger hg+ install
-r requirements/production.txt
39 lines
1.1 KiB
Bash
Executable File
39 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This script serves as the Pylibmc build step of the
|
|
# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python)
|
|
# compiler.
|
|
#
|
|
# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an
|
|
# adapter between a Python application and Heroku's runtime.
|
|
#
|
|
# This script is invoked by [`bin/compile`](/).
|
|
|
|
# The location of the pre-compiled libmemcached binary.
|
|
VENDORED_MEMCACHED="http://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.tar.gz"
|
|
|
|
# Syntax sugar.
|
|
source $BIN_DIR/utils
|
|
|
|
# If pylibmc exists within requirements, use vendored libmemcached.
|
|
if (grep -Eiq "\s*pylibmc" requirements.txt) then
|
|
echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
|
|
cd .heroku
|
|
|
|
if [ -d "vendor/lib/sasl2" ]; then
|
|
export LIBMEMCACHED=$(pwd)/vendor
|
|
else
|
|
# Download and extract libmemcached into target vendor directory.
|
|
curl -s -L -o tmp-libmemcached.tar.gz $VENDORED_MEMCACHED
|
|
tar -zxvf tmp-libmemcached.tar.gz > /dev/null
|
|
rm tmp-libmemcached.tar.gz
|
|
export LIBMEMCACHED=$(pwd)/vendor
|
|
fi
|
|
|
|
export LIBMEMCACHED=$(pwd)/vendor
|
|
cd ..
|
|
fi
|
|
|
|
|
|
|