dev-lang/php: drop 8.3.24

I'm noticing now that we should have stabilized 8.3.23, since it was a
security release, which means that we should probably stabilize
8.3.24... but the ChangeLog for 8.3.25 has some entries that look
suspiciously like security fixes (use after free, segfaulting match on
user input) so I guess we can insta-stable that one instead.

Closes: https://github.com/gentoo/gentoo/pull/43602
Signed-off-by: Michael Orlitzky <mjo@gentoo.org>
This commit is contained in:
Michael Orlitzky 2025-08-30 08:03:25 -04:00
parent 444d7c3a8d
commit 9f04e2a55c
No known key found for this signature in database
GPG Key ID: 6F48D3DA05C2DADB
2 changed files with 0 additions and 803 deletions

View File

@ -2,6 +2,5 @@ DIST php-8.2.24.tar.xz 12110000 BLAKE2B 0f5c47350b8914f87cfbee932ea2e24d29635a0b
DIST php-8.2.28.tar.xz 12147756 BLAKE2B eb2c5ad888f98b217d553efaa5f9832c791d7dcb73e90c1f0a45b536f3cbfd8f76c0606f993ca39492e43f587f5c0be1f1adac80c3ae7281527b8b381176f3bb SHA512 af2a4f43da756a78f762dbd2b9e589e52864c7069fd55a6a2b900e32a08728a7d69b80577dc79b5d4a86993846a2232b809b75ae415344935610a3934b10c6ba
DIST php-8.2.29.tar.xz 12162364 BLAKE2B 5750dde1e75e0886fb583c4571f3802fc8d6ae30848fa5e423838e612b65414af05a6354896a86f35ebde292ad3b6c171c8f42cda85ea79216743194153112b9 SHA512 36d389e43a9d6bdc558f5e949f54e126c6fd4bf00da572e061e4e4c2f62ffeb292a34371486d3a64b85ab4a18678f7d84b2e3628e0ddc723a7757e90fecdbf92
DIST php-8.3.21.tar.xz 12565664 BLAKE2B d5015a6b87bedb6ad6fd8a5dcb9ed6b67f3a525b29418f1f9b1c358ce1b8323002f60f41ff74b6a515d8cf5141ea2650ba6965fe2141a5d9b423ddd93025f051 SHA512 63ab270ef6fde033245e134ba7c1824b7e449a667ab7a6ffe001e18b7fc26218eefe55959b8be9093c35fd6437175244c40f3e4efe72478fe7819573bb4973b2
DIST php-8.3.24.tar.xz 12579100 BLAKE2B 44c7ecca21a43b4e12c9df67b020f949130b188ada09d58d451c7647681c2f6bdad831edfa392a46f881bdabf409673234995d85e5498bc84fc16e7361122bed SHA512 c4a59e04bcbca45e7727ccac33d968a5e4270b90ba5614d63447059d738c1e1ba3715d991b23fea9dd2905d70e0a367fa1fd06a277ccf6f4824b1552bc5fb1b4
DIST php-8.3.25.tar.xz 12583528 BLAKE2B da8218eb1e21bfba39c715a00dcffb7376aba0e1c04a189fff46dd452b9794525c0dbb68dad60ca820c56daf48ee8b365c28ef27cf694f3e57e10628a59a30aa SHA512 4853c3bcced4aa791fb3f08b8e3d20a9f83cdb00757a3e500247b0da98a5156c31fa73b9cde3c3773e17129ab931573d086c766177cb882c217d8af1b48e719f
DIST php-8.4.12.tar.xz 13636100 BLAKE2B 087c5cdb154f2aa334100fad3e67dd3656d4b56a9b31a6032ca6872b65d88abceb41acbe2ddce464e276fea0e4344c28b6453a80e41b453fe1091517edd54dbb SHA512 653b181a9e9fb6dd42bc56e33b7bf049865906416e0089b23dd6b8f78f129ad86cdf9ec97381f3d0ec7bd5c1477571159021216b4dafbeb955b80ec0f06743c0

View File

