Fix for php
Ken Brown
kbrown@cornell.edu
Tue Jul 21 21:24:48 GMT 2020
This is a follow-up to
https://sourceware.org/pipermail/cygwin/2020-July/245623.html
As I explained there, a patch applied to the Cygwin build causes php to often
call mmap with MAP_FIXED, and some of these calls fail. Removing the relevant
hunk of the patch fixes the reported problem, and I don't see any reason why
that hunk should be needed.
Obviously Yaakov had a reason for applying that hunk, and I'm guessing (hoping)
that the reason is no longer applicable.
Ideally, someone should ITA php and deal with this. That person will not be me.
I don't use php and I know nothing about it. If no one steps forward, I would
be willing to do a one-time non-maintainer upload.
I'm attaching the revised patch and a revised cygport file. (It's Yaakov's
cygport file, modified to account for the patch change, with a BUILD_REQUIRES
added.)
Ken
-------------- next part --------------
inherit httpd
NAME="php"
VERSION=7.3.7
RELEASE=2
CATEGORY="PHP"
SUMMARY="PHP Hypertext Preprocessor"
DESCRIPTION="PHP (recursive acronym for 'PHP: Hypertext Preprocessor')
is a widely-used Open Source general-purpose scripting language that is
especially suited for Web development and can be embedded into HTML."
HOMEPAGE="http://www.php.net/"
SRC_URI="http://www.php.net/distributions/php-${VERSION}.tar.xz"
SRC_URI+=" template-builtin.reg template-ext.reg php-fpm.init"
PATCH_URI="
fedora/php-7.2.0-includedir.patch
fedora/php-5.3.0-recode.patch
fedora/php-7.2.0-libdb.patch
fedora/php-7.3.3-systzdata-v18.patch
fedora/php-7.2.3-ldap_r.patch
fedora/php-7.3.0-phpize.patch
fedora/php-5.6.3-phpinfo.patch
fedora/php-5.6.3-datetests.patch
fedora/php-7.2.4-fixheader.patch
7.0.13-cygwin-build.patch
7.2.4-curl-ssl.patch
5.3.4-dba-gdbm_compat.patch
5.4.10-imap-cygwin.patch
7.2.5-intl-libstdc.patch
7.2.5-intl-icu61.patch
7.2.5-mbstring-onig.patch
5.3.4-pspell-libpspell.patch
5.3.10-sybase-cygwin.patch
7.3.3-posix-ttyname_r.patch
7.3.3-configure-implicit-decls.patch
5.4.20-libmbfl-implicit-decls.patch
5.6.6-fix-libtoolize.patch
5.6.9-apache2handler-zts.patch
7.0.17-pcre-jit-off.patch
7.3.7-malloc-cygwin.patch
7.2.4-zip-pcre.patch
"
# From https://sourceware.org/pipermail/cygwin/2017-May/232903.html,
# with some additions/corrections.
BUILD_REQUIRES=" \
httpd-devel \
libGL-devel \
libLASi-devel \
libapr1-devel \
libaprutil1-devel \
libargon2-devel \
libaspell-devel \
libattr-devel \
libc-client-devel \
libcroco0.6-devel \
libcurl-devel \
libedit-devel \
libenchant-devel \
libfam-devel \
libffi-devel \
libgd-devel \
libgdbm-devel \
libgnutls-devel \
libgs-devel \
libgtk2.0-devel \
libgts-devel \
libguile1.8-devel \
libguile2.0-devel \
libgvc-devel \
libhunspell-devel \
libicu-devel \
libidn2-devel \
libisl-devel \
libjasper-devel \
libkrb5-devel \
liblcms-devel \
liblmdb-devel \
libllvm-devel \
liblzo2-devel \
libmcrypt-devel \
libming-devel \
libmpc-devel \
libmpfr-devel \
libnghttp2-devel \
libnss-devel \
libonig-devel \
libopenjp2-devel \
libopenjpeg-devel \
libpcre2-devel \
libpng12-devel \
libpoppler-devel \
libpq-devel \
libpsl-devel \
libreadline-devel \
librsvg2-devel \
libsigsegv-devel \
libsodium-devel \
libsqlite3-devel \
libssh2-devel \
libsybdb-devel \
libthai-devel \
libtidy-devel \
libtxc_dxtn-devel \
libunistring-devel \
libvoikko-devel \
libwebp-devel \
libxslt-devel \
libzip-devel \
recode \
"
DIFF_EXCLUDES="aclocal.m4 configure generated_lists libtool.m4 lt*.m4 ltmain.sh php_config.h.in php_version.h tests zend_ini_parser.*"
# EXTENSIONS:
#
# The following modules are deps for others, and hence MUST be builtin:
# date: intl
# dom: xmlreader
# filter, hash, spl: (mandatory built-in)
# hash: phar, session
# libxml: dom, simplexml, soap, xml, xmlreader, xsl
# mysqlnd: mysqli, pdo_mysql (if configured to use mysqlnd)
# openssl: phar
# pcre: filter, opcache, spl, zip
# pdo: pdo_*
# readline: phpdbg
# session: hash, soap, wddx, memcache (PECL)
# xml: xmlrpc
# location of php.ini files
inidir=/etc/php.d
# required for all configure runs
common_args="
--cache-file=../config.cache
--libdir=/usr/lib/php
--datadir=/usr/share/php
--disable-static
--disable-rpath
--with-config-file-path=/etc
--with-config-file-scan-dir=${inidir}
--with-layout=GNU
--with-system-tzdata
--enable-dom=yes
--enable-filter=yes
--enable-hash=yes
--with-mhash
--enable-libxml=yes
--with-openssl=yes
--with-system-ciphers
--enable-pdo=yes
--with-readline=no
--with-libedit=yes
--enable-session=yes
--enable-xml=yes
--with-password-argon2=/usr
--with-libxml-dir=/usr
--with-openssl-dir=/usr
--with-pcre-dir=/usr
--with-pcre-regex=/usr
ac_cv_func_ttyname_r_works=yes
"
cli_args="
--without-pear
--enable-bcmath=shared
--with-bz2=shared,/usr
--enable-calendar=shared
--enable-ctype=shared
--with-curl=shared,/usr
--enable-dba=shared
--with-gdbm=/usr
--with-ndbm=/usr
--with-db4=/usr
--with-dbm=/usr
--with-lmdb=/usr
--with-cdb
--enable-inifile
--enable-flatfile
--with-enchant=shared,/usr
--enable-exif=shared
--enable-fileinfo=shared
--enable-ftp=shared
--with-gd=shared,/usr
--with-webp-dir=/usr
--with-jpeg-dir=/usr
--with-png-dir=/usr
--with-zlib-dir=/usr
--with-xpm-dir=/usr
--with-freetype-dir=/usr
--with-gettext=shared
--with-gmp=shared,/usr
--with-iconv=shared,/usr
--with-imap=shared,/usr
--with-kerberos=yes
--with-imap-ssl=yes
--with-interbase=no
--enable-json=shared
--with-ldap=shared,/usr
--with-ldap-sasl=/usr
--enable-intl=shared
--with-icu-dir=/usr
--enable-mbstring=shared
--with-onig=/usr
--enable-mbregex=yes
--enable-mbregex_backtrack=yes
--with-mysql-sock=/var/run/mysql.sock
--with-mysqli=shared,mysqlnd
--enable-embedded_mysqli=no
--with-oci8=no
--with-adabas=no
--with-sapdb=no
--with-solid=no
--with-ibm-db2=no
--with-ODBCRouter=no
--with-empress=no
--with-empress-bcs=no
--with-birdstep=no
--with-custom-odbc=no
--with-iodbc=shared,/usr
--with-esoob=no
--with-unixODBC=no
--with-dbmaker=no
--enable-opcache=shared
--enable-pcntl=no
--with-pdo-dblib=shared,/usr
--with-pdo-firebird=no
--with-pdo-mysql=shared,mysqlnd
--with-pdo-oci=no
--with-pdo-odbc=shared,iodbc,/usr
--with-pdo-pgsql=shared,/usr
--with-pdo-sqlite=shared,/usr
--with-pgsql=shared,/usr
--enable-phar=shared
--enable-posix=shared
--with-pspell=shared,/usr
--with-recode=shared,/usr
--with-mm=no
--enable-shmop=shared
--enable-simplexml=shared
--with-snmp=no
--enable-soap=shared
--with-sodium=shared,/usr
--with-sqlite3=shared,/usr
--enable-sockets=shared
--enable-sysvmsg=shared
--enable-sysvsem=shared
--enable-sysvshm=shared
--with-tidy=shared,/usr
--enable-tokenizer=shared
--enable-wddx=shared
--enable-xmlreader=shared
--with-xmlrpc=shared
--with-iconv-dir=/usr
--enable-xmlwriter=shared
--with-xsl=shared,/usr
--enable-zip=shared
--with-libzip=/usr
--with-zlib=shared
"
# packaging
#
PKG_NAMES="${NAME} ${NAME}-devel httpd-mod_php${VERSION%%.*}"
php_CATEGORY="Interpreters PHP"
# previously shared extensions moved into core, or obsolete
php_OBSOLETES="php-mcrypt php-readline php-session"
php_CONTENTS="
--exclude=${inidir#/}/*.ini
etc/defaults${HTTPD_SYSCONFDIR}/php7.conf
etc/defaults/etc/php*
${inidir#/}
etc/p*/php.sh
etc/rc.d/init.d/php-fpm
usr/bin/cygphp7-*.dll
usr/bin/php.exe
usr/bin/php-cgi.exe
usr/bin/phpdbg.exe
usr/sbin/php-fpm.exe
usr/share/doc/php/
usr/share/man/man1/php.1*
usr/share/man/man1/php-cgi.1*
usr/share/man/man1/phpdbg.1*
usr/share/man/man8/php-fpm.8*
usr/share/php/
usr/share/doc/pear/filter/CREDITS
usr/share/doc/pear/hash/CREDITS
usr/share/doc/pear/pdo/CREDITS
usr/share/doc/pear/readline/CREDITS
usr/share/doc/pear/session/CREDITS
var/lib/pear/.registry/.channel.*/filter.reg
var/lib/pear/.registry/.channel.*/hash.reg
var/lib/pear/.registry/.channel.*/pdo.reg
var/lib/pear/.registry/.channel.*/readline.reg
var/lib/pear/.registry/.channel.*/session.reg
var/lib/rebase/dynpath.d/php
"
php_devel_CATEGORY=${php_CATEGORY}
php_devel_REQUIRES="autoconf gcc-core make"
php_devel_CONTENTS="
usr/bin/php-config
usr/bin/phpize
usr/include/php/
usr/lib/libphp7.dll.a
usr/lib/php/build/
usr/share/man/man1/php-config.*
usr/share/man/man1/phpize.*
"
httpd_mod_php7_OBSOLETES="httpd-mod_php5"
httpd_mod_php7_CONTENTS="${HTTPD_SYSCONFMODULESDIR#/} ${HTTPD_LIBEXECDIR#/}"
httpd_mod_php7_SUMMARY="Embedded PHP for Apache HTTP Server"
# This method provides 50+ modules, so better automate this:
for ext in $(echo ${cli_args} | sed -e 's# #\n#g' | grep shared \
| sed -e 's#^--[a-z]*-##g' -e 's#=.*##g' -e 's#-#_#g' -e 's#[a-z]*odbc#odbc#')
do
PKG_NAMES+=" php-${ext}"
declare php_${ext}_CONTENTS="${inidir#/}/${ext}.ini
usr/lib/php/*/${ext}.dll
usr/share/doc/pear/${ext}/
var/lib/pear/.registry/.channel.*/${ext}.reg"
declare php_${ext}_SUMMARY="PHP ${ext} extension"
done
unset ext
php_phar_CONTENTS+=" usr/bin/phar* usr/share/man/man1/phar*"
# obsoleted by php7
php_debuginfo_OBSOLETES="php-jsonc-debuginfo"
php_json_OBSOLETES="php-jsonc"
php_mysqli_OBSOLETES="php-mysql"
php_pdo_dblib_OBSOLETES="php-mssql php-sybase_ct"
src_compile() {
cd ${S}
#
# autotoolize
#
rm -f build/libtool.m4
libtoolize --copy --force || error "libtoolize failed"
cat /usr/share/aclocal/libtool.m4 /usr/share/aclocal/lt{options,sugar,version,~obsolete}.m4 > build/libtool.m4
cygmake -j1 -B -f build/build.mk ZENDDIR="Zend"
# these are shipped and used by phpize
gnuconfigize .
# Hack to work around configure adding to hard-coded include_path
# only when bundled PEAR is enabled (we package it separately)
export PEAR_INSTALLDIR=/usr/share/pear
#
# build runtime and executable SAPIs (CLI, CGI, FPM)
#
mkdir -p ${B}/embed
cd ${B}/embed
CYGCONF_SOURCE="${S}" cygconf ${common_args} ${cli_args} \
--enable-cgi --enable-cli \
--enable-fpm --with-fpm-acl \
--enable-embed --enable-phpdbg
sed -e '/^LTCFLAGS=/d' -i libtool
sed -e 's/ -lphp7 / libphp7.la /g' -i Makefile
# first make the common sources library
# enabling zip with system libzip somehow clobbers -lpcre
cygmake libphp${VERSION%%.*}.la \
EXTRA_LDFLAGS="-release ${VERSION%.*} -avoid-version -module -no-undefined -lpcre2-8"
sed -e 's#link=yes#link=no#' -i libphp${VERSION%%.*}.la
# then make everything else
# c-client is static only so we need to circumvent libtool to link
cygmake -j1 \
IMAP_SHARED_LIBADD='-Wl,-lc-client,-lssl,-lcrypto,-lgssapi_krb5,-lkrb5' \
PHP_GLOBAL_OBJS='' \
ZEND_EXTRA_LIBS="${B}/embed/libphp${VERSION%%.*}.la"
#
# Apache2 mod_php7 SAPI
#
mkdir -p ${B}/apache2
cd ${B}/apache2
CYGCONF_SOURCE="${S}" cygconf \
--disable-all --disable-cli --with-apxs2=${HTTPD_APXS} ${common_args}
# the -a flag adds the module to httpd.conf
sed -e 's#-prefer-non-pic -static##g' \
-e 's#-prefer-pic##g' \
-e 's#-i -a -n#-i -n#g' \
-i Makefile
# HTTPD expects mods to have .so suffix on all platforms
cygmake libphp${VERSION%%.*}.la \
PHP_GLOBAL_OBJS='' \
ZEND_EXTRA_LIBS="${B}/embed/libphp${VERSION%%.*}.la"
}
src_test() {
export PATH="${B}/embed/.libs:$PATH"
cd ${B}/embed
cygmake -j1 test
}
src_install() {
local n sapi x xdir
# install the Apache SAPI
cd ${B}/apache2
cygmake -j1 install-sapi INSTALL_ROOT=${D} PHP_GLOBAL_OBJS=''
# install the other SAPIs, build environment, and everything else
cd ${B}/embed
cygmake -j1 install INSTALL_ROOT=${D} INSTALL_IT=
# install the shared lib (normally done by INSTALL_IT)
dobin libs/cygphp7-*.dll
dolib libs/libphp7.dll.a
# install the real executables, not the libtool stubs
cd ${B}
dobin embed/sapi/[cp]*/*.exe
dosbin embed/sapi/fpm/php-fpm.exe
# sanitize php-config
sed -e "s#^libs=.*#libs=\"-lphp${VERSION%%.*}\"#" \
-e 's#^php_sapis=.*#php_sapis="cli cgi embed fpm apache2handler"#' \
-i ${D}/usr/bin/php-config
# provide default php.ini
insinto /etc
newins ${S}/php.ini-production php.ini
make_etc_defaults /etc/php.ini
mv ${D}/etc/php-fpm.conf{.default,}
mv ${D}/etc/php-fpm.d/www.conf{.default,}
make_etc_defaults /etc/php-fpm.{conf,d}
exeinto /etc/rc.d/init.d
newexe ${S}/php-fpm.init php-fpm
# add .ini files for each extension, so that it's loaded once installed
local date=$(date +%F)
local time=$(date +%T)
local timestamp=$(date +%s)
local regdir=/var/lib/pear/.registry/.channel.pecl.php.net
local xdir=$(${D}/usr/bin/php-config --extension-dir)
local dll ext docdir path_len summary_len p
keepdir ${inidir}
dodir ${regdir}
for x in ${D}${xdir}/*.dll
do
dll=${x##*/}
ext=${dll%.dll}
docdir=/usr/share/doc/pear/${ext}
doc_len=$((${#docdir} + 8)) # /CREDITS
path_len=$((${#xdir} + ${#dll} + 1))
summary_len=$((${#ext} + 14)) # PHP ___ extension
# create .ini file for automatic extension loading
if $(${OBJDUMP} -p ${x} | grep -q zend_startup_module)
then
echo "zend_extension = ${xdir}/${dll}" >> ${D}${inidir}/${ext}.ini
else
echo "extension = ${dll}" >> ${D}${inidir}/${ext}.ini
fi
# register extension with pecl to prevent accidental
# installation of obsolete versions
insinto ${docdir}
touch ${S}/ext/${ext}/CREDITS
doins ${S}/ext/${ext}/CREDITS
sed -e "s,@DATE@,${date},g;
s,@DOCDIR@,${docdir},g;
s,@DOC_LEN@,${doc_len},g;
s,@DLL@,${dll},g;
s,@DLL_LEN@,${#dll},g;
s,@EXT@,${ext},g;
s,@EXT_LEN@,${#ext},g;
s,@PATH@,${xdir}/${dll},g;
s,@PATH_LEN@,${path_len},g;
s,@SUMMARY_LEN@,${summary_len},g;
s,@TIME@,${time},g;
s,@VERSION@,${VERSION},g;
s,@VERSION_LEN@,${#VERSION},g;
s,@TIMESTAMP@,${timestamp}," \
${S}/template-ext.reg > ${D}${regdir}/${ext}.reg
done
# builtin extensions
# when adding, be sure to update php_CONTENTS
for ext in filter hash pdo readline session
do
docdir=/usr/share/doc/pear/${ext}
doc_len=$((${#docdir} + 8)) # /CREDITS
summary_len=$((${#ext} + 22)) # PHP ___ builtin extension
# register extension with pecl to prevent accidental
# installation of obsolete versions
insinto ${docdir}
doins ${S}/ext/${ext}/CREDITS
sed -e "s,@DATE@,${date},g;
s,@DOCDIR@,${docdir},g;
s,@DOC_LEN@,${doc_len},g;
s,@EXT@,${ext},g;
s,@EXT_LEN@,${#ext},g;
s,@SUMMARY_LEN@,${summary_len},g;
s,@TIME@,${time},g;
s,@VERSION@,${VERSION},g;
s,@VERSION_LEN@,${#VERSION},g;
s,@TIMESTAMP@,${timestamp}," \
${S}/template-builtin.reg > ${D}${regdir}/${ext}.reg
done
dodir ${HTTPD_SYSCONFMODULESDIR}
cat > ${D}${HTTPD_SYSCONFMODULESDIR}/mod_php7.conf <<_EOF
# mod_php7 is not thread-safe
<IfModule prefork.c>
LoadModule php7_module modules/libphp7.so
</IfModule>
_EOF
# Add httpd.conf snippet
dodir ${HTTPD_SYSCONFDIR}
cat > ${D}${HTTPD_SYSCONFDIR}/php7.conf <<_EOF
AddType text/html .php
DirectoryIndex index.php
<IfModule mod_php7.c>
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch \.phps$>
SetHandler application/x-httpd-php-source
</FilesMatch>
</IfModule>
# if using a thread-safe MPM, or mod_php7 is not installed, use php-fpm instead
# requires: mod_proxy, mod_proxy_fcgi
<IfModule !mod_php7.c>
<FilesMatch \.php$>
# value depends on /etc/php-fpm.conf:listen=; this is the default
SetHandler "proxy:fcgi://localhost:9000"
</FilesMatch>
</IfModule>
_EOF
make_etc_defaults ${HTTPD_SYSCONFDIR}/php7.conf
dodir /var/lib/rebase/dynpath.d
echo $(${D}/usr/bin/php-config --extension-dir) > ${D}/var/lib/rebase/dynpath.d/php
}
-------------- next part --------------
https://cygwin.com/ml/cygwin/2017-05/msg00350.html
--- origsrc/php-7.1.13/Zend/zend_stream.c 2018-01-02 20:32:22.000000000 -0600
+++ src/php-7.1.13/Zend/zend_stream.c 2018-01-09 01:42:30.871472500 -0600
@@ -29,7 +29,9 @@
#if HAVE_MMAP
# if HAVE_UNISTD_H
# include <unistd.h>
-# if defined(_SC_PAGESIZE)
+# if defined(__CYGWIN__)
+# define REAL_PAGE_SIZE 4096
+# elif defined(_SC_PAGESIZE)
# define REAL_PAGE_SIZE sysconf(_SC_PAGESIZE);
# elif defined(_SC_PAGE_SIZE)
# define REAL_PAGE_SIZE sysconf(_SC_PAGE_SIZE);
--- origsrc/php-7.1.13/main/main.c 2018-01-02 20:32:22.000000000 -0600
+++ src/php-7.1.13/main/main.c 2018-01-09 01:42:57.670125500 -0600
@@ -97,7 +97,9 @@
#if HAVE_MMAP || defined(PHP_WIN32)
# if HAVE_UNISTD_H
# include <unistd.h>
-# if defined(_SC_PAGESIZE)
+# if defined(__CYGWIN__)
+# define REAL_PAGE_SIZE 4096
+# elif defined(_SC_PAGESIZE)
# define REAL_PAGE_SIZE sysconf(_SC_PAGESIZE);
# elif defined(_SC_PAGE_SIZE)
# define REAL_PAGE_SIZE sysconf(_SC_PAGE_SIZE);
More information about the Cygwin-apps
mailing list