MacOS X Leopard php extensions
Столкнулся с необходимостью добавить к PHP в макоси несколько экстеншенов. Апач в MacOS работает в x86_64. Да-да, там бинарник для нескольких архитектур:
file `which httpd`
Проблема в том что по умолчанию экстеншены будут собираться под i386. И потому из php-cli они доступны и работают, в то время как в mod_php их нет, а в логах апача видно примерно такое:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20060613/mcrypt.so' - (null) in Unknown on line 0
Для сборки под несколько архитектур надо собирать все зависимости также под несколько архитектур. Я решил ограничиться вариантом x86_64 и i386.
Итак, в /opt/local/etc/macports/macports.conf добавим требуемые архитектуры:
sudo echo 'universal_archs x86_64 i386'>> /opt/local/etc/macports/macports.conf
Чудесно. Теперь на примере gettext.
sudo port install gettext +universal file `which gettext`
В качестве вывода мы должны получить что-то вроде
dm@Loki ~$ file `which gettext` /opt/local/bin/gettext: Mach-O universal binary with 2 architectures /opt/local/bin/gettext (for architecture i386): Mach-O executable i386 /opt/local/bin/gettext (for architecture x86_64): Mach-O 64-bit executable x86_64
Далее нужны сорсы php. В сорсах есть папка ext.
cd php-5.2.8/ext/gettext phpize CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" \ CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" \ CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" \ LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" \ ./configure --with-gettext=/opt/local make sudo make install sudo echo 'extension=gettext.so' >> /etc/php.ini sudo apachectl restart
Предварительно убедитесь, что у Вас есть файл /etc/php.ini. По умолчанию его нет.
После этого модуль должен завестись в mod_php.
UPD: а чобы (по возможности) все из портов собиралось с флагом universal надо сделать
echo '+universal' >> /opt/local/etc/macports/variants.conf