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
Additionally use `cp -a` consistently rather than alternating between
`cp -a` and `cp -r`, and don't fail compile if the glob doesn't expand to
anything.
In `bin/steps/collectstatic` the unbuffered output in `indent` is subverted
by calling `sed` first:
```shell
python $MANAGE_FILE collectstatic --noinput 2>&1 | sed '/^Copying/d;/^$/d;/^ /d' | indent
```
This commit fixes this by making `sed` itself unbuffered rather than
putting that logic in the `indent` function.
When building, BUILD_DIR is set to a temporary directory. Vendored
libraries (e.g., pylibmc) are downloaded and unpacked in
$BUILD_DIR/.heroku/vendor/lib, but this is not currently in
LIBRARY_PATH or LD_LIBRARY_PATH.
Fix this by doing the following:
* Add $BUILD_DIR/.heroku/vendor/lib to LIBRARY_PATH/LD_LIBRARY_PATH
* Add $BUILD_DIR/.heroku/vendor/include to
C_INCLUDE_PATH/CPLUS_INCLUDE_PATH
* Add $BUILD_DIR/.heroku/vendor/bin to PATH, so vendored commands can
be used at compile time (e.g., curl-config)
* Add $BUILD_DIR/.heroku/vendor/lib/pkg-config to PKG_CONFIG_PATH, so
vendored packages can be found with pkg-config