I am trying to install gnupg on a mac using PECL.
sudo pecl install gnupg
downloading gnupg-1.3.3.tgz ... Starting to download gnupg-1.3.3.tgz (19,141 bytes) ......done: 19,141 bytes 5 source files, building WARNING: php_bin /Applications/MAMP/bin/php/php5.5.3/bin/php appears to have a suffix /php5.5.3/bin/php, but config variable php_suffix does not match running: phpize Configuring for: PHP Api Version: 20121113 Zend Module Api No: 20121212 Zend Extension Api No: 220121212 building in /private/tmp/pear/install/pear-build-rootj1cVj1/gnupg-1.3.3 running: /private/tmp/pear/install/gnupg/configure checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for a sed that does not truncate output... /opt/local/bin/gsed checking for cc... cc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether cc accepts -g... yes checking for cc option to accept ISO C89... none needed checking how to run the C preprocessor... cc -E checking for icc... no checking for suncc... no checking whether cc understands -c and -o together... yes checking for system library directory... lib checking if compiler supports -R... no checking if compiler supports -Wl,-rpath,... yes checking build system type... x86_64-apple-darwin12.4.0 checking host system type... x86_64-apple-darwin12.4.0 checking target system type... x86_64-apple-darwin12.4.0 checking for PHP prefix... /Applications/MAMP/bin/php/php5.5.3 checking for PHP includes... -I/Applications/MAMP/bin/php/php5.5.3/include/php -I/Applications/MAMP/bin/php/php5.5.3/include/php/main -I/Applications/MAMP/bin/php/php5.5.3/include/php/TSRM -I/Applications/MAMP/bin/php/php5.5.3/include/php/Zend -I/Applications/MAMP/bin/php/php5.5.3/include/php/ext -I/Applications/MAMP/bin/php/php5.5.3/include/php/ext/date/lib checking for PHP extension directory... /Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212 checking for PHP installed headers prefix... /Applications/MAMP/bin/php/php5.5.3/include/php checking if debug is enabled... no checking if zts is enabled... no checking for re2c... no configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. checking for gawk... gawk checking for gnupg support... yes, shared checking for gnupg files in default path... not found configure: error: Please reinstall the gpgme distribution ERROR: `/private/tmp/pear/install/gnupg/configure' failed
I have narrowed down my problem to getting gpgme installed, but I can't find the correct way to to do it anywhere.
I was facing the same problem, when using PHP 5.4.24, Mac OSX 10.9.3. I had to take the following steps to install gnupg (v1.3.3) using PECL.
Firstly, I installed the software packages gnupg
and gpgme
using homebrew. Homebrew installs your packages in /usr/local
. This is import because the gnupg PECL module searches the following locations /usr/local/include /usr/include /usr/local/include/gpgme/ /usr/include/gpgme/
to detect an installation of gpgpme
.
Secondly, I tried to install gnupgp using PECL:
pecl install gnupg
At time writing, the code of the PECL module contains two statement that prevents the module from being compiled and linked correctly. This resulted into the following error:
...compile statements...
cc ${wl}-flat_namespace ${wl}-undefined ${wl}suppress -o .libs/gnupg.so -bundle .libs/gnupg.o .libs/gnupg_keylistiterator.o -L/usr/local/include/lib -lgpgme -Wl,-rpath -Wl,/usr/local/include/lib
ld: warning: directory not found for option '-L/usr/local/include/lib'
duplicate symbol _gnupg_keylistiterator_class_entry in:
.libs/gnupg.o
.libs/gnupg_keylistiterator.o
duplicate symbol _gnupg_class_entry in:
.libs/gnupg.o
.libs/gnupg_keylistiterator.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [gnupg.la] Error 1
Thirdly, I had to resolve this error by editing and installing the PECL module by hand, based on Jim Jagielski's patch. These are the steps I completed:
Download the gnupg-pecl module:
pecl download gnupg
Unpack the gnupg-pecl module:
tar xvf gnupg-1.3.3.tgz
Change directory:
cd gnupg-1.3.3
Modify php_gnupg.h
by changing line 49:
zend_class_entry *gnupg_class_entry;
into static zend_class_entry *gnupg_class_entry;
Modify php_gnupg_keylistiterator.h
by changing line 44:
zend_class_entry *gnupg_keylistiterator_class_entry;
into static zend_class_entry *gnupg_keylistiterator_class_entry;
Prepare the PHP module for compiling, run:
phpize
Configure the module:
./configure
Build the module:
make
Install the module:
make install
After compiling the module was installed in /Users/USERNAME/tmp/pear/install/gnupg-1.3.3/module
. Because the PHP shared extensions are installed in /usr/lib/php/extensions/no-debug-non-zts-20100525/
, I copied the module:
cp /Users/USERNAME/tmp/pear/install/gnupg-1.3.3/modules/gnupg.so /usr/lib/php/extensions/no-debug-non-zts-20100525/
Add the extension to PHP. Therefore open /etc/php.ini
and add the following lines:
[gnupg]
extension=gnupg.so
Test the extension, by executing the following line:
php -r "print_r(new gnupg());"
Remember this is building from source, so you need the gpgme headers in order to compile the extension. So, look for the dev version of that package: In Linux where I had the same problem that is: gpgme-devel