mirror of
https://github.com/jlengrand/asdf-php.git
synced 2026-03-10 08:01:22 +00:00
It's handy to have Composer as package manager out of the box with PHP. Signed-off-by: Alexandre Eher <alexandre@eher.com.br>
240 lines
7.2 KiB
Bash
Executable File
240 lines
7.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o 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)"
|
|
|
|
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 || exit 1
|
|
# make test || exit 1
|
|
make install || exit 1
|
|
)
|
|
}
|
|
|
|
install_composer() {
|
|
local bin_path=$1/bin
|
|
|
|
$bin_path/php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
|
$bin_path/php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { 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 --sysconfdir=$install_path --with-config-file-path=$install_path --with-config-file-scan-dir=$install_path/conf.d --enable-bcmath --enable-calendar --enable-dba --enable-exif --enable-ftp --enable-gd-native-ttf --enable-intl --enable-mbregex --enable-mbstring --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zip --with-gd --with-libedit --with-mhash --with-xmlrpc --with-curl --without-gmp --without-snmp --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd --enable-pcntl --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data"
|
|
|
|
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_WITHOUT_PEAR:-no}" != "no" ]; then
|
|
configure_options="$configure_options --without-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 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 iconv_path=$(homebrew_package_path libiconv)
|
|
|
|
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 [ "$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 [ "$readline_path" != "" ]; then
|
|
configure_options="$configure_options --with-readline=$readline_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 | head -n 1)
|
|
local libpng_path=$(locate libpng.so | 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"
|
|
fi
|
|
|
|
if [ "$libpng_path" = "" ]; then
|
|
export ASDF_PKG_MISSING="$ASDF_PKG_MISSING libpng"
|
|
else
|
|
configure_options="$configure_options --with-png-dir=$libpng_path"
|
|
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
|