Hello ports@, Last couple of months I've been busy getting to know the OpenBSD ports system and the php build environment. The main reason being my need for functionality at my $DAYJOB which isn't offered by the default php install on OpenBSD. Most notably php 7.1 and chroot (the php function).
During my quest I ended up touching about every part of the port and
I'm currently quite happy with the result, although there's still some
things I want to touch later on.
Some of the highlights I've done:
- Remove PHP 5.5. It's dead upstream for almost a year, so there's no
need to keep it on OpenBSD.
- Clean up the CONFIGURE_ARGS. There were some arguments there that
were simply not in PHP anymore.
- Move some deprecated modules into the PHP 5.6 Makefile. This keeps
the Makefile.inc cleaner of if/else bloat.
- Replace the -fastcgi port with -cgi. -cgi is the official name and
for fastcgi needs -fpm is recommended. This avoids confusion.
- Move modules to their own subpackage where possible. I don't like my
clean php install having ftp or wddx. Let people make up their own mind.
- Remove unused dependencies (e.g. mariadb isn't needed when building
with mysqlnd)
- Move every SAPI to their own subpackage. People running -fpm don't
need mod_php or -cgi.
- Move the extension headers to their corresponding subpackage.
- Clean up the build environment. YACC=, USE_LIBTOOL, etc don't seem to
be needed (anymore).
- Clean up patches. Some are unneeded, redundant, superfluous so keep
it to a minimum for maintainability.
- Subpackages requiring another module have those dependencies. (e.g.
installing -pdo_mysql also pulls in -pdo and -mysqlnd)
- Install phar and disable it on sparc64. This should allow us to have
php on sparc64, without phar support. Untested for lack of hardware.
- Enable the chroot function by default. This function normally gets
disabled if any SAPI other than -cli, -cgi, or -embed is compiled.
I reckon that if the chroot function is usable the code is running as
root and you have bigger problems than a php server locking itself out
of your main filesystem.
- Allow phpize to work without --with-php-config.
- Try to rely on other packages where code would be otherwise compiled
in. E.g. devel/pcre for the pcre module and textproc/oniguruma for
mbstring. These libraries are also packaged inside PHP if not available
on the main system.
- Miscellaneous cleanup
For the packages this means the following:
Removed:
- php-fastcgi
Added:
- php-apxs2
- php-bcmath
- php-calendar
- php-cgi
- php-cli
- php-ctype
- php-dom
- php-enchant
- php-exif
- php-fileinfo
- php-fpm
- php-ftp
- php-gettext
- php-iconv
- php-json
- php-mbstring
- php-mysqlnd
- php-opcache
- php-pdo
- php-pdo_sqlite
- php-phar
- php-posix
- php-readline
- php-simplexml
- php-sockets
- php-sqlite3
- php-sysvmsg
- php-sysvsem
- php-sysvshm
- php-tokenizer
- php-wddx
- php-xmlreader
- php-xmlwriter
Modules moved to shared components:
- bcmath
- calendar
- ctype
- dom
- exif
- fileinfo
- ftp
- gettext
- iconv
- json
- mbstring
- mysqlnd
- PDO
- pdo_sqlite
- Phar
- posix
- readline
- SimpleXML
- sockets
- sqlite3
- sysvmsg
- sysvsem
- sysvshm
- tokenizer
- wddx
- xmlreader
- xmlwriter
Modules kept compiled in:
- Core (for obvious reasons)
- date (can't be build stand-alone)
- ereg (removed in php 7.0, not worth the effort, also pcre is in
default install)
- filter (can't be build stand-alone)
- hash (required to be built-in for phar hash-checking)
- libxml (can't be build stand-alone)
- openssl (allow tls as a Stream Socket Transport in a default install)
- pcre (can't be build stand-alone)
- Reflection (can't be build stand-alone)
- session (what's a webserver without sessions?)
- SPL (can't be build stand-alone)
- standard (for obvious reasons)
- xml (required for pear building. Should be turned into a module once
something like phpctl is in place)
- zlib (required for phar)
When updating to the new packages I didn't encounter any problems,
except for the expected behaviour that some modules or SAPIs are now in
other packages, which could easily be covered with a current.html entry.
Some things that I would like to realize once this gets accepted are:
- Allow easier module manipulation via an external tool. E.g.
"phpctl-5.6 enable pdo_mysql", or "phpctl-5.6 list | phpctl-7.1 load".
I'm not sure of the semantics and haven't started on this yet. But it
would solve some issues, like migration or automatic module enabling
during package building (-xml).
- Allow pecl modules to be built with multiple PHP versions. Right now
all pecl modules are only available for 5.6, but I could use some of
those on my 7.1 install, which I now have to built custom with my
revamped phpize, which is not ideal.
The new layout requires a few tweaks in the pecl and pear department,
but nothing too fancy. See patch down below.
Also, arguments can be made to move some packages back together. E.g.
-cli into -main. I'm not against it, but it seems better to me to start
from maximum subdivision and combine them where needed.
As might be expected, I've been running with the 7.1 version of this
patch now for over 2 months without any issues (at least, that are
still left in this version).
Finally some thanks are due to jasper@ and sthen@ for some handholding.
Comments, questions, scoldings, OKs?
martijn@
Index: www/pear/Makefile
===================================================================
RCS file: /cvs/ports/www/pear/Makefile,v
retrieving revision 1.24
diff -u -p -r1.24 Makefile
--- www/pear/Makefile 1 Apr 2016 18:46:06 -0000 1.24
+++ www/pear/Makefile 2 Jul 2017 10:52:35 -0000
@@ -23,8 +23,10 @@ PERMIT_PACKAGE_CDROM= Yes
MULTI_PACKAGES= -main -utils
MODULES= lang/php
-BUILD_DEPENDS= ${_MODPHP_BUILD_DEPENDS}
-RUN_DEPENDS-main= www/pear,-utils
+BUILD_DEPENDS= ${_MODPHP_BUILD_DEPENDS} \
+ lang/php/${MODPHP_VERSION},-cli
+RUN_DEPENDS-main= www/pear,-utils \
+ lang/php/${MODPHP_VERSION},-cli
# Most of pear have to live in /var/www where apache is chroot'ed to.
PREFIX-main= ${VARBASE}/www
@@ -32,7 +34,7 @@ PREFIX-utils= /usr/local
NO_TEST= Yes
-BUILD_DEPENDS= devel/p5-Expect
+BUILD_DEPENDS+= devel/p5-Expect
SUBST_VARS= MODPHP_BIN
do-extract:
Index: mail/pecl-mailparse/Makefile
===================================================================
RCS file: /cvs/ports/mail/pecl-mailparse/Makefile,v
retrieving revision 1.19
diff -u -p -r1.19 Makefile
--- mail/pecl-mailparse/Makefile 19 Mar 2016 21:18:38 -0000 1.19
+++ mail/pecl-mailparse/Makefile 2 Jul 2017 10:52:57 -0000
@@ -16,6 +16,9 @@ WANTLIB = c
AUTOCONF_VERSION = 2.52
AUTOMAKE_VERSION = 1.4
+RUN_DEPENDS= lang/php/${MODPHP_VERSION},-mbstring
+BUILD_DEPENDS= lang/php/${MODPHP_VERSION},-mbstring
+
MODULES = lang/php/pecl
CONFIGURE_STYLE = gnu
Index: www/pecl-http/Makefile
===================================================================
RCS file: /cvs/ports/www/./pecl-http/Makefile,v
retrieving revision 1.13
diff -u -p -r1.13 Makefile
--- www/pecl-http/Makefile 8 Nov 2016 14:38:55 -0000 1.13
+++ www/pecl-http/Makefile 2 Jul 2017 10:52:57 -0000
@@ -20,12 +20,14 @@ MODULES= lang/php/pecl
CONFIGURE_STYLE= gnu
RUN_DEPENDS+= www/pecl-raphf \
- www/pecl-propro
+ www/pecl-propro \
+ lang/php/${MODPHP_VERSION},-iconv
TEST_DEPENDS+= ${RUN_DEPENDS}
-BUILD_DEPENDS+= ${RUN_DEPENDS}
+BUILD_DEPENDS+= ${RUN_DEPENDS} \
+ lang/php/${MODPHP_VERSION},-iconv
LIB_DEPENDS= devel/gettext \
devel/libidn \
- net/curl
+ net/curl \
TEST_EXTS+= -d extension_dir=${LOCALBASE}/lib/php-${MODPHP_VERSION}/modules
TEST_EXTS+= -d extension=raphf.so
Index: www/pecl-http/pkg/PLIST
===================================================================
RCS file: /cvs/ports/www/./pecl-http/pkg/PLIST,v
retrieving revision 1.3
diff -u -p -r1.3 PLIST
--- www/pecl-http/pkg/PLIST 1 Feb 2016 21:55:38 -0000 1.3
+++ www/pecl-http/pkg/PLIST 2 Jul 2017 10:52:58 -0000
@@ -1,37 +1,7 @@
@comment $OpenBSD: PLIST,v 1.3 2016/02/01 21:55:38 sthen Exp $
-@extra ${SYSCONFDIR}/php-${MODPHP_VERSION}/${MODULE_NAME}.ini
+@extra ${SYSCONFDIR}/php-${MODPHP_VERSION}/${MODULE_NAME}.ini
lib/php-${MODPHP_VERSION}/modules/${MODULE_NAME}.so
share/examples/php-${MODPHP_VERSION}/${MODULE_NAME}.ini
@sample ${SYSCONFDIR}/php-${MODPHP_VERSION}.sample/${MODULE_NAME}.ini
share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/
share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_api.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_buffer.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_client.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_client_request.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_client_response.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_cookie.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_curl.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_encoding.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_env.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_env_request.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_env_response.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_etag.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_exception.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_filter.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_header.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_header_parser.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_info.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_message.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_message_body.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_message_parser.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_misc.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_negotiate.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_object.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_options.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_params.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_querystring.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_response_codes.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_url.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_utf8.h
-share/php-${MODPHP_VERSION}/include/ext/${MODULE_NAME}/php_${MODULE_NAME}_version.h
php.tar.bz2
Description: Binary data
