diff --git a/README.md b/README.md index 4af3c34..32cea82 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ asdf plugin-add python https://github.com/tuvistavie/asdf-python.git Check [asdf](https://github.com/asdf-vm/asdf) readme for instructions on how to install & manage versions of Python. -When installing Python using `asdf install`, you can pass custom configure options with the following env vars: - -* `PYTHON_CONFIGURE_OPTIONS` - use only your configure options -* `PYTHON_EXTRA_CONFIGURE_OPTIONS` - append these configure options along with ones that this plugin already uses +Under the hood, asdf-python uses [python-build](https://github.com/yyuu/pyenv/tree/master/plugins/python-build) +to build and install Python, check its [README](https://github.com/yyuu/pyenv/tree/master/plugins/python-build) +for more information about build options. diff --git a/bin/install b/bin/install index 78ed525..6d02b90 100755 --- a/bin/install +++ b/bin/install @@ -1,130 +1,27 @@ #!/usr/bin/env bash install_python() { - local version=$1 - local install_path=$2 + local version="$1" + local install_path="$2" - if [ "$TMPDIR" = "" ]; then - local tmp_download_dir=$(mktemp -d) - else - local tmp_download_dir=$TMPDIR - fi + local tmp_download_dir="$(mktemp -d -t asdf-python.XXX)" - # path to the tar file - local source_path="${tmp_download_dir}/Python-${version}.tgz" + echo "Downloading python-build..." + download_python_build $tmp_download_dir > /dev/null 2>&1 - echo "Downloading Python $version" - local full_version=$(download_source $version $source_path) + local python_build="$tmp_download_dir/pyenv/plugins/python-build/bin/python-build" - # running this in a subshell - # because we don't want to disturb current working dir - ( - cd $(dirname $source_path) - tar zxf $source_path || exit 1 - - cd $full_version - - local configure_options="$(construct_configure_options $install_path)" - - if [ "$ASDF_PKG_MISSING" != "" ]; then - echo "WARNING: Might use OS-provided pkgs for the following: $ASDF_PKG_MISSING" - fi - - # set in os_based_configure_options - # we unset it here because echo-ing changes the return value of the function - unset ASDF_PKG_MISSING - - ASDF_CONCURRENCY="${ASDF_CONCURRENCY:-1}" - - echo "Building with options: $configure_options" - - ./configure $configure_options || exit 1 - make -j $ASDF_CONCURRENCY || exit 1 - make -j $ASDF_CONCURRENCY install || exit 1 - ) + ASDF_CONCURRENCY="${ASDF_CONCURRENCY:-1}" + echo "python-build $version $install_path" + MAKE_OPTS="$MAKE_OPTS -j$ASDF_CONCURRENCY" TMP_DIR="$tmp_download_dir" $python_build $version $install_path + echo "Cleaning up" + rm -rf "$tmp_download_dir" } -construct_configure_options() { - local install_path=$1 - - if [ "$PYTHON_CONFIGURE_OPTIONS" = "" ]; then - local configure_options="$(os_based_configure_options) --prefix=$install_path" - - if [ "$PYTHON_EXTRA_CONFIGURE_OPTIONS" != "" ]; then - configure_options="$configure_options $PYTHON_EXTRA_CONFIGURE_OPTIONS" - fi - else - local configure_options="$PYTHON_CONFIGURE_OPTIONS --prefix=$install_path" - fi - - echo "$configure_options" -} - - -homebrew_package_path() { - local package_name=$1 - - if [ "$(brew ls --versions $package_name)" = "" ]; then - echo "" - else - echo "$(brew --prefix $package_name)" - fi -} - - -exit_if_homebrew_not_installed() { - if [ "$(brew --version 2>/dev/null)" = "" ]; then - echo "ERROR: Please install homebrew for OSX" - exit 1 - fi -} - - -os_based_configure_options() { - local operating_system=$(uname -a) - local configure_options="" - - if [[ "$operating_system" =~ "Darwin" ]]; then - - exit_if_homebrew_not_installed - - local openssl_path=$(homebrew_package_path openssl) - local readline_path=$(homebrew_package_path readline) - else - local openssl_path=/usr - fi - - if [ "$openssl_path" = "" ]; then - export ASDF_PKG_MISSING="openssl" - else - configure_options="--with-openssl-dir=$openssl_path" - fi - - if [ "$readline_path" != "" ]; then - configure_options="$configure_options --with-readline-dir=$readline_path" - fi - - configure_options="$configure_options --enable-shared --disable-install-doc" - echo $configure_options -} - - -download_source() { - local version=$1 - local download_path=$2 - local download_base_url="https://www.python.org/ftp/python/$version/" - - local full_version=$(curl -s $download_base_url | grep -Eo 'href="[^"]+.tgz' | head -n 1) - full_version=${full_version:6} - - local download_url="$download_base_url$full_version" - - if [ -f $download_path ]; then - rm $download_path - fi - - curl -#Lo $download_path $download_url - echo "$full_version" | sed -e 's/\.tgz//' +download_python_build() { + local tmp_dir="$1" + local pyenv_url="git://github.com/yyuu/pyenv.git" + git clone $pyenv_url $tmp_dir/pyenv } install_python $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH diff --git a/bin/list-all b/bin/list-all index 14a5fcf..843cd07 100755 --- a/bin/list-all +++ b/bin/list-all @@ -1,11 +1,17 @@ #!/usr/bin/env bash list_all() { - local http_endpoint="https://www.python.org/ftp/python/" - local extract_regexp='s| /dev/null 2>&1 + local python_build="$tmp_download_dir/pyenv/plugins/python-build/bin/python-build" + $python_build --definitions + rm -rf "$tmp_download_dir" +} - curl -s $http_endpoint | sed -E -ne "$extract_regexp" | grep -vE "^($black_list)$" | tr '\n' ' ' +download_python_build() { + local tmp_dir="$1" + local pyenv_url="git://github.com/yyuu/pyenv.git" + git clone $pyenv_url $tmp_dir/pyenv } list_all