Skip to content

Instantly share code, notes, and snippets.

@spacemonkey
Forked from jasonmoo/PHPFPM.Portfile
Created August 25, 2011 12:59
Show Gist options
  • Save spacemonkey/1170592 to your computer and use it in GitHub Desktop.
Save spacemonkey/1170592 to your computer and use it in GitHub Desktop.
PHP 5.3.8 MacPorts Portfile with FPM enabled FastCGI variant
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 71588 2010-09-17 05:21:24Z [email protected] $
PortSystem 1.0
name php5
conflicts php5-devel php52
# Update revision of php5-eaccelerator when updating version of php5
epoch 1
version 5.3.8
revision 2
set major [lindex [split ${version} .] 0]
set my_name php${major}
dist_subdir ${my_name}
categories lang php www
maintainers ryandesign jwa
homepage http://www.php.net/
master_sites php
distname php-${version}
use_bzip2 yes
platforms darwin freebsd
use_parallel_build yes
description \
PHP: Hypertext Preprocessor
long_description \
PHP is a widely-used general-purpose scripting language \
that is especially suited for developing web sites, but can also \
be used for command-line scripting.
checksums [suffix ${distname}] \
rmd160 f18a18e2dfd7ea7885760eec2a05b3c4a15ad9db \
sha256 a1dd06fd5593e97d9a5bd9818d6501d28d3ee8f09b83f0ec78f7cdfc060f3ea2
depends_build \
port:pkgconfig \
port:autoconf213
depends_lib \
path:bin/gsed:gsed \
port:libtool \
port:libevent \
port:libxml2 \
port:bzip2 \
port:mhash \
port:pcre \
port:readline \
port:zlib
# Use -p1 to accommodate the Suhosin patch
patch.pre_args -p1
patchfiles patch-scripts-php-config.in.diff
use_autoconf yes
autoconf.cmd ${prefix}/bin/autoconf213
set phpinidir ${prefix}/etc/${my_name}
set extraphpinidir ${prefix}/var/db/${my_name}
destroot.keepdirs ${destroot}${extraphpinidir}
configure.args \
--mandir=${prefix}/share/man \
--infodir=${prefix}/share/info \
--with-config-file-path=${phpinidir} \
--with-config-file-scan-dir=${extraphpinidir} \
--disable-all \
--enable-bcmath \
--enable-ctype \
--enable-dom \
--enable-fileinfo \
--enable-filter \
--enable-hash \
--enable-json \
--enable-libxml \
--enable-pdo \
--enable-phar \
--enable-session \
--enable-simplexml \
--enable-tokenizer \
--enable-xml \
--enable-xmlreader \
--enable-xmlwriter \
--with-bz2=${prefix} \
--with-mhash=${prefix} \
--with-pcre-regex=${prefix} \
--with-readline=${prefix} \
--with-libxml-dir=${prefix} \
--with-zlib=${prefix} \
--without-pear \
--disable-cgi
# php5-mysql +mysqlnd needs mysqlnd support compiled into php
configure.env-append PHP_MYSQLND_ENABLED=yes
configure.universal_args-delete --disable-dependency-tracking
platform darwin 10 {
configure.env-append \
LIBS=-lresolv
}
variant no_web conflicts apache apache2 fastcgi description {Don't include any web server support} {}
# Build an Apache 1 module. On Mac OS X, it uses Apple's provided Apache 1 server.
# On other platforms, the MacPorts apache port is used. Keep the options here
# in sync with those in the relevant part of the post-destroot phase.
variant apache conflicts apache2 no_web description {Add Apache 1 web server module} {
if { ! [variant_isset macosx] && (![info exists os.subplatform] || ${os.subplatform} != "macosx") } {
depends_lib-append \
port:apache
configure.args-append \
--with-apxs=${prefix}/sbin/apxs
} else {
destroot.violate_mtree yes
configure.args-append \
--with-apxs=/usr/sbin/apxs
}
}
# Build an Apache 2.2 module. Keep the options here in sync with those in the
# relevant part of the post-destroot phase.
variant apache2 conflicts apache no_web description {Add Apache 2.2 web server module} {
pre-configure {
# Checking for mod_cgi.so is a convenient way to verify apache2 is using its
# +preforkmpm variant. (+eventmpm and +workermpm instead provide mod_cgid.so.)
if {![file exists ${prefix}/apache2/modules/mod_cgi.so]} {
ui_error "To use ${name} with the +apache2 variant, apache2 must be installed with the +preforkmpm variant."
return -code error "incompatible apache2 installation"
}
}
destroot.violate_mtree yes
depends_lib-append \
port:apache2
configure.args-append \
--with-apxs2=${prefix}/apache2/bin/apxs
}
# Build a FastCGI binary. Keep the options here in sync with those in the
# relevant part of the post-destroot phase.
variant fastcgi conflicts no_web description {Add FastCGI web server binary} {
if { ![variant_isset apache] && ![variant_isset apache2] } {
configure.args-delete \
--disable-cgi
configure.args-append \
--enable-cgi \
--enable-fpm \
--with-fpm-user=_www \
--with-fpm-group=_www
}
startupitem.create yes
startupitem.name php-fpm
startupitem.executable ${prefix}/bin/php-fpm
startupitem.pidfile auto ${prefix}/var/run/php-fpm.pid
}
foreach {old_variant new_port} {
gmp gmp
imap imap
macports_snmp snmp
mssql mssql
mysql4 mysql
mysql5 mysql
mysqlnd mysql
oracle oracle
pcntl pcntl
postgresql82 postgresql
postgresql83 postgresql
pspell pspell
snmp snmp
sockets sockets
sqlite sqlite
tidy tidy
} {
eval [subst {
variant ${old_variant} description "Obsolete; install ${my_name}-${new_port} port instead" {
pre-configure {
ui_msg "The +${old_variant} variant is obsolete. Please install the ${my_name}-${new_port} port instead."
}
}
}]
}
variant ipc description {Add semaphore, shared memory and IPC functions} {
configure.args-append \
--enable-shmop \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg
}
if {![variant_isset apache] && ![variant_isset apache2] && ![variant_isset fastcgi] && ![variant_isset no_web]} {
default_variants +apache2
}
variant pear description {Add PEAR} {
configure.args-delete \
--without-pear
configure.args-append \
--with-pear=${prefix}/lib/php
destroot.target-append \
install-pear
destroot.args-append \
PHP_PEAR_INSTALL_DIR=${prefix}/lib/php
post-destroot {
#nuke pear-stuff in ${destroot}
system "cd ${destroot} && rm -rf .channels .depdb .depdblock .filemap .lock"
system "if \[ -f ${prefix}/lib/php/.depdblock \]; then rm -f ${destroot}${prefix}/lib/php/.depdblock; fi"
system "if \[ -f ${prefix}/lib/php/.depdb \]; then rm -f ${destroot}${prefix}/lib/php/.depdb; fi"
system "if \[ -f ${prefix}/lib/php/.filemap \]; then rm -f ${destroot}${prefix}/lib/php/.filemap; fi"
system "if \[ -f ${prefix}/lib/php/.lock \]; then rm -f ${destroot}${prefix}/lib/php/.lock; fi"
system "if \[ -d ${prefix}/lib/php/.channels \]; then rm -rf ${destroot}${prefix}/lib/php/.channels; fi"
}
}
variant suhosin description {Add Suhosin patch} {
pre-fetch {
if {"darwin" == ${os.platform} && ${os.major} < 9} {
ui_error "The suhosin variant requires Mac OS X 10.5 or greater."
return -code error "incompatible Mac OS X version"
}
}
set suhosin_patch_version ${version}-0.9.10
set suhosin_patch suhosin-patch-${suhosin_patch_version}.patch.gz
patch_sites-append http://download.suhosin.org/
patchfiles-append ${suhosin_patch}
checksums-append \
${suhosin_patch} \
md5 b66b27c43b1332400ef8982944c3b95b \
sha1 76675242cfdeff763767900213346af622002490 \
rmd160 8dcd8b51ea0357b6cc51e70e495e18f341c62f7c
}
destroot.args \
INSTALL_ROOT=${destroot}
destroot.target \
install-cli install-build install-headers install-programs
post-destroot {
# Copy the Apache 1 module.
if { [variant_isset apache] } {
xinstall -m 755 -d ${destroot}${prefix}/libexec/apache \
${destroot}${prefix}/etc/apache/extra
xinstall -m 755 ${worksrcpath}/libs/libphp5.so ${destroot}${prefix}/libexec/apache/
xinstall -m 755 -c ${filespath}/mod_php.conf ${destroot}$prefix/etc/apache/extra
}
# Copy the Apache 2.2 module.
if { [variant_isset apache2] } {
xinstall -m 755 -d ${destroot}${prefix}/apache2/modules \
${destroot}${prefix}/apache2/conf/extra
xinstall -m 755 ${worksrcpath}/libs/libphp5.so ${destroot}${prefix}/apache2/modules/
xinstall -m 755 -c ${filespath}/mod_php.conf ${destroot}${prefix}/apache2/conf/extra
}
if { [variant_isset fastcgi] } {
# If we've built an Apache module (any version) then the FastCGI binary
# will not have been built, so we need to run through the whole process
# again and build just the FastCGI binary. Keep the options here in sync
# with the options specified in the apache and apache2 variants.
if { [variant_isset apache] } {
if { ![variant_isset macosx] && (![info exists os.subplatform] || ${os.subplatform} != "macosx") } {
configure.args-delete \
--with-apxs=${prefix}/sbin/apxs
} else {
configure.args-delete \
--with-apxs=/usr/sbin/apxs
}
}
if { [variant_isset apache2] } {
configure.args-delete \
--with-apxs2=${prefix}/apache2/bin/apxs
}
# Run the build again to get the FastCGI binary. Keep the options here
# in sync with those in the fastcgi variant.
if { [variant_isset apache] || [variant_isset apache2] } {
configure.args-delete \
--disable-cgi
configure.args-append \
--enable-cgi \
--enable-fpm \
--with-fpm-user=_www \
--with-fpm-group=_www
ui_msg "$UI_PREFIX Configuring ${name} again for fastcgi"
command_exec configure
ui_msg "$UI_PREFIX Building ${name} again for fastcgi"
command_exec build
ui_msg "$UI_PREFIX Staging ${name} fastcgi into destroot"
}
# Move the FPM binary to the bin dir
xinstall -m 755 ${worksrcpath}/sapi/fpm/php-fpm ${prefix}/bin
}
#file rename ${destroot}${prefix}/etc/pear.conf ${destroot}${prefix}/etc/pear.conf.sample
# Copy the default php.ini files.
xinstall -m 755 -d ${destroot}${phpinidir}
xinstall -m 644 -W ${worksrcpath} \
php.ini-development \
php.ini-production \
${destroot}${phpinidir}
# Copy mysqlnd headers.
xinstall -d ${destroot}${prefix}/include/php/ext/mysqlnd
eval xinstall -m 644 [glob ${worksrcpath}/ext/mysqlnd/*.h] ${destroot}${prefix}/include/php/ext/mysqlnd
}
pre-activate {
set filepath ${extraphpinidir}/.turd_${name}
if {[file exists ${filepath}]} {
delete ${filepath}
}
}
post-activate {
if {[file exists ${prefix}/etc/php.ini] && ![file exists ${phpinidir}/php.ini]} {
move ${prefix}/etc/php.ini ${phpinidir}
ui_msg "Your ${prefix}/etc/php.ini has been moved to ${phpinidir}/php.ini"
ui_msg ""
}
if {![file exists ${phpinidir}/php.ini]} {
ui_msg "To customize php, copy"
ui_msg "${phpinidir}/php.ini-development (if this is a development server) or"
ui_msg "${phpinidir}/php.ini-production (if this is a production server) to"
ui_msg "${phpinidir}/php.ini and then make changes."
} else {
ui_msg "You may need to update your php.ini for any changes that have been made"
ui_msg "in this version of php. Compare ${phpinidir}/php.ini with"
ui_msg "${phpinidir}/php.ini-development (if this is a development server) or"
ui_msg "${phpinidir}/php.ini-production (if this is a production server)."
}
if {[variant_isset fastcgi]} {
ui_msg "* copy ${prefix}/etc/php-fpm.conf.sample to ${prefix}/etc/php-fpm.conf"
}
if {![variant_isset no_web]} {
ui_msg ""
ui_msg "If this is your first install, you need to activate PHP in your web server."
if {![variant_isset fastcgi]} {
if {[variant_isset apache]} {
set moduledir ${prefix}/libexec/modules
set apxs ${prefix}/apache/bin/apxs
}
if {[variant_isset apache2]} {
set moduledir ${prefix}/apache2/modules
set apxs ${prefix}/apache2/bin/apxs
}
ui_msg ""
ui_msg "To enable PHP in Apache, run"
ui_msg " cd ${moduledir}"
ui_msg " ${apxs} -a -e -n \"${my_name}\" lib${my_name}.so"
}
}
#ui_msg "* copy ${prefix}/etc/pear.conf.sample to ${prefix}/etc/pear.conf"
}
variant debug description {Enable debug support (useful to analyze a PHP-related core dump)} {
configure.args-append --enable-debug
}
test.run yes
livecheck.type regex
livecheck.url ${homepage}downloads.php
livecheck.regex get/php-(5\\.\[0-9.\]+)\\.tar
@garyjaybrooks
Copy link

Go Mitch!

@edigu
Copy link

edigu commented Oct 20, 2011

Great job! =)

@spacemonkey
Copy link
Author

Thanks guys, just glad someone else found it useful. blush

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment