#!/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" <> 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" } resolve_link() { $(type -p greadlink readlink | head -1) "$1" } @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 <> 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 <> build.log" \ " : echo \"$MAKE \$@\" >> build.log && cat build.log >> '$INSTALL_ROOT/build.log'" PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" install_tmp_fixture definitions/vanilla-python < /dev/null assert_success assert_build_log < "${INSTALL_ROOT}/bin/python" #!$BASH echo "python \$@" >> "${INSTALL_ROOT}/build.log" OUT chmod +x "${INSTALL_ROOT}/bin/python" PYTHON_MAKE_INSTALL_TARGET="" TMPDIR="$TMP" run_inline_definition < "${INSTALL_ROOT}/bin/python" #!$BASH echo "python \$@" >> "${INSTALL_ROOT}/build.log" OUT chmod +x "${INSTALL_ROOT}/bin/python" PYTHON_MAKE_INSTALL_TARGET="altinstall" TMPDIR="$TMP" run_inline_definition <