Compiler APC sur Mac OS X 10.6.4

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 oct. 2010, 20:38

Bonjour à tous,

Je viens vous faire part d'un problème qui me bloque depuis maintenant quelques heures.

Mon ordinateur personnel est un MacBook Pro, disposant de Mac OS X (10.6.4), et donc de Apache (2.2) et PHP (5.3.2) pré-installé.
Jusque là, tout allais bien, mais ce jour, pour les besoins d'un projet, j'ai eu besoin d'installer APC.

Du coup, procédure standard, je télécharge les sources, je désarchive, un coup de phpize, je lance un ./configure, puis un make.
Mais là, c'est le drame, j'ai une série d'erreur étrange :

Code : Tout sélectionner

mrandy:APC-3.1.4$ make /bin/sh /Users/mrandy/Downloads/APC-3.1.4/libtool --mode=compile cc -I. -I/Users/mrandy/Downloads/APC-3.1.4 -DPHP_ATOM_INC -I/Users/mrandy/Downloads/APC-3.1.4/include -I/Users/mrandy/Downloads/APC-3.1.4/main -I/Users/mrandy/Downloads/APC-3.1.4 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /Users/mrandy/Downloads/APC-3.1.4/apc.c -o apc.lo mkdir .libs cc -I. -I/Users/mrandy/Downloads/APC-3.1.4 -DPHP_ATOM_INC -I/Users/mrandy/Downloads/APC-3.1.4/include -I/Users/mrandy/Downloads/APC-3.1.4/main -I/Users/mrandy/Downloads/APC-3.1.4 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /Users/mrandy/Downloads/APC-3.1.4/apc.c -fno-common -DPIC -o .libs/apc.o In file included from /Users/mrandy/Downloads/APC-3.1.4/apc.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/mrandy/Downloads/APC-3.1.4/apc.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’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:356: error: expected specifier-qualifier-list before ‘pcre’ /Users/mrandy/Downloads/APC-3.1.4/apc.c: In function ‘apc_regex_compile_array’: /Users/mrandy/Downloads/APC-3.1.4/apc.c:417: error: ‘apc_regex’ has no member named ‘preg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:417: error: ‘apc_regex’ has no member named ‘preg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:418: error: ‘apc_regex’ has no member named ‘nreg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:418: error: ‘apc_regex’ has no member named ‘nreg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c: In function ‘apc_regex_match_array’: /Users/mrandy/Downloads/APC-3.1.4/apc.c:450: error: ‘apc_regex’ has no member named ‘preg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:450: error: ‘apc_regex’ has no member named ‘preg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:451: error: ‘apc_regex’ has no member named ‘nreg’ /Users/mrandy/Downloads/APC-3.1.4/apc.c:451: error: ‘apc_regex’ has no member named ‘nreg’ make: *** [apc.lo] Error 1
Après quelques recherches, je tombe sur une série d'articles qui me disent qu'il y a des subtilité pour le configure sous mac.
A nouveau quelques recherches et je tombe sur un ligne à taper sous Mac OS X :

Code : Tout sélectionner

MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -bind_at_load" ./configure
Je suis loin de tout maitriser, mais il me semble que cette commande ne fait que forcer le type d'architecture pour un processeur 64 bits, ce qui sera ok puisque j'ai un Intel I7.

Mais, à nouveau, c'est le drame, puisqu'en recommençant l'opération de 0 (phpize, puis la commande donnée ci-dessus), j'ai directement une erreur :

Code : Tout sélectionner

mrandy:APC-3.1.4$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" CXXFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -g -Os -pipe" LDFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64 -bind_at_load" ./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... /usr/bin/sed checking for cc... cc checking whether the C compiler works... no configure: error: in `/Users/mrandy/Downloads/APC-3.1.4': configure: error: C compiler cannot create executables See `config.log' for more details.
Et quand je jete un oeil dans le config.log, les seules lignes importantes me semblent être les suivantes :

Code : Tout sélectionner

lipo: can't open input file: /var/folders/ME/MEt-mlZRHJ06H4rkshxt1++++TI/-Tmp-//ccnEHJIz.out (No such file or directory) configure:3039: $? = 1 configure:3077: result: no configure: failed program was: ù /* confdefs.h */ ù £define PACKAGE_NAME "" ù £define PACKAGE_TARNAME "" ù £define PACKAGE_VERSION "" ù £define PACKAGE_STRING "" ù £define PACKAGE_BUGREPORT "" ù £define PACKAGE_URL "" ù /* end confdefs.h. */ ù ù int ù main () ù é ù ù ; ù return 0; ù è configure:3082: error: in `/Users/mrandy/Downloads/APC-3.1.4': configure:3086: error: C compiler cannot create executables See `config.log' for more details.
Voir ici pour le config.log complet

Et là, j'avoue que je bloque totalement.
Je ne comprend pas l'erreur avec la procédure standard, je ne comprend pas pourquoi je suis obligé de spécifier que je suis sur une architecture 64bits alors que le système doit le savoir.
Bref, dans tout les cas, je suis bien paumé, mais je voudrais comprendre ce qui ne marche pas.

Du coup, je viens implorer votre aide bienveillante.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1136 Messages

03 oct. 2010, 21:17

Slt,

J'ai exactement la même conf que toi ,

as tu installé les paquets Xcode ?

je viens à l'instant de compiler la derniére version d'APC , celle-ci s'est effectuée correctement , ( compilation du module simple à inclure dans le php.ini ).

Voici mes étapes ( désolé de répéter ce que tu sais déjà mais c'est pour ceux qui ne savent pas et qui veulent tester ):

1 telecharger les sources ici

2 extraire l'archive :

Code : Tout sélectionner

tar xzf APC-3.1.4.tar
3 créer le fichier de configuration à la compilation

Code : Tout sélectionner

cd APC-3.1.4 vim my_configure
Voilà les lignes que j'ai ajouté :

Code : Tout sélectionner

#!/bin/sh phpize ./configure \ --enable-apc-mmap
4 Rendre ce fichier executable

Code : Tout sélectionner

chmod 777 my_configure
5 le lancer :

Code : Tout sélectionner

./my_configure
6 le make et make install habituel

Code : Tout sélectionner

make make install
Puis modifier le php.ini pour l'intégrer .

source : http://www.lindev.fr

Ch.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 oct. 2010, 21:30

Merci de ton intervention.
Donc, en suivant ta technique (l'option --enable-apc-mmap en plus), j'ai le même soucis lors du make

Concernant Xcode, j'ai installé les paquets fournis dans le CD fourni avec le Mac, j'ai fait la dernière mise à jour (quelques semaines) et ma version (3.2.3) est la plus récente :/
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1136 Messages

03 oct. 2010, 21:33

Arf .. :-s

Tu as essayé de lancer ton make en utilisateur root ?

ViPHP
ViPHP | 1136 Messages

03 oct. 2010, 21:41

essaye d'installer pcre via mac port

Code : Tout sélectionner

port install pcre
Car d'apres tes logs les libs pcre manquent pour la compilation .. étonnant que ce ne soit pas apparu pendant le ./configure

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

03 oct. 2010, 21:55

PCRE n'était effectivement pas installé.
Toutefois, même après installation, en passant pas sudo ou pas, toujours la même erreur
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5462 Messages

04 oct. 2010, 00:28

Code : Tout sélectionner

sudo pecl install apc-beta
:wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2010, 09:40

Merci pour ta réponse, j'essayerais ce soir (quand j'aurais la machine entre les doigts)

Par contre, j'ai lu à plusieurs reprise que l'installation via pecl était toute buggée et qu'elle ne fonctionnait que pour le mode CLI
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5462 Messages

04 oct. 2010, 09:54

Merci pour ta réponse, j'essayerais ce soir (quand j'aurais la machine entre les doigts)

Par contre, j'ai lu à plusieurs reprise que l'installation via pecl était toute buggée et qu'elle ne fonctionnait que pour le mode CLI
jamais eu de problème de mon coté, pour le mode CLI c'est juste que pecl fonctionne en CLI, mais ton extension marchera comme toutes les autres :wink:


ps : rien a voir mais si t'utilises doctrine y'a une petite extension ici : http://svn.doctrine-project.org/pecl/trunk/ (a faire avec phpize)

EDIT : par contre attention les extension qui sont dans le bundle en shared c'est un peu bizarre (mcrypt, intl par exemple), dans se cas la il faut recompiler le tout http://fg.jeveuxduweb.com/2009/09/compi ... w-leopard/
Modifié en dernier par stealth35 le 04 oct. 2010, 09:57, modifié 2 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2010, 09:55

OK, je te tiendrais au courant ce soir.

Sinon, que fais ton extension ? (je suis au taf, je n'ai pas le temps de faire une recherche là dessus :oops:)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5462 Messages

04 oct. 2010, 10:09

OK, je te tiendrais au courant ce soir.

Sinon, que fais ton extension ? (je suis au taf, je n'ai pas le temps de faire une recherche là dessus :oops:)
pour l'instant ça fait pas grand chose
t'as la fonction doctrine_populate_data, qui est écrite en C donc c'est plus rapide, et y'a un class Doctrine\Common\Lexer qui sert pour Doctrine 2
petit a petit on va arriver avec avoir tout le doctrine en pecl
<?php


class User {

    public $username; 
    public $foobar;
    private $email;
    protected $address;
    
}

$user = new User;

$data = array("username" => "Marcelo Santos Araujo", 
              "email" => "[email protected]", 
              "laranja" => "laranja", 
              "foobar" => '', 
              "address" => array("a","b"));

doctrine_populate_data($user, $data);

var_dump($user);


?>

ViPHP
ViPHP | 1136 Messages

04 oct. 2010, 10:17

Juste pour mon info perso ,

quelle est la différence entre l'utilisation de pecl pour l'installation d'un module , ou la compilation à la mano ?

Car pecl install fait de façon automatisé les étapes de compilation expliqué ci-desuss non ?

ViPHP
ViPHP | 5462 Messages

04 oct. 2010, 10:23

Juste pour mon info perso ,

quelle est la différence entre l'utilisation de pecl pour l'installation d'un module , ou la compilation à la mano ?

Car pecl install fait de façon automatisé les étapes de compilation expliqué ci-desuss non ?
pecl fait tout automatiquement (flag, compile, nettoyage), il ajoute l'extension dans le bon dossier, et peu meme rajouter la ligne dans le php.ini
ensuite comme pour pear tout est stocker, donc on peux faire un par la suite "sudo pecl upgrade-all" il va installer tout les mises a jour des extensions

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 oct. 2010, 22:55

Bon, alors, en passant par pecl, même erreur (j'ai laissé les choix par défaut)

Je vais tenter de recompiler PHP comme le dit le lien que tu me donnes.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 5462 Messages

05 oct. 2010, 14:05

tu t'en sort ?
sinon t'as regarder dans le le "./configure --help" si y'a une option pour pointer vers le un pcre, la version de php dans OSX pointe sur une lib qui n'existe pas, t'as 2 options pour ca quand tu compiles php : sois avec une lib a part, sois avec la lib fournis par les sources de php