asdf-python/bin/install

131 lines
3.1 KiB
Text
Raw Normal View History

2016-04-24 10:28:48 +01:00
#!/usr/bin/env bash
install_python() {
local version=$1
local install_path=$2
if [ "$TMPDIR" = "" ]; then
local tmp_download_dir=$(mktemp -d)
else
local tmp_download_dir=$TMPDIR
fi
# path to the tar file
local source_path="${tmp_download_dir}/Python-${version}.tgz"
2016-06-12 08:40:41 +01:00
echo "Downloading Python $version"
local full_version=$(download_source $version $source_path)
2016-04-24 10:28:48 +01:00
# 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
2016-06-12 08:40:41 +01:00
cd $full_version
2016-04-24 10:28:48 +01:00
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
2016-07-01 08:41:58 +01:00
ASDF_CONCURRENCY="${ASDF_CONCURRENCY:-1}"
2016-04-24 10:28:48 +01:00
echo "Building with options: $configure_options"
./configure $configure_options || exit 1
2016-07-01 08:41:58 +01:00
make -j $ASDF_CONCURRENCY || exit 1
make -j $ASDF_CONCURRENCY install || exit 1
2016-04-24 10:28:48 +01:00
)
}
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
2016-06-12 08:40:41 +01:00
local download_base_url="https://www.python.org/ftp/python/$version/"
2016-04-24 10:28:48 +01:00
2016-06-12 08:40:41 +01:00
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"
2016-04-24 10:28:48 +01:00
if [ -f $download_path ]; then
rm $download_path
fi
curl -#Lo $download_path $download_url
2016-06-12 08:40:41 +01:00
echo "$full_version" | sed -e 's/\.tgz//'
2016-04-24 10:28:48 +01:00
}
install_python $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH