Created
April 18, 2012 19:27
-
-
Save airlst/2415936 to your computer and use it in GitHub Desktop.
Install PHP-FPM on OSX with Macports
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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 89615 2012-02-04 05:28:00Z [email protected] $ | |
PortSystem 1.0 | |
name php5 | |
conflicts php5-devel php52 | |
# Keep version of php5 in sync with bundled php5 extension ports. | |
# Increment revision of php5-eaccelerator when updating version of php5. | |
epoch 1 | |
version 5.3.10 | |
set major [lindex [split ${version} .] 0] | |
set my_name php${major} | |
dist_subdir ${my_name} | |
categories lang php www | |
maintainers ryandesign jwa | |
platforms darwin freebsd | |
license PHP-3.01 | |
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. | |
homepage http://www.php.net/ | |
master_sites php | |
distname php-${version} | |
use_bzip2 yes | |
checksums [suffix ${distname}] \ | |
rmd160 acab30a19b340f21a64e06b524906f2b064dd1c9 \ | |
sha256 339157af2b386534597d287da292f2545e81d9b452e8b3fe525fb2c534ff344a | |
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-configure.in.diff \ | |
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} | |
if {${configure.compiler} == "clang"} { | |
configure.compiler llvm-gcc-4.2 | |
} | |
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-fpm \ | |
--enable-cgi | |
} | |
} | |
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 -W ${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_available 1 | |
if {!${suhosin_available}} { | |
ui_error "There is no suhosin patch for PHP ${version} yet. Please check back later." | |
} | |
if {![file exists ${prefix}/var/db/php5/suhosin.ini]} { | |
ui_msg "You may also be interested in the suhosin extension, a related but different piece of software. See the php5-suhosin port." | |
} | |
if {!${suhosin_available}} { | |
return -code error "unavailable variant" | |
} | |
} | |
set suhosin_patch_version 5.3.9-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} \ | |
rmd160 ce43921fd9b183b154713ecda98294f6c68d5f22 \ | |
sha256 4438caeab0a10c6c94aee9f7eaa703f5799f97d4e0579f43a947bb7314e38317 | |
} | |
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-fpm \ | |
--enable-cgi | |
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" | |
} | |
# Copy the FastCGI binary to the bin dir under a new name so it doesn't | |
# conflict with the cli version. | |
if {[file exists ${worksrcpath}/sapi/cgi/php-cgi]} { | |
xinstall -m 755 ${worksrcpath}/sapi/cgi/php-cgi ${destroot}${prefix}/bin | |
} | |
# Copy the default FastCGI config | |
if {[file exists ${worksrcpath}/sapi/fpm/php-fpm.conf]} { | |
xinstall -m 644 ${worksrcpath}/sapi/fpm/php-fpm.conf ${destroot}${prefix}/etc/ | |
} | |
} | |
#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 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 |
And by the way: a short write-up what has been changed:
- requiring libevent
- add --enable-fpm on several places
- added file exist checks on cgi and conf copying (in post-activate)
well it fails for me
Undefined symbols for architecture x86_64: "_pcre_info", referenced from: _pcre_get_compiled_regex_cache in php_pcre.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status Undefined symbols for architecture x86_64: "_pcre_info", referenced from: _pcre_get_compiled_regex_cache in php_pcre.o ld: symbol(s) not found for architecture x86_64 collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1 make: *** Waiting for unfinished jobs.... make: *** [sapi/fpm/php-fpm] Error 1 make: Leaving directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_php5/php5/work/php-5.3.10' Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_php5/php5/work/php-5.3.10" && /usr/bin/make -j4 -w all Exit code: 2 Error: org.macports.build for port php5 returned: command execution failed Warning: targets not executed for php5: org.macports.activate org.macports.build org.macports.destroot org.macports.install Please see the log file for port php5 for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_php5/php5/main.log To report a bug, follow the instructions in the guide: http://guide.macports.org/#project.tickets Error: Processing of port php5 failed
12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This Portfile can be used to install PHP-FPM on OSX with Macports.
Here's how to do it:
(1a) Install Macports freshly OR
(1b) Uninstall existing php5 package
sudo port uninstall --follow-dependents php5
(2) Go to Portfile directory
cd $(port dir php5)
(3) Make a backup of existing Portfile
sudo cp Portfile Portfile.orig
(4) Replace Portfile with the content of the GIST above. Use favorite text editor, for example vim
sudo vim Portfile
(5) Install php with macports
sudo port install php5 +fastcgi
(6) If everything worked out, php-fpm should be available here:
/opt/local/sbin/php-fpm
Done.