# Compiler mcrypt sur OSX: erreurs



## Manic (14 Octobre 2007)

Bonjour à tous,

J'ai entrepris d'installer, ou plutôt de compiler avec les sources, les différentes versions d'Apache 2.2.x, de PHP 5.2.x et de MySQL 5.1.x... pas vraiment de problème de ce côté là.

Cependant, j'aimerais recompiler PHP 5 avec l'extention mcrypt, mais mcrypt n'est pas installé sur OSX. J'ai donc compilé/installé ses dépendances (libmcrypt et mhash) et j'ai ensuite essayé de compiler mcrypt lui-même.

D'abord le 'configure' avec la commande suivante:

```
./configure --with-libmcrypt-prefix=/usr/local
```
Pas de problème jusque là.

Ensuite la commande 'make' habituelle... mais impossible de terminer la compilation, des erreurs surviennent:

```
guilthib-osx:~/desktop/mcrypt-2.6.6 guilthib$ make
make  all-recursive
Making all in doc
make[2]: Nothing to be done for `all'.
Making all in src
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT extra.o -MD -MP -MF .deps/extra.Tpo -c -o extra.o extra.c
extra.c: In function 'write_file_head':
extra.c:366: warning: pointer targets in assignment differ in signedness
extra.c: At top level:
extra.c:46: warning: 'rcsid' defined but not used
mv -f .deps/extra.Tpo .deps/extra.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT mcrypt.o -MD -MP -MF .deps/mcrypt.Tpo -c -o mcrypt.o mcrypt.c
mcrypt.c: In function 'check_hash_algo':
mcrypt.c:112: warning: pointer targets in assignment differ in signedness
mcrypt.c: At top level:
mcrypt.c:45: warning: 'rcsid' defined but not used
mv -f .deps/mcrypt.Tpo .deps/mcrypt.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT keys.o -MD -MP -MF .deps/keys.Tpo -c -o keys.o keys.c
keys.c:30: warning: 'rcsid' defined but not used
mv -f .deps/keys.Tpo .deps/keys.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT random.o -MD -MP -MF .deps/random.Tpo -c -o random.o random.c
random.c:27: warning: 'rcsid' defined but not used
mv -f .deps/random.Tpo .deps/random.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT rndunix.o -MD -MP -MF .deps/rndunix.Tpo -c -o rndunix.o rndunix.c
mv -f .deps/rndunix.Tpo .deps/rndunix.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT xmalloc.o -MD -MP -MF .deps/xmalloc.Tpo -c -o xmalloc.o xmalloc.c
xmalloc.c:24: warning: 'rcsid' defined but not used
mv -f .deps/xmalloc.Tpo .deps/xmalloc.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT functions.o -MD -MP -MF .deps/functions.Tpo -c -o functions.o functions.c
mv -f .deps/functions.Tpo .deps/functions.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT errors.o -MD -MP -MF .deps/errors.Tpo -c -o errors.o errors.c
mv -f .deps/errors.Tpo .deps/errors.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT bits.o -MD -MP -MF .deps/bits.Tpo -c -o bits.o bits.c
mv -f .deps/bits.Tpo .deps/bits.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT openpgp.o -MD -MP -MF .deps/openpgp.Tpo -c -o openpgp.o openpgp.c
openpgp.c: In function 'pgp_encrypt_wrap':
openpgp.c:41: warning: pointer targets in passing argument 2 of 'get_password' differ in signedness
openpgp.c: In function 'pgp_decrypt_wrap':
openpgp.c:63: warning: pointer targets in passing argument 2 of 'get_password' differ in signedness
mv -f .deps/openpgp.Tpo .deps/openpgp.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT rndwin32.o -MD -MP -MF .deps/rndwin32.Tpo -c -o rndwin32.o rndwin32.c
rndwin32.c:21: warning: 'rcsid' defined but not used
mv -f .deps/rndwin32.Tpo .deps/rndwin32.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT environ.o -MD -MP -MF .deps/environ.Tpo -c -o environ.o environ.c
environ.c:29: warning: 'rcsid' defined but not used
mv -f .deps/environ.Tpo .deps/environ.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT getpass.o -MD -MP -MF .deps/getpass.Tpo -c -o getpass.o getpass.c
getpass.c: In function 'readpass':
getpass.c:106: warning: pointer targets in assignment differ in signedness
getpass.c: At top level:
getpass.c:31: warning: 'rcsid' defined but not used
mv -f .deps/getpass.Tpo .deps/getpass.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT ufc_crypt.o -MD -MP -MF .deps/ufc_crypt.Tpo -c -o ufc_crypt.o ufc_crypt.c
mv -f .deps/ufc_crypt.Tpo .deps/ufc_crypt.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT popen.o -MD -MP -MF .deps/popen.Tpo -c -o popen.o popen.c
mv -f .deps/popen.Tpo .deps/popen.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT classic.o -MD -MP -MF .deps/classic.Tpo -c -o classic.o classic.c
classic.c: In function 'decrypt_general':
classic.c:941: warning: pointer targets in assignment differ in signedness
classic.c: In function 'print_hashlist':
classic.c:1058: warning: pointer targets in assignment differ in signedness
mv -f .deps/classic.Tpo .deps/classic.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl    -g -O2 -I/usr/local/include -Wall -MT rfc2440.o -MD -MP -MF .deps/rfc2440.Tpo -c -o rfc2440.o rfc2440.c
rfc2440.c:27:20: error: malloc.h: No such file or directory
rfc2440.c: In function 'dek_load':
rfc2440.c:563: warning: pointer targets in passing argument 5 of 'mhash_keygen_ext' differ in signedness
rfc2440.c: In function 'dek_create':
rfc2440.c:614: warning: pointer targets in passing argument 5 of 'mhash_keygen_ext' differ in signedness
rfc2440.c: In function 'symkey_enc_decode':
rfc2440.c:632: warning: pointer targets in passing argument 2 of 'header_decode' differ in signedness
rfc2440.c:632: warning: pointer targets in passing argument 3 of 'header_decode' differ in signedness
rfc2440.c:632: warning: pointer targets in passing argument 4 of 'header_decode' differ in signedness
make[2]: *** [rfc2440.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
```

Si quelqu'un a une idée, je suis preneur!


----------



## ericb2 (14 Octobre 2007)

C'est pourtant écrit dans le log :

gcc -DHAVE_CONFIG_H -I. -I.. -DLOCALEDIR=\"/usr/local/share/locale\" -I../intl -g -O2 -I/usr/local/include -Wall -MT rfc2440.o -MD -MP -MF .deps/rfc2440.Tpo -c -o rfc2440.o rfc2440.c
rfc2440.c:27:20: error: malloc.h: No such file or directory
rfc2440.c: In function 'dek_load':


Configure cherche un fichier malloc.h , et il ne le trouve pas.

Essaye de rajouter :

#ifdef MACOSX
#include <malloc/malloc.h>
#endif 

ATTENTION: j'ai utilisé la constante MACOSX au pif, pour désigner le fait que tu es sous Darwin, mais je ne connais pas le nom de la constant utilisée par configure en fait. Peut être que Darwin est défini comme QUARTZ ou autre chose par configure, et c'est à toi de chercher (c'est quelque poart dans configure.in ou configure je pense.

Dans le pire des cas, remplace :

#include <malloc.h>

par #include <malloc/malloc.h>

...devrait passer

Par ailleurs, tous les warnings précédents sont absolument anormaux, il y a des erreurs de types, des variables définies mais pas utilisées. Ce code n'est pas propre et devrait être imho nettoyé, parce que normalement, *warning == error* .

Enfin, tout ce que j'ai écrit est sous réserve, car je n'ai pas vu le code source que tu compiles 

-- 
ericb


----------



## Manic (14 Octobre 2007)

J'ai r&#233;ussi &#224; compiler mcrypt un peu &#171;&#224; la barbare&#187; en copier malloc.h dans /usr/local/include... j'aurais aim&#233; faire autrement, mais bon.

Le code source provient directement du site de mcrypt: http://mcrypt.sourceforge.net/ la derni&#232;re version (2.6.6).

_Edit:_ j'ai retest&#233; la compilation avec 'make' en changeant #include <malloc.h> par #include <malloc/malloc.h> dans le fichier rfc2440.c et tout fonctionne. et pas de probl&#232;me de recompilation de PHP 5.


----------