@ -1,802 +0,0 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
WANT_AUTOMAKE="none"
POSTGRES_COMPAT=( {15..17} )
inherit autotools flag-o-matic multilib postgres systemd
DESCRIPTION="The PHP language runtime engine"
HOMEPAGE="https://www.php.net/"
SRC_URI="https://www.php.net/distributions/${P}.tar.xz"
LICENSE="PHP-3.01
BSD
Zend-2.0
bcmath? ( LGPL-2.1+ )
fpm? ( BSD-2 )
unicode? ( BSD-2 LGPL-2.1 )"
SLOT="$(ver_cut 1-2)"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos"
# We can build the following SAPIs in the given order
SAPIS="embed cli cgi fpm apache2 phpdbg"
# SAPIs and SAPI-specific USE flags (cli SAPI is default on):
IUSE="${IUSE}
${SAPIS/cli/+cli}
threads"
IUSE="${IUSE} acl apparmor argon2 avif bcmath berkdb bzip2 calendar
capstone cdb +ctype curl debug
enchant exif ffi +fileinfo +filter
+flatfile ftp gd gdbm gmp +iconv imap inifile
intl iodbc ipv6 +jit jpeg kerberos ldap ldap-sasl libedit lmdb
mhash mssql mysql mysqli nls
odbc +opcache +opcache-jit pcntl pdo +phar +posix postgres png
qdbm readline selinux +session session-mm sharedmem
+simplexml snmp soap sockets sodium spell sqlite ssl
sysvipc systemd test tidy +tokenizer tokyocabinet truetype unicode
valgrind webp +xml xmlreader xmlwriter xpm xslt zip zlib"
# Without USE=readline or libedit, the interactive "php -a" CLI will hang.
REQUIRED_USE="
|| ( cli cgi fpm apache2 embed phpdbg )
cli? ( ^^ ( readline libedit ) )
!cli? ( ?? ( readline libedit ) )
gd? ( zlib )
simplexml? ( xml )
soap? ( xml )
xmlreader? ( xml )
xmlwriter? ( xml )
xslt? ( xml )
ldap-sasl? ( ldap )
qdbm? ( !gdbm )
session-mm? ( session !threads )
mysql? ( || ( mysqli pdo ) )
mssql? ( pdo )
test? ( cli )
postgres? ( ${POSTGRES_REQ_USE} )
"
RESTRICT="!test? ( test )"
# The supported (that is, autodetected) versions of BDB are listed in
# the ./configure script. Other versions *work*, but we need to stick to
# the ones that can be detected to avoid a repeat of bug #564824.
COMMON_DEPEND="
app-eselect/eselect-php[apache2?,fpm?]
dev-libs/libpcre2[jit?,unicode]
virtual/libcrypt:=
fpm? ( acl? ( sys-apps/acl ) apparmor? ( sys-libs/libapparmor ) selinux? ( sys-libs/libselinux ) )
apache2? ( www-servers/apache[apache2_modules_unixd(+),threads=] )
argon2? ( app-crypt/argon2:= )
berkdb? ( || ( sys-libs/db:5.3 sys-libs/db:4.8 ) )
bzip2? ( app-arch/bzip2:0= )
capstone? ( dev-libs/capstone )
cdb? ( || ( dev-db/cdb dev-db/tinycdb ) )
curl? ( net-misc/curl )
enchant? ( app-text/enchant:2 )
ffi? ( dev-libs/libffi:= )
gd? (
>=media-libs/gd-2.3.3-r4[avif?,jpeg?,png?,truetype?,webp?,xpm?]
)
gdbm? ( sys-libs/gdbm:0= )
gmp? ( dev-libs/gmp:0= )
iconv? ( virtual/libiconv )
imap? ( net-libs/c-client[kerberos=,ssl=] )
intl? ( dev-libs/icu:= )
kerberos? ( virtual/krb5 )
ldap? ( net-nds/openldap:= )
ldap-sasl? ( dev-libs/cyrus-sasl )
libedit? ( dev-libs/libedit )
lmdb? ( dev-db/lmdb:= )
mssql? ( dev-db/freetds[mssql] )
nls? ( sys-devel/gettext )
odbc? ( iodbc? ( dev-db/libiodbc ) !iodbc? ( dev-db/unixODBC ) )
postgres? ( ${POSTGRES_DEP} )
qdbm? ( dev-db/qdbm )
readline? ( sys-libs/readline:0= )
session-mm? ( dev-libs/mm )
snmp? ( net-analyzer/net-snmp )
sodium? ( dev-libs/libsodium:=[-minimal(-)] )
spell? ( app-text/aspell )
sqlite? ( dev-db/sqlite )
ssl? ( dev-libs/openssl:0= )
tidy? ( app-text/htmltidy )
tokyocabinet? ( dev-db/tokyocabinet )
truetype? ( media-libs/freetype )
unicode? ( dev-libs/oniguruma:= )
valgrind? ( dev-debug/valgrind )
xml? ( >=dev-libs/libxml2-2.12.5:= )
xslt? ( dev-libs/libxslt )
zip? ( dev-libs/libzip:= )
zlib? ( sys-libs/zlib:0= )
"
IDEPEND="app-eselect/eselect-php[apache2?,fpm?]"
RDEPEND="${COMMON_DEPEND}
virtual/mta
fpm? (
selinux? ( sec-policy/selinux-phpfpm )
systemd? ( sys-apps/systemd ) )"
# Bison isn't actually needed when building from a release tarball
# However, the configure script will warn if it's absent or if you
# have an incompatible version installed. See bug 593278.
DEPEND="${COMMON_DEPEND}
app-arch/xz-utils
sys-devel/bison"
BDEPEND="virtual/pkgconfig"
PATCHES=(
"${FILESDIR}/php-8.3.9-gd-cachevars.patch"
)
PHP_MV="$(ver_cut 1)"
# ARM/Windows functions (bug 923335)
QA_CONFIG_IMPL_DECL_SKIP=(
__crc32d
_controlfp
_controlfp_s
)
# Functions from alternate iconv implementations (bug 925268)
QA_CONFIG_IMPL_DECL_SKIP+=(
iconv_ccs_init
cstoccsid
)
php_install_ini() {
local phpsapi="${1}"
# work out where we are installing the ini file
php_set_ini_dir "${phpsapi}"
# Always install the production INI file, bug 611214.
local phpinisrc="php.ini-production-${phpsapi}"
cp php.ini-production "${phpinisrc}" || die
# Set the include path to point to where we want to find PEAR
# packages
local sed_src='^;include_path = ".:/php.*'
local include_path="."
include_path+=":${EPREFIX}/usr/share/php${PHP_MV}"
include_path+=":${EPREFIX}/usr/share/php"
local sed_dst="include_path = \"${include_path}\""
sed -e "s|${sed_src}|${sed_dst}|" -i "${phpinisrc}" || die
insinto "${PHP_INI_DIR#${EPREFIX}}"
newins "${phpinisrc}" php.ini
elog "Installing php.ini for ${phpsapi} into ${PHP_INI_DIR#${EPREFIX}}"
elog
dodir "${PHP_EXT_INI_DIR#${EPREFIX}}"
dodir "${PHP_EXT_INI_DIR_ACTIVE#${EPREFIX}}"
if use opcache; then
elog "Adding opcache to $PHP_EXT_INI_DIR"
echo "zend_extension = opcache.so" >> \
"${D}/${PHP_EXT_INI_DIR}"/opcache.ini
dosym "../ext/opcache.ini" \
"${PHP_EXT_INI_DIR_ACTIVE#${EPREFIX}}/opcache.ini"
fi
# SAPI-specific handling
if [[ "${sapi}" == "fpm" ]] ; then
einfo "Installing FPM config files php-fpm.conf and www.conf"
insinto "${PHP_INI_DIR#${EPREFIX}}"
doins sapi/fpm/php-fpm.conf
insinto "${PHP_INI_DIR#${EPREFIX}}/fpm.d"
doins sapi/fpm/www.conf
fi
dodoc php.ini-{development,production}
}
php_set_ini_dir() {
PHP_INI_DIR="${EPREFIX}/etc/php/${1}-php${SLOT}"
PHP_EXT_INI_DIR="${PHP_INI_DIR}/ext"
PHP_EXT_INI_DIR_ACTIVE="${PHP_INI_DIR}/ext-active"
}
pkg_setup() {
use postgres && postgres_pkg_setup
}
src_prepare() {
default
# In php-7.x, the FPM pool configuration files have been split off
# of the main config. By default the pool config files go in
# e.g. /etc/php-fpm.d, which isn't slotted. So here we move the
# include directory to a subdirectory "fpm.d" of $PHP_INI_DIR. Later
# we'll install the pool configuration file "www.conf" there.
php_set_ini_dir fpm
sed -i "s~^include=.*$~include=${PHP_INI_DIR}/fpm.d/*.conf~" \
sapi/fpm/php-fpm.conf.in \
|| die 'failed to move the include directory in php-fpm.conf'
# fails in a network sandbox,
#
# https://github.com/php/php-src/issues/11662
#
rm ext/sockets/tests/bug63000.phpt || die
# Tests ignoring the "-n" flag we pass to run-tests.php,
#
# https://github.com/php/php-src/pull/11669
#
rm ext/standard/tests/file/bug60120.phpt \
ext/standard/tests/general_functions/proc_open_null.phpt \
ext/standard/tests/general_functions/proc_open_redirect.phpt \
ext/standard/tests/general_functions/proc_open_sockets1.phpt \
ext/standard/tests/general_functions/proc_open_sockets2.phpt \
ext/standard/tests/general_functions/proc_open_sockets3.phpt \
ext/standard/tests/ini_info/php_ini_loaded_file.phpt \
sapi/cli/tests/016.phpt \
sapi/cli/tests/023.phpt \
sapi/cli/tests/bug65275.phpt \
sapi/cli/tests/bug74600.phpt \
sapi/cli/tests/bug78323.phpt \
|| die
# This is a memory usage test with hard-coded limits. Whenever the
# limits are surpassed... they get increased... but in the meantime,
# the tests fail. This is not really a test that end users should
# be running pre-install, in my opinion. Bug 927461.
rm ext/fileinfo/tests/bug78987.phpt || die
# Most tests failing with an external libgd have been fixed,
# but there are a few stragglers:
#
# * https://github.com/php/php-src/issues/11252
#
rm ext/gd/tests/bug43073.phpt \
ext/gd/tests/bug48732.phpt \
ext/gd/tests/bug48732-mb.phpt \
ext/gd/tests/bug48801.phpt \
ext/gd/tests/bug48801-mb.phpt \
ext/gd/tests/bug53504.phpt \
ext/gd/tests/bug65148.phpt \
ext/gd/tests/bug73272.phpt \
|| die
# One-off, somebody forgot to update a version constant
rm ext/reflection/tests/ReflectionZendExtension.phpt || die
eautoconf --force
}
src_configure() {
addpredict /usr/share/snmp/mibs/.index #nowarn
addpredict /var/lib/net-snmp/mib_indexes #nowarn
# https://bugs.gentoo.org/866683, https://bugs.gentoo.org/913527
filter-lto
PHP_DESTDIR="${EPREFIX}/usr/$(get_libdir)/php${SLOT}"
# Don't allow ./configure to detect and use an existing version
# of PHP; this can lead to all sorts of weird unpredictability
# as in bug 900210.
export ac_cv_prog_PHP=""
# The php-fpm config file wants localstatedir to be ${EPREFIX}/var
# and not the Gentoo default ${EPREFIX}/var/lib. See bug 572002.
local our_conf=(
--prefix="${PHP_DESTDIR}"
--mandir="${PHP_DESTDIR}/man"
--infodir="${PHP_DESTDIR}/info"
--libdir="${PHP_DESTDIR}/lib"
--with-libdir="$(get_libdir)"
--localstatedir="${EPREFIX}/var"
--without-pear
--without-valgrind
--with-external-libcrypt
$(use_enable threads zts)
)
# The slotted man/info pages will be missed by the default list of
# docompress paths.
docompress "${PHP_DESTDIR}/man" "${PHP_DESTDIR}/info"
our_conf+=(
$(use_with apparmor fpm-apparmor)
$(use_with argon2 password-argon2 "${EPREFIX}/usr")
$(use_enable bcmath)
$(use_with bzip2 bz2 "${EPREFIX}/usr")
$(use_enable calendar)
$(use_with capstone)
$(use_enable ctype)
$(use_with curl)
$(use_enable xml dom)
$(use_with enchant)
$(use_enable exif)
$(use_with ffi)
$(use_enable fileinfo)
$(use_enable filter)
$(use_enable ftp)
$(use_with nls gettext "${EPREFIX}/usr")
$(use_with gmp gmp "${EPREFIX}/usr")
$(use_with mhash mhash "${EPREFIX}/usr")
$(use_with iconv iconv \
$(use elibc_glibc || use elibc_musl || echo "${EPREFIX}/usr"))
$(use_enable intl)
$(use_enable ipv6)
$(use_with kerberos)
$(use_with xml libxml)
$(use_enable unicode mbstring)
$(use_with ssl openssl)
$(use_enable pcntl)
$(use_enable phar)
$(use_enable pdo)
$(use_enable opcache)
$(use_enable opcache-jit)
$(use_with postgres pgsql "$("${PG_CONFIG:-true}" --bindir)/..")
$(use_enable posix)
$(use_with selinux fpm-selinux)
$(use_with spell pspell "${EPREFIX}/usr")
$(use_enable simplexml)
$(use_enable sharedmem shmop)
$(use_with snmp snmp "${EPREFIX}/usr")
$(use_enable soap)
$(use_enable sockets)
$(use_with sodium)
$(use_with sqlite sqlite3)
$(use_enable sysvipc sysvmsg)
$(use_enable sysvipc sysvsem)
$(use_enable sysvipc sysvshm)
$(use_with tidy tidy "${EPREFIX}/usr")
$(use_enable tokenizer)
$(use_enable xml)
$(use_enable xmlreader)
$(use_enable xmlwriter)
$(use_with xslt xsl)
$(use_with zip)
$(use_with zlib zlib "${EPREFIX}/usr")
$(use_enable debug)
$(use_with valgrind)
)
# Override autoconf cache variables for libcrypt algorithms.These
# otherwise cannot be detected when cross-compiling. Bug 931884.
our_conf+=(
ac_cv_crypt_blowfish=yes
ac_cv_crypt_des=yes
ac_cv_crypt_ext_des=yes
ac_cv_crypt_md5=yes
ac_cv_crypt_sha512=yes
ac_cv_crypt_sha256=yes
)
# DBA support
if use cdb || use berkdb || use flatfile || use gdbm || use inifile \
|| use qdbm || use lmdb || use tokyocabinet ; then
our_conf+=( "--enable-dba" )
fi
# DBA drivers support
our_conf+=(
$(use_with cdb)
$(use_with berkdb db4 "${EPREFIX}/usr")
$(use_enable flatfile)
$(use_with gdbm gdbm "${EPREFIX}/usr")
$(use_enable inifile)
$(use_with qdbm qdbm "${EPREFIX}/usr")
$(use_with tokyocabinet tcadb "${EPREFIX}/usr")
$(use_with lmdb lmdb "${EPREFIX}/usr")
)
# Use the system copy of GD. The autoconf cache variable overrides
# allow cross-compilation to proceed since the corresponding
# features cannot be detected by running a program.
our_conf+=(
$(use_enable gd gd)
$(use_with gd external-gd)
php_cv_lib_gd_gdImageCreateFromAvif=$(usex avif)
php_cv_lib_gd_gdImageCreateFromBmp=yes
php_cv_lib_gd_gdImageCreateFromJpeg=$(usex jpeg)
php_cv_lib_gd_gdImageCreateFromPng=$(usex png)
php_cv_lib_gd_gdImageCreateFromTga=yes
php_cv_lib_gd_gdImageCreateFromWebp=$(usex webp)
php_cv_lib_gd_gdImageCreateFromXpm=$(usex xpm)
)
# IMAP support
if use imap ; then
our_conf+=(
$(use_with imap imap "${EPREFIX}/usr")
$(use_with ssl imap-ssl "${EPREFIX}/usr")
)
fi
# LDAP support
if use ldap ; then
our_conf+=(
$(use_with ldap ldap "${EPREFIX}/usr")
$(use_with ldap-sasl)
)
fi
# MySQL support
our_conf+=( $(use_with mysqli) )
local mysqlsock="${EPREFIX}/var/run/mysqld/mysqld.sock"
if use mysql || use mysqli ; then
our_conf+=( $(use_with mysql mysql-sock "${mysqlsock}") )
fi
# ODBC support
if use odbc && use iodbc ; then
# Obtain the correct -l and -I flags for the actual build from
# pkg-config. We use the "generic" library type to avoid the
# (wrong) hard-coded include dir for iodbc.
#
# We set the pdo_odbc_def_incdir variable because the
# ./configure script checks for the headers using "test -f" and
# ignores your CFLAGS... and pdo_odbc_def_libdir prevents the
# build system from appending a nonsense -L flag.
local iodbc_ldflags=$(pkg-config --libs libiodbc)
local iodbc_cflags=$(pkg-config --cflags libiodbc)
our_conf+=(
pdo_odbc_def_libdir="${EPREFIX}/usr/$(get_libdir)"
pdo_odbc_def_incdir="${EPREFIX}/usr/include/iodbc"
--without-unixODBC
--with-iodbc
$(use_with pdo pdo-odbc "generic,,iodbc,${iodbc_ldlags},${iodbc_cflags}")
)
elif use odbc ; then
our_conf+=(
--with-unixODBC="${EPREFIX}/usr"
--without-iodbc
$(use_with pdo pdo-odbc "unixODBC,${EPREFIX}/usr")
)
else
our_conf+=(
--without-unixODBC
--without-iodbc
--without-pdo-odbc
)
fi
# PDO support
if use pdo ; then
our_conf+=(
$(use_with mssql pdo-dblib "${EPREFIX}/usr")
$(use_with mysql pdo-mysql "mysqlnd")
$(use_with postgres pdo-pgsql)
$(use_with sqlite pdo-sqlite)
)
fi
# readline/libedit support
our_conf+=(
$(use_with readline readline "${EPREFIX}/usr")
$(use_with libedit)
)
# Session support
if use session ; then
our_conf+=( $(use_with session-mm mm "${EPREFIX}/usr") )
else
our_conf+=( $(use_enable session) )
fi
# Use pic for shared modules such as apache2's mod_php
our_conf+=( --with-pic )
# we use the system copy of pcre
# --with-external-pcre affects ext/pcre
our_conf+=(
--with-external-pcre
$(use_with jit pcre-jit)
)
# Catch CFLAGS problems
# Fixes bug #14067.
# Changed order to run it in reverse for bug #32022 and #12021.
replace-cpu-flags "k6*" "i586"
# Cache the ./configure test results between SAPIs.
our_conf+=( --cache-file="${T}/config.cache" )
# Support user-passed configuration parameters
our_conf+=( ${EXTRA_ECONF:-} )
# Support the Apache2 extras, they must be set globally for all
# SAPIs to work correctly, especially for external PHP extensions
# Create separate build trees for each enabled SAPI. The upstream
# build system doesn't do this, but we have to do it to use a
# different php.ini for each SAPI (see --with-config-file-path and
# --with-config-file-scan-dir below). The path winds up define'd
# in main/build-defs.h which is included in main/php.h which is
# included by basically everything; so, avoiding a rebuild after
# changing it is not an easy job.
#
# The upstream build system also does not support building the
# apache2 and embed SAPIs at the same time, presumably because they
# both produce a libphp.so.
local one_sapi
local sapi
mkdir "${WORKDIR}/sapis-build" || die
for one_sapi in $SAPIS ; do
use "${one_sapi}" || continue
php_set_ini_dir "${one_sapi}"
# The BUILD_DIR variable is used to determine where to output
# the files that autotools creates. This was all originally
# based on the autotools-utils eclass.
BUILD_DIR="${WORKDIR}/sapis-build/${one_sapi}"
cp -a "${S}" "${BUILD_DIR}" || die
local sapi_conf=(
--with-config-file-path="${PHP_INI_DIR}"
--with-config-file-scan-dir="${PHP_EXT_INI_DIR_ACTIVE}"
)
for sapi in $SAPIS ; do
case "$sapi" in
cli|cgi|embed|fpm|phpdbg)
if [[ "${one_sapi}" == "${sapi}" ]] ; then
sapi_conf+=( "--enable-${sapi}" )
if [[ "fpm" == "${sapi}" ]] ; then
sapi_conf+=(
$(use_with acl fpm-acl)
$(use_with systemd fpm-systemd)
)
fi
else
sapi_conf+=( "--disable-${sapi}" )
fi
;;
apache2)
if [[ "${one_sapi}" == "${sapi}" ]] ; then
sapi_conf+=( --with-apxs2="${EPREFIX}/usr/bin/apxs" )
else
sapi_conf+=( --without-apxs2 )
fi
;;
esac
done
# Construct the $myeconfargs array by concatenating $our_conf
# (the common args) and $sapi_conf (the SAPI-specific args).
local myeconfargs=( "${our_conf[@]}" )
myeconfargs+=( "${sapi_conf[@]}" )
pushd "${BUILD_DIR}" > /dev/null || die
einfo "Running econf in ${BUILD_DIR}"
econf "${myeconfargs[@]}"
popd > /dev/null || die
done
}
src_compile() {
# snmp seems to run during src_compile, too (bug #324739)
addpredict /usr/share/snmp/mibs/.index #nowarn
addpredict /var/lib/net-snmp/mib_indexes #nowarn
local sapi
for sapi in ${SAPIS} ; do
use "${sapi}" && emake -C "${WORKDIR}/sapis-build/${sapi}"
done
}
src_install() {
# see bug #324739 for what happens when we don't have that
addpredict /usr/share/snmp/mibs/.index #nowarn
# grab the first SAPI that got built and install common files from there
local first_sapi="", sapi=""
for sapi in $SAPIS ; do
if use $sapi ; then
first_sapi=$sapi
break
fi
done
# Install SAPI-independent targets
cd "${WORKDIR}/sapis-build/$first_sapi" || die
emake INSTALL_ROOT="${D}" \
install-build install-headers install-programs
use opcache && emake INSTALL_ROOT="${D}" install-modules
# Create the directory where we'll put version-specific php scripts
keepdir "/usr/share/php${PHP_MV}"
local sapi_list=""
for sapi in ${SAPIS}; do
if use "${sapi}" ; then
einfo "Installing SAPI: ${sapi}"
cd "${WORKDIR}/sapis-build/${sapi}" || die
if [[ "${sapi}" == "apache2" ]] ; then
# We're specifically not using emake install-sapi as libtool
# may cause unnecessary relink failures (see bug #351266)
insinto "${PHP_DESTDIR#${EPREFIX}}/apache2/"
newins ".libs/libphp$(get_libname)" \
"libphp${PHP_MV}$(get_libname)"
keepdir "/usr/$(get_libdir)/apache2/modules"
else
# needed each time, php_install_ini would reset it
local dest="${PHP_DESTDIR#${EPREFIX}}"
into "${dest}"
case "$sapi" in
cli)
source="sapi/cli/php"
# Install the "phar" archive utility.
if use phar ; then
emake INSTALL_ROOT="${D}" install-pharcmd
dosym "..${dest#/usr}/bin/phar" "/usr/bin/phar${SLOT}"
fi
;;
cgi)
source="sapi/cgi/php-cgi"
;;
fpm)
source="sapi/fpm/php-fpm"
;;
embed)
source="libs/libphp$(get_libname)"
;;
phpdbg)
source="sapi/phpdbg/phpdbg"
;;
*)
die "unhandled sapi in src_install"
;;
esac
if [[ "${source}" == *"$(get_libname)" ]]; then
dolib.so "${source}"
else
dobin "${source}"
local name="$(basename ${source})"
dosym "..${dest#/usr}/bin/${name}" "/usr/bin/${name}${SLOT}"
fi
fi
php_install_ini "${sapi}"
# construct correct SAPI string for php-config
# thanks to ferringb for the bash voodoo
if [[ "${sapi}" == "apache2" ]]; then
sapi_list="${sapi_list:+${sapi_list} }apache2handler"
else
sapi_list="${sapi_list:+${sapi_list} }${sapi}"
fi
fi
done
# Install env.d files
newenvd "${FILESDIR}/20php5-envd" "20php${SLOT}"
sed -e "s|/lib/|/$(get_libdir)/|g" -i "${ED}/etc/env.d/20php${SLOT}" || die
sed -e "s|php5|php${SLOT}|g" -i "${ED}/etc/env.d/20php${SLOT}" || die
# set php-config variable correctly (bug #278439)
sed -e "s:^\(php_sapis=\)\".*\"$:\1\"${sapi_list}\":" -i \
"${ED}/usr/$(get_libdir)/php${SLOT}/bin/php-config" || die
if use fpm ; then
if use systemd; then
systemd_newunit "${FILESDIR}/php-fpm_at.service" \
"php-fpm@${SLOT}.service"
else
systemd_newunit "${FILESDIR}/php-fpm_at-simple.service" \
"php-fpm@${SLOT}.service"
fi
fi
}
src_test() {
export TEST_PHP_EXECUTABLE="${WORKDIR}/sapis-build/cli/sapi/cli/php"
# Sometimes when the sub-php launches a sub-sub-php, it uses these.
# Without an "-n" in all instances, the *live* php.ini can be loaded,
# pulling in *live* zend extensions. And those can be incompatible
# with the thing we just built.
export TEST_PHP_EXTRA_ARGS="-n"
if [[ -x "${WORKDIR}/sapis-build/cgi/sapi/cgi/php-cgi" ]] ; then
export TEST_PHP_CGI_EXECUTABLE="${WORKDIR}/sapis-build/cgi/sapi/cgi/php-cgi"
fi
if [[ -x "${WORKDIR}/sapis-build/phpdbg/sapi/phpdbg/phpdbg" ]] ; then
export TEST_PHPDBG_EXECUTABLE="${WORKDIR}/sapis-build/phpdbg/sapi/phpdbg/phpdbg"
fi
# The IO capture tests need to be disabled because they fail when
# std{in,out,err} are redirected (as they are within portage).
#
# One -n applies to the top-level "php", while the other applies
# to any sub-php that get invoked by the test runner.
SKIP_IO_CAPTURE_TESTS=1 SKIP_PERF_SENSITIVE=1 REPORT_EXIT_STATUS=1 \
"${TEST_PHP_EXECUTABLE}" -n \
"${WORKDIR}/sapis-build/cli/run-tests.php" --offline -n -q \
-d "session.save_path=${T}" \
|| die "tests failed"
}
pkg_postinst() {
# Output some general info to the user
if use apache2 ; then
elog
elog "To enable PHP in apache, you will need to add \"-D PHP\" to"
elog "your apache2 command. OpenRC users can append that string to"
elog "APACHE2_OPTS in /etc/conf.d/apache2."
elog
elog "The apache module configuration file 70_mod_php.conf is"
elog "provided (and maintained) by eselect-php."
elog
fi
# Create the symlinks for php
local m
for m in ${SAPIS}; do
[[ ${m} == 'embed' ]] && continue;
if use $m ; then
local ci=$(eselect php show $m)
if [[ -z $ci ]]; then
eselect php set $m php${SLOT} || die
einfo "Switched ${m} to use php:${SLOT}"
einfo
elif [[ $ci != "php${SLOT}" ]] ; then
elog "To switch $m to use php:${SLOT}, run"
elog " eselect php set $m php${SLOT}"
elog
fi
fi
done
# Remove dead symlinks for SAPIs that were just disabled. For
# example, if the user has the cgi SAPI enabled, then he has an
# eselect-php symlink for it. If he later reinstalls PHP with
# USE="-cgi", that symlink will break. This call to eselect is
# supposed to remove that dead link per bug 572436.
eselect php cleanup || die
if ! has "php${SLOT/./-}" ${PHP_TARGETS}; then
elog "To build extensions for this version of PHP, you will need to"
elog "add php${SLOT/./-} to your PHP_TARGETS USE_EXPAND variable."
elog
fi
# Warn about the removal of PHP_INI_VERSION if the user has it set.
if [[ -n "${PHP_INI_VERSION}" ]]; then
ewarn 'The PHP_INI_VERSION variable has been phased out. You may'
ewarn 'remove it from your configuration at your convenience. See'
ewarn
ewarn ' https://bugs.gentoo.org/611214'
ewarn
ewarn 'for more information.'
fi
elog "For details on how version slotting works, please see"
elog "the wiki:"
elog
elog " https://wiki.gentoo.org/wiki/PHP"
elog
}
pkg_postrm() {
# This serves two purposes. First, if we have just removed the last
# installed version of PHP, then this will remove any dead symlinks
# belonging to eselect-php. Second, if a user upgrades slots from
# (say) 5.6 to 7.0 and depcleans the old slot, then this will update
# his existing symlinks to point to the new 7.0 installation. The
# latter is bug 432962.
#
# Note: the eselect-php package may not be installed at this point,
# so we can't die() if this command fails.
eselect php cleanup
}