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 LoadModule php7_module modules/libphp7.so _EOF # Add httpd.conf snippet dodir ${HTTPD_SYSCONFDIR} cat > ${D}${HTTPD_SYSCONFDIR}/php7.conf <<_EOF AddType text/html .php DirectoryIndex index.php SetHandler application/x-httpd-php SetHandler application/x-httpd-php-source # if using a thread-safe MPM, or mod_php7 is not installed, use php-fpm instead # requires: mod_proxy, mod_proxy_fcgi # value depends on /etc/php-fpm.conf:listen=; this is the default SetHandler "proxy:fcgi://localhost:9000" _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 }