mirror of
https://github.com/pyenv/pyenv.git
synced 2024-11-07 20:31:01 -05:00
Add test for built-in python-build's patching feature
This commit is contained in:
parent
8fee82e456
commit
c6dd3b9468
1 changed files with 140 additions and 0 deletions
140
plugins/python-build/test/pyenv_ext.bats
Normal file
140
plugins/python-build/test/pyenv_ext.bats
Normal file
|
@ -0,0 +1,140 @@
|
|||
#!/usr/bin/env bats
|
||||
|
||||
load test_helper
|
||||
export PYTHON_BUILD_CACHE_PATH="$TMP/cache"
|
||||
export MAKE=make
|
||||
export MAKE_OPTS="-j 2"
|
||||
export CC=cc
|
||||
|
||||
export TMP_FIXTURES="$TMP/fixtures"
|
||||
|
||||
setup() {
|
||||
mkdir -p "$INSTALL_ROOT"
|
||||
stub md5 false
|
||||
stub curl false
|
||||
}
|
||||
|
||||
executable() {
|
||||
local file="$1"
|
||||
mkdir -p "${file%/*}"
|
||||
cat > "$file"
|
||||
chmod +x "$file"
|
||||
}
|
||||
|
||||
cached_tarball() {
|
||||
mkdir -p "$PYTHON_BUILD_CACHE_PATH"
|
||||
pushd "$PYTHON_BUILD_CACHE_PATH" >/dev/null
|
||||
tarball "$@"
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
tarball() {
|
||||
local name="$1"
|
||||
local path="$PWD/$name"
|
||||
local configure="$path/configure"
|
||||
shift 1
|
||||
|
||||
executable "$configure" <<OUT
|
||||
#!$BASH
|
||||
echo "$name: CPPFLAGS=\\"\$CPPFLAGS\\" LDFLAGS=\\"\$LDFLAGS\\"" >> build.log
|
||||
echo "$name: \$@" \${PYTHONOPT:+PYTHONOPT=\$PYTHONOPT} >> build.log
|
||||
OUT
|
||||
|
||||
for file; do
|
||||
mkdir -p "$(dirname "${path}/${file}")"
|
||||
touch "${path}/${file}"
|
||||
done
|
||||
|
||||
tar czf "${path}.tar.gz" -C "${path%/*}" "$name"
|
||||
}
|
||||
|
||||
stub_make_install() {
|
||||
stub "$MAKE" \
|
||||
" : echo \"$MAKE \$@\" >> build.log" \
|
||||
"install : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'"
|
||||
}
|
||||
|
||||
assert_build_log() {
|
||||
run cat "$INSTALL_ROOT/build.log"
|
||||
assert_output
|
||||
}
|
||||
|
||||
install_patch() {
|
||||
local name="$1"
|
||||
local patch="$2"
|
||||
[ -n "$patch" ] || patch="python.patch"
|
||||
|
||||
mkdir -p "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch%/*}"
|
||||
cat > "${TMP_FIXTURES}/${name%/*}/patches/${name##*/}/${patch}"
|
||||
}
|
||||
|
||||
install_tmp_fixture() {
|
||||
local args
|
||||
|
||||
while [ "${1#-}" != "$1" ]; do
|
||||
args="$args $1"
|
||||
shift 1
|
||||
done
|
||||
|
||||
local name="$1"
|
||||
local destination="$2"
|
||||
[ -n "$destination" ] || destination="$INSTALL_ROOT"
|
||||
|
||||
# Copy fixture to temporary path
|
||||
mkdir -p "${TMP_FIXTURES}/${name%/*}"
|
||||
cp "${FIXTURE_ROOT}/${name}" "${TMP_FIXTURES}/${name}"
|
||||
|
||||
run python-build $args "$TMP_FIXTURES/$name" "$destination"
|
||||
}
|
||||
|
||||
@test "apply built-in python patch before building" {
|
||||
cached_tarball "Python-3.2.1"
|
||||
|
||||
stub brew false
|
||||
stub_make_install
|
||||
stub patch ' : echo patch "$@" | sed -E "s/\.[[:alnum:]]+$/.XXX/" >> build.log'
|
||||
|
||||
echo | install_patch definitions/vanilla-python "Python-3.2.1/empty.patch"
|
||||
|
||||
TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
|
||||
assert_success
|
||||
|
||||
assert_build_log <<OUT
|
||||
patch -p0 --force -i $TMP/python-patch.XXX
|
||||
Python-3.2.1: CPPFLAGS="-I${TMP}/install/include " LDFLAGS="-L${TMP}/install/lib "
|
||||
Python-3.2.1: --prefix=$INSTALL_ROOT --libdir=$INSTALL_ROOT/lib
|
||||
make -j 2
|
||||
make install
|
||||
OUT
|
||||
|
||||
unstub make
|
||||
unstub patch
|
||||
}
|
||||
|
||||
@test "apply built-in python patches should be sorted by its name" {
|
||||
cached_tarball "Python-3.2.1"
|
||||
|
||||
stub brew false
|
||||
stub_make_install
|
||||
stub patch ' : for arg; do [[ "$arg" == "-"* ]] || sed -e "s/^/patch: /" "$arg"; done >> build.log'
|
||||
|
||||
echo "foo" | install_patch definitions/vanilla-python "Python-3.2.1/foo.patch"
|
||||
echo "bar" | install_patch definitions/vanilla-python "Python-3.2.1/bar.patch"
|
||||
echo "baz" | install_patch definitions/vanilla-python "Python-3.2.1/baz.patch"
|
||||
|
||||
TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null
|
||||
assert_success
|
||||
|
||||
assert_build_log <<OUT
|
||||
patch: bar
|
||||
patch: baz
|
||||
patch: foo
|
||||
Python-3.2.1: CPPFLAGS="-I${TMP}/install/include " LDFLAGS="-L${TMP}/install/lib "
|
||||
Python-3.2.1: --prefix=$INSTALL_ROOT --libdir=$INSTALL_ROOT/lib
|
||||
make -j 2
|
||||
make install
|
||||
OUT
|
||||
|
||||
unstub make
|
||||
unstub patch
|
||||
}
|
Loading…
Reference in a new issue