PHP IMAP support in Mac OS X Lion without recompiling PHP
November 24th, 2011
OK, so this was a lot harder than it should have been, and I had to use various tutorials to get it working, however I am pleased to say that I finally did get it all working without needing to completely recompile php. Here are the steps:
First, modified from http://blog.xeonxai.com/2009/12/03/160/:
- Download IMAP source code (now 2007f).
- Extract the tar.gz file (double click it in finder or tar xvzf imap-2007f.tar.gz in terminal)
- Then, modified from This Comment on the same xeonxai blog post, do the following to avoid the error:
"configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information."
when executing item 6 in this tutorial.
cd ~/Downloads/imap-2007f
make osx EXTRACFLAGS="arch i386 -arch X86_64 -g -Os -pipe -no-cpp-precomp"
sudo cp c-client/*.h /usr/local/include/
sudo cp c-client/*.c /usr/local/lib/
sudo cp c-client/c-client.a /usr/local/lib/libc-client.a - Then download php source. Make sure you get the right source (you can check your php version by the command in the terminal:
php -r "phpinfo();"
I think OS X Lion standard install is php 5.3.6 which you can download at http://es.php.net/get/php-5.3.6.tar.bz2/from/a/mirror - Unpack php-5.3.6.tar.bz2 (double click it in finder or tar xvzf php-5.3.6.tar.bz2)
- In Terminal:
cd ~/Downloads/php-5.3.6/ext/imap
phpize
./configure --with-imap==/usr/local/imap-2007 --with-kerberos --with-imap-ssl
make
At the make command, things will fail. This is the message that I got…
In file included from /Users/danspencer/Downloads/php-5.3.6/ext/imap/php_imap.c:44:
/usr/include/php/ext/pcre/php_pcre.h:29:18: error: pcre.h: No such file or directory
In file included from /Users/danspencer/Downloads/php-5.3.6/ext/imap/php_imap.c:44:
/usr/include/php/ext/pcre/php_pcre.h:37: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/php/ext/pcre/php_pcre.h:38: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/php/ext/pcre/php_pcre.h:44: error: expected specifier-qualifier-list before ‘pcre’
make: *** [php_imap.lo] Error 1
Basically, pcre is not installed, so we need to install this first. See next step! - Modified from http://blog.xavicolomer.com/2011/09/06/osx-lion-and-nginx-installation-tutorial/:
- Download PCRE from the Sourceforge Project page: http://sourceforge.net/projects/pcre/files/pcre/8.20/pcre-8.20.tar.gz/download
- Untar the file:
tar xvzf pcre-8.20.tar.gz
- cd to the directory:
cd pcre-8.20
- configure and make:
.configure --prefix=/usr/local<br />make<br />sudo make install
- Successful installation should look like the following in the last couple of lines:
test -z "/usr/local/include" || ./install-sh -c -d "/usr/local/include"
/usr/bin/install -c -m 644 pcre.h pcrecpparg.h pcre_stringpiece.h '/usr/local/include'
test -z "/usr/local/lib/pkgconfig" || ./install-sh -c -d "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 libpcre.pc libpcreposix.pc libpcrecpp.pc '/usr/local/lib/pkgconfig'
- Now you should be able to cd to the imap extension directory in php-5.3.6 source and compile the extension:
cd ~/Downloads/php-5.3.6/ext/imap
phpize
./configure --with-imap==/usr/local/imap-2007 --with-kerberos --with-imap-ssl
make
sudo cp modules/imap.so /usr/lib/php/extensions/no-debug-non-zts-20090626/ - Now edit php.ini (sudo vi /etc/php.ini) and add the imap extension in (I added mine around line 990, just under the commented out windows extensions. in vi, you will need to press i to insert text):
;IMAP Extension
extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/imap.so
After editing, save the file (in vi press esc to exit insert mode, then type “:x”). - now restart apache, and we should be done!
sudo apachectl graceful
- To test to see if we are up and running, we can do a couple of things…
-
php -r "phpinfo();"
We should be able to find the following in the output (the modules are in alphabetical order):
imap
IMAP c-Client Version => 2007f
SSL Support => enabled
Kerberos Support => enabled - You can also check to see if the imap functions exist:
php -r "if(function_exists('imap_open')) { echo 'imap_open exists!'; } else { echo 'imap_open does not exist'; }"
You should get an output of “imap_open exists”
-
So that’s it, hope it helps!
hi!
thanks for the info here! almost worked perfectly for me. i tried first info from here: http://www.activecollab.com/forums/topic/5844/ but it didn’t compile so i googled again and found your post and got imap installed. so cheers for this!
however, i did get an error from
make osx EXTRACFLAGS=”arch i386 -arch X86_64 -g -Os -pipe -no-cpp-precomp”, error was something about the architecture, which i did not save.
so i used make command from the other post
make osx EXTRACFLAGS=”-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp”, which compiled just fine. maybe a typo in -arch option?
plus i didn’t get that prce error.
and now i have imap working perfectly on my mb lion!
j
Hey Dan, thanks for putting this together! This is exactly what I need.
I’m running into issues on step 3 when running ‘make’. I get the following errors:
llvm-gcc-4.2: Invalid arch name : X86_64
make[3]: *** [osdep.o] Error 1
make[2]: *** [osx] Error 2
make[1]: *** [OSTYPE] Error 2
make: *** [osx] Error 2
Any ideas why I’m getting those? I’m running on a Macbook Pro OSX 10.7.
Any help would be appreciated! Thanks!
Hey Dan, I ended up fixing my issue with making imap without extra EXTRACFLAGS flags, just simply used “make osx” and everything worked fine.
I also didn’t run into the error on step 6 so I didn’t have to do step 7.
Thanks again for writing this up!
thanks so much for gathering all in one place.
based on my experience trying to compile it, I’ve came across a minor fix needed on step #3
missing a dash (“-“) before the first arch, and the second should be lower case “x” (X -> x).
i.e. instead of :
make osx EXTRACFLAGS=”arch i386 -arch X86_64 -g -Os -pipe -no-cpp-precomp”
should be:
make osx EXTRACFLAGS=”-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp”
Hi, works for me! thanks!
only one thing:
on “make osx EXTRACFLAGS=”arch i386 -arch X86_64 -g -Os -pipe -no-cpp-precomp””
the x of “X86_64” should be in lowercase “x86_64” (my compiler cry with X)
I install pcre with “brew install pcre” and works fine too.
thanks a lot! and sorry for my english 😛
Thanks so much! This saved me countless hours! I had just one issue with one of your lines:
make osx EXTRACFLAGS=”arch i386 -arch X86_64 -g -Os -pipe -no-cpp-precomp”
I needed it to be:
make osx EXTRACFLAGS=”-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp”
Note the lowercase “x” for the “x86_64”. Otherwise, I was getting “invalid arch name”.
Thanks again!
Thank you so much for this guide Dan.
This saved me a lot of frustration after trying all sorts of guides and all of them running into some undocumented problem.
So, thanks again!
Thanks for all the tips. On my July 2011 Mac Air w/Lion PCRE was present but I had a different strange problem with the imap MAKE:
error: ‘PHP_FE_END’ undeclared here (not in a function)
which required me to hack into the php_imap.c file and follow these instructions: http://serverfault.com/questions/317463/php-fe-function-c-error-when-trying-to-enable-extension
I was then able to make and complete as show above.
Thanks! Many problems averted with this!
Followed step-by-step. Worked like charm. Mac OS X 10.7.2, Intel i7. Thanks!
I got stopped up on Step 8 at the make statement. It failed, reporting that PHP_FE_END and ZEND_MOD_END were not defined:
…../php_imap.c:554: error: ‘PHP_FE_END’ undeclared here (not in a function)
…../php_imap.c:561: error: ‘ZEND_MOD_END’ undeclared here (not in a function)
I replaced these symbols in php_imap.c with their definitions that apparently didn’t come through.
PHP_FE_END => { NULL, NULL, NULL, 0, 0 }
ZEND_MOD_END => { NULL, NULL, NULL, 0 }
I’m running Lion 10.7.3 and PHP 5.3.8 (stock).
I know you wrote this a while back. When I ran ‘make’ on the for the imap libraries, the c-client.a file was not created. Do you have any idea why that is?
Thanks
Eric
I recently came across your post. I’m running Mac OS X 10.6.8, do you think I can also follow these steps? I checked the PHP version and I have 5.3.15. I assume that I need to download the same source to properly do this. If you can let me know I’d really appreciate it.
I had to use the following command for Step 3:
make osx EXTRACFLAGS=”-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp”
Thanks a bunch very useful article.
-G
Thank you for these instructions. I’ tried to install the php imap module on my Snow Leopard mail server, and was getting the error you mentioned: “configure: error: utf8_mime2text() has new signature,” etc.
I am trying out your solution but could not execute this line:
sudo cp c-client/c-client.a /usr/local/lib/libc-client.a
The file “c-client/c-client.a” does not exist in the imap-2007f I downloaded and extracted. There is however a file called “c-client/c-client.h”
I tried substituting that one but still cannot get this to compile. Any advice would be most appreciated.