diff --git a/plugins/python-build/bin/pyenv-install b/plugins/python-build/bin/pyenv-install index 5aaf0a52..6bc78b22 100755 --- a/plugins/python-build/bin/pyenv-install +++ b/plugins/python-build/bin/pyenv-install @@ -106,6 +106,8 @@ for option in "${OPTIONS[@]}"; do esac done +[ "${#ARGUMENTS[@]}" -le 1 ] || usage 1 >&2 + unset VERSION_NAME # The first argument contains the definition to install. If the @@ -114,8 +116,7 @@ unset VERSION_NAME # version is not specified. DEFINITION="${ARGUMENTS[0]}" [ -n "$DEFINITION" ] || DEFINITION="$(pyenv-local 2>/dev/null || true)" -[ -n "$DEFINITION" ] || usage 1 - +[ -n "$DEFINITION" ] || usage 1 >&2 # Define `before_install` and `after_install` functions that allow # plugin hooks to register a string of code for execution before or diff --git a/plugins/python-build/bin/pyenv-uninstall b/plugins/python-build/bin/pyenv-uninstall index 8336b454..ed6a3b84 100755 --- a/plugins/python-build/bin/pyenv-uninstall +++ b/plugins/python-build/bin/pyenv-uninstall @@ -17,24 +17,32 @@ if [ "$1" = "--complete" ]; then exec pyenv versions --bare fi +usage() { + # We can remove the sed fallback once pyenv 0.4.0 is widely available + pyenv-help uninstall 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0" + [ -z "$1" ] || exit "$1" +} + if [ -z "$PYENV_ROOT" ]; then PYENV_ROOT="${HOME}/.pyenv" fi +if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + usage 0 +fi + unset FORCE if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then FORCE=true shift fi +[ "$#" -eq 1 ] || usage 1 >&2 + DEFINITION="$1" case "$DEFINITION" in "" | -* ) - # We can remove the sed fallback once pyenv 0.4.0 is widely available. - { pyenv-help uninstall 2>/dev/null || - sed -ne '/^#/!q;s/.\{1,2\}//;1,4d;p' < "$0" - } >&2 - exit 1 + usage 1 >&2 ;; esac diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index 87ff4e90..6f54fe4e 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -1,4 +1,14 @@ #!/usr/bin/env bash +# +# Usage: python-build [-kvp] +# python-build --definitions +# +# -k/--keep Do not remove source tree after installation +# -v/--verbose Verbose mode: print compilation status to stdout +# -p/--patch Apply a patch from stdin before building +# --definitions List all built-in definitions +# -g/--debug Build a debug version +# PYTHON_BUILD_VERSION="20141028" @@ -495,7 +505,7 @@ fetch_svn() { if type svn &>/dev/null; then svn co -r "$svn_rev" "$svn_url" "${package_name}" >&4 2>&1 else - echo "error: please install \`svn\` and try again" >&2 + echo "error: please install Subversion and try again" >&2 exit 1 fi } @@ -644,7 +654,6 @@ build_package_standard() { local PACKAGE_MAKE_OPTS_ARRAY="${package_var_name}_MAKE_OPTS_ARRAY[@]" local PACKAGE_MAKE_INSTALL_OPTS="${package_var_name}_MAKE_INSTALL_OPTS" local PACKAGE_MAKE_INSTALL_OPTS_ARRAY="${package_var_name}_MAKE_INSTALL_OPTS_ARRAY[@]" - local PACKAGE_MAKE_INSTALL_TARGET="${package_var_name}_MAKE_INSTALL_TARGET" local PACKAGE_CFLAGS="${package_var_name}_CFLAGS" [ "$package_var_name" = "PYTHON" ] && use_homebrew_readline || true @@ -661,7 +670,7 @@ build_package_standard() { ) >&4 2>&1 { "$MAKE" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS} "${!PACKAGE_MAKE_OPTS_ARRAY}" - "$MAKE" "${!PACKAGE_MAKE_INSTALL_TARGET:-install}" $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}" + "$MAKE" install $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}" } >&4 2>&1 } @@ -1098,7 +1107,15 @@ require_llvm() { local llvm_version="$1" if [ "$(uname -s)" = "Darwin" ] && [ "$(osx_version)" -ge 1010 ]; then if [[ "$PYTHON_CONFIGURE_OPTS" != *--llvm-* ]]; then - package_option python configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2" + if [ "$llvm_version" = "3.2" ]; then + package_option python configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2" + else + local llvm_prefix="$(brew --prefix llvm 2>/dev/null || true)" + local llvm_config="${llvm_prefix}/bin/llvm-config" + if [ -x "$llvm_config" ]; then + package_option python configure --llvm-config="$llvm_config" + fi + fi fi fi } @@ -1519,14 +1536,8 @@ version() { } usage() { - { version - echo "usage: python-build [-k|--keep] [-v|--verbose] [-p|--patch] [-g|--debug] definition prefix" - echo " python-build --definitions" - } >&2 - - if [ -z "$1" ]; then - exit 1 - fi + sed -ne '/^#/!q;s/.\{1,2\}//;1,2d;p' < "$0" + [ -z "$1" ] || exit "$1" } list_definitions() { @@ -1558,16 +1569,9 @@ parse_options "$@" for option in "${OPTIONS[@]}"; do case "$option" in "h" | "help" ) - usage without_exiting - { echo - echo " -k/--keep Do not remove source tree after installation" - echo " -v/--verbose Verbose mode: print compilation status to stdout" - echo " -p/--patch Apply a patch from stdin before building" - echo " -g/--debug Build a debug version" - echo " --definitions List all built-in definitions" - echo - } >&2 - exit 0 + version + echo + usage 0 ;; "definitions" ) list_definitions @@ -1592,9 +1596,11 @@ for option in "${OPTIONS[@]}"; do esac done +[ "${#ARGUMENTS[@]}" -eq 2 ] || usage 1 >&2 + DEFINITION_PATH="${ARGUMENTS[0]}" if [ -z "$DEFINITION_PATH" ]; then - usage + usage 1 >&2 elif [ ! -f "$DEFINITION_PATH" ]; then for DEFINITION_DIR in "${PYTHON_BUILD_DEFINITIONS[@]}"; do if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then @@ -1611,7 +1617,7 @@ fi PREFIX_PATH="${ARGUMENTS[1]}" if [ -z "$PREFIX_PATH" ]; then - usage + usage 1 >&2 elif [ "${PREFIX_PATH#/}" = "$PREFIX_PATH" ]; then PREFIX_PATH="${PWD}/${PREFIX_PATH}" fi diff --git a/plugins/python-build/test/arguments.bats b/plugins/python-build/test/arguments.bats new file mode 100644 index 00000000..56840b65 --- /dev/null +++ b/plugins/python-build/test/arguments.bats @@ -0,0 +1,23 @@ +#!/usr/bin/env bats + +load test_helper + +@test "not enought arguments for python-build" { + # use empty inline definition so nothing gets built anyway + local definition="${TMP}/build-definition" + echo '' > "$definition" + + run python-build "$definition" + assert_failure + assert_output_contains 'Usage: python-build' +} + +@test "extra arguments for python-build" { + # use empty inline definition so nothing gets built anyway + local definition="${TMP}/build-definition" + echo '' > "$definition" + + run python-build "$definition" "${TMP}/install" "" + assert_failure + assert_output_contains 'Usage: python-build' +} diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats index 1b9724f5..ef2396d7 100644 --- a/plugins/python-build/test/build.bats +++ b/plugins/python-build/test/build.bats @@ -5,6 +5,7 @@ export PYTHON_BUILD_CACHE_PATH="$TMP/cache" export MAKE=make export MAKE_OPTS="-j 2" export CC=cc +export -n PYTHON_CONFIGURE_OPTS setup() { mkdir -p "$INSTALL_ROOT" @@ -449,6 +450,18 @@ OUT # nop } +@test "JRuby Java 7 missing" { + # nop +} + +@test "JRuby Java is outdated" { + # nop +} + +@test "JRuby Java 7 up-to-date" { + # nop +} + @test "non-writable TMPDIR aborts build" { export TMPDIR="${TMP}/build" mkdir -p "$TMPDIR" diff --git a/plugins/python-build/test/compiler.bats b/plugins/python-build/test/compiler.bats index 154c1156..a8de5a07 100644 --- a/plugins/python-build/test/compiler.bats +++ b/plugins/python-build/test/compiler.bats @@ -5,8 +5,13 @@ export MAKE=make export MAKE_OPTS='-j 2' export -n CFLAGS export -n CC +export -n PYTHON_CONFIGURE_OPTS @test "require_gcc on OS X 10.9" { + # yyuu/pyenv#222 + stub uname '-s : echo Darwin' + stub sw_vers '-productVersion : echo 10.9.5' + stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 10.9.5' stub gcc '--version : echo 4.2.1' @@ -24,6 +29,10 @@ OUT } @test "require_gcc on OS X 10.10" { + # yyuu/pyenv#222 + stub uname '-s : echo Darwin' + stub sw_vers '-productVersion : echo 10.10' + stub uname '-s : echo Darwin' stub sw_vers '-productVersion : echo 10.10' stub gcc '--version : echo 4.2.1' @@ -36,7 +45,7 @@ DEF assert_success assert_output <&2 + return 1 + fi echo "$output" | $(type -p ggrep grep | head -1) -F "$expected" >/dev/null || { { echo "expected output to contain $expected" echo "actual: $output"