Files
asdf-php/bin/install
2020-11-30 01:04:40 +09:00

308 lines
8.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
install_php() {
local install_type=$1
local version=$2
local install_path=$3
if [ "$TMPDIR" = "" ]; then
local tmp_download_dir=$(mktemp -d)
else
local tmp_download_dir=${TMPDIR%/}
fi
local source_path=$(get_download_file_path $install_type $version $tmp_download_dir)
local configure_options="$(construct_configure_options $install_path)"
local make_flags="-j$ASDF_CONCURRENCY"
download_source $install_type $version $source_path
# Running this in a subshell because we don't to disturb the current
# working directory.
(
cd $(dirname $source_path)
tar -zxf $source_path || exit 1
cd $(untar_path $install_type $version $tmp_download_dir)
# Target is OS-specific
# target=$(get_target)
# Build PHP
./buildconf --force || exit 1
./configure $configure_options || exit 1
make "$make_flags" || exit 1
# make "$make_flags" test || exit 1
make "$make_flags" install || exit 1
)
}
install_composer() {
local bin_path=$1/bin
local expected_signature="$(curl -sL https://composer.github.io/installer.sig)"
$bin_path/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$bin_path/php -r "if (hash_file('sha384', 'composer-setup.php') === '${expected_signature}') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$bin_path/php composer-setup.php --install-dir=$bin_path --filename=composer
$bin_path/php -r "unlink('composer-setup.php');"
}
construct_configure_options() {
local install_path=$1
global_config="--prefix=$install_path \
--enable-bcmath \
--enable-calendar \
--enable-dba \
--enable-exif \
--enable-fpm \
--enable-ftp \
--enable-gd \
--enable-gd-native-ttf \
--enable-intl \
--enable-mbregex \
--enable-mbstring \
--enable-mysqlnd \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--enable-zip \
--sysconfdir=$install_path \
--with-config-file-path=$install_path \
--with-config-file-scan-dir=$install_path/conf.d \
--with-curl \
--with-external-gd \
--with-fpm-group=www-data \
--with-fpm-user=www-data \
--with-gd \
--with-mhash \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pdo-pgsql \
--with-xmlrpc \
--with-zip \
--with-zlib \
--without-snmp"
if [ "$PHP_CONFIGURE_OPTIONS" = "" ]; then
local configure_options="$(os_based_configure_options) $global_config"
else
local configure_options="$PHP_CONFIGURE_OPTIONS $global_config"
fi
if [ "${PHP_WITH_GMP:-no}" != "no" ]; then
configure_options="$configure_options --with-gmp"
else
configure_options="$configure_options --without-gmp"
fi
if [ "${PHP_WITHOUT_PEAR:-no}" != "no" ]; then
configure_options="$configure_options --without-pear"
else
configure_options="$configure_options --with-pear"
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 freetype_path=$(homebrew_package_path freetype)
local bison27_path=$(homebrew_package_path bison@2.7)
local gettext_path=$(homebrew_package_path gettext)
local icu4c_path=$(homebrew_package_path icu4c)
local webp_path=$(homebrew_package_path webp)
local jpeg_path=$(homebrew_package_path jpeg)
local libpng_path=$(homebrew_package_path libpng)
local openssl_path=$(homebrew_package_path openssl)
local libxml2_path=$(homebrew_package_path libxml2)
local zlib_path=$(homebrew_package_path zlib)
local readline_path=$(homebrew_package_path readline)
local libedit_path=$(homebrew_package_path libedit)
local iconv_path=$(homebrew_package_path libiconv)
local bzip2_path=$(homebrew_package_path bzip2)
local libzip_path=$(homebrew_package_path libzip)
if [ "$freetype_path" = "" ]; then
export ASDF_PKG_MISSING="freetype"
else
configure_options="--with-freetype-dir=$freetype_path"
fi
if [ "$bison27_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING bison27"
fi
if [ "$gettext_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING gettext"
else
configure_options="$configure_options --with-gettext=$gettext_path"
fi
if [ "$icu4c_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING icu4c"
else
configure_options="$configure_options --with-icu-dir=$icu4c_path"
fi
if [ "$jpeg_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING jpeg"
else
configure_options="$configure_options --with-jpeg-dir=$jpeg_path"
fi
if [ "$webp_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING webp"
else
configure_options="$configure_options --with-webp-dir=$webp_path"
fi
if [ "$libpng_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING libpng"
else
configure_options="$configure_options --with-png-dir=$libpng_path"
fi
if [ "$openssl_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING openssl"
else
configure_options="$configure_options --with-openssl=$openssl_path"
fi
if [ "$libxml2_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING libxml2"
else
configure_options="$configure_options --with-libxml-dir=$libxml2_path"
fi
if [ "$zlib_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING zlib"
else
configure_options="$configure_options --with-zlib-dir=$zlib_path"
fi
if [ "$libzip_path" != "" ]; then
configure_options="$configure_options --with-libzip=$libzip_path"
fi
if [ "$readline_path" != "" ]; then
configure_options="$configure_options --with-readline=$readline_path"
fi
if [ "$libedit_path" != "" ]; then
configure_options="$configure_options --with-libedit=$libedit_path"
fi
if [ "$bzip2_path" != "" ]; then
configure_options="$configure_options --with-bz2=$bzip2_path"
fi
if [ "$iconv_path" != "" ]; then
configure_options="$configure_options --with-iconv=$iconv_path"
else
configure_options="$configure_options --without-iconv"
fi
else
local jpeg_path=$(locate libjpeg.so | awk '{ print length(), $0 | "sort -n" }' | cut -d" " -f2- | head -n 1)
local libpng_path=$(locate libpng.so | awk '{ print length(), $0 | "sort -n" }' | cut -d" " -f2- | head -n 1)
configure_options="--with-openssl --with-curl --with-zlib --with-readline --with-gettext"
if [ "$jpeg_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING jpeg"
else
configure_options="$configure_options --with-jpeg-dir=$jpeg_path --with-jpeg"
fi
if [ "$libpng_path" = "" ]; then
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING libpng"
else
configure_options="$configure_options --with-png-dir=$libpng_path --with-png"
fi
fi
echo $configure_options
}
download_source() {
local install_type=$1
local version=$2
local download_path=$3
local download_url=$(get_download_url $install_type $version)
# curl -Lo $download_path -C - $download_url
curl -Lo $download_path $download_url
}
get_download_file_path() {
local install_type=$1
local version=$2
local tmp_download_dir=$3
local php_version=$(get_php_version $version)
local pkg_name="php-${php_version}.tar.gz"
echo "$tmp_download_dir/$pkg_name"
}
untar_path() {
local install_type=$1
local version=$2
local tmp_download_dir=$3
local php_version=$(get_php_version $version)
local dir_name="php-src-php-${php_version}"
echo "$tmp_download_dir/$dir_name"
}
get_download_url() {
local install_type=$1
local version=$2
echo "https://github.com/php/php-src/archive/php-${version}.tar.gz"
}
get_php_version() {
IFS='-' read -a version_info <<<"$1"
if [ "${#version_info[@]}" -eq 1 ]; then
echo "${version_info[0]}"
else
echo "${version_info[0]}-${version_info[1]}"
fi
}
install_php $ASDF_INSTALL_TYPE $ASDF_INSTALL_VERSION $ASDF_INSTALL_PATH
install_composer $ASDF_INSTALL_PATH