| @ -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 | |||||
| } | |||||