OSX 10.6 mac ports

Unter Snow Leopard ist PHP 5.3 vorinstalliert. Das ist sehr schön, allerdings haben manche (sogar ziemlich viele) Extensions damit Probleme. Also wollte ich PHP 5.2.11 haben - und zwar in 64 Bit kompiliert. Das war nicht einfach, und ich habe mir nicht alles notiert - aber das grobe Vorgehen hier:

Eingebautes PHP 5.3

CLI: /usr/bin/php

Apache Modul: /usr/libexec/apache2/libphp5.so

PHP 5.2.11

Anmerkung: inzwischen habe ich mac ports komplett deinstalliert. Meiner Ansicht nach macht es das System extrem unübersichtlich und viele Probleme beim compilieren von Anwendungen die nicht in mac ports sind waren dann "verwirrt" mit den vielen Versionen von libraries. Aber diese Seite bleibt aus historischen Gründen erhalten, wer weiss, vielleicht muss ich ja eines Tages doch wieder auf mac ports zurückgreifen.

Ich habe es in einer gemischten Umgebung compiliert: Mysql usw. ist gelinkt mit den "normalen" Libraries in den Verzeichnissen /usr/local usw. Manche Module sind auch in der MacPorts Umgebung unter /opt/local weil die Originalen nicht passen und ich die Originalen nicht verändern wollte.

Hilfe habe ich unter folgenden Webseiten gefunden (jedoch hat es so nicht ganz funktioniert bei mir):

http://www.firewing1.com/node/31

http://www.firewing1.com/node/26

http://diymacserver.com/installing-php/compiling-php-in-64-bits-mode-on-snow-leopard 

Vorbereitungen

Zunächst das Original 5.3 apache Modul umbenennen in: /usr/libexec/apache2/libphp5.so.orig-osx10.6

Dann die Sourcen in /usr/local/src/php-5.2.11 entpacken. Dann die Compiler und Linkerflags setzen:

export CFLAGS='-arch x86_64' CCFLAGS='-arch x86_64' CXXFLAGS='-arch x86_64' LDFLAGS="-L/opt/local/lib -liconv"

Der Pfad war zur Zeit der Compilierung folgender (Wichtig!!!):

PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/usr/local/mysql/bin

iconv Problem

Mit iconv gab es ein Problem (falsche Architektur oder Version oder so ähnlich). Lösung war jedenfalls die Version in /opt zu verwenden aus MacPorts:

mv /usr/include/iconv.h /usr/include/iconv.h.osx10.6
ln -s /opt/local/include/iconv.h /usr/include/iconv.h

ext/iconv/iconv.c wurde jedoch vor dem compilieren angepasst: lib entfernen von libiconv

#ifdef HAVE_LIBICONV
#define iconv iconv
#endif

Configure

Das Skript mit folgenden Parametern aufrufen:

./configure \
--prefix=/usr/local \
--with-apxs2=/usr/sbin/apxs \
--with-ldap=/usr \
--with-kerberos=/usr \
--enable-cli \
--with-zlib-dir=/usr \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-mbregex \
--enable-sockets \
--with-iodbc=/usr \
--with-curl=/usr \
--with-config-file-path=/etc \
--sysconfdir=/private/etc \
--with-mysql-sock=/var/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-mysql=/usr/local/mysql \
--with-openssl=/usr \
--with-xmlrpc \
--with-xsl=/usr \
--without-pear \
--with-libxml-dir=/usr \
--with-iconv=shared,/opt/local \
--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \
--with-gd \
--with-jpeg-dir=/opt/local \
--with-png-dir=/opt/local \
--with-freetype-dir=/opt/local \
--with-mcrypt=/opt/local

Makefile

Das Makefile muss verändert werden (http://bugs.php.net/bug.php?id=48195):

Die Zeile:

$(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp$(PHP_MAJOR_VERSION).so

ersetzen mit:

$(CC) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) $(MH_BUNDLE_FLAGS) -o $@ && cp $@ libs/libphp$(PHP_MAJOR_VERSION).so
 -lresolv

Und zu folgenden Variablen am Ende `-lresolv` anfügen (http://bugs.php.net/bug.php?id=49267):

EXTRA_LIBS=...
MH_BUNDLE_FLAGS=...
# evtl.: EXTRA_LDFLAGS_PROGRAM=...

alle i368 (falls vorhanden) mit x86_64 ersetzen.

Dann make aufrufen und die erzeugte Bibliothek von Hand kopieren:

cp libs/libphp5.so /usr/libexec/apache2/libphp5.so

Erstellt: 07/2010| Geändert: 10/2015