vendredi 6 février 2009

Installer GD à PHP5 sur Mac OS X Server Leopard 10.5.x

Ce qui nous intéresse aujourd'hui est la compilation de l'extension GD pour PHP5. L'environnement doit être :
- Mac Os X Léopard 10.5.3 (ou plus) et Mac OS X Léopard Server
- Xcode 3.x
- X11
- X11 SDK
- Apache 2
- PHP 5


Mac Os X ne dispose pas en natif de la librairie JPEG. Il faut donc commencer par la compiler et l'installer. Pour ce faire :
1) Ouvrez le terminal
2) tapez les commandes suivantes (sans le $):
$ mkdir -p /SourceCache
$ cd /SourceCache
$ curl -O http://www.ijg.org/files/jpegsrc.v6b.tar.gz

Note : La dernière commande permet de télécharger le fichier et l'enregistrer dans le dossier SourceCache qui se trouve à la racine du disque dur. Il est possible de télécharger l'archive par le navigateur. Enregistrez l'archive dans le dossier SourceCache qui est à la racine du disque dur. Puis décompressez le !

3) Nous allons maintenant décompressez l'archive si vous ne l'avez pas déjà fait :
$ tar xzpf jpegsrc.v6b.tar.gz

4) Nous allons rentrez dans le dossier puis préparer la compilation de la librairie :
$ cd /SourceCache/jpeg-6b
$ cp /usr/share/libtool/config.sub .
$ cp /usr/share/libtool/config.guess .

Les deux dernière commande permettent de copier des fichiers dans le dossier en cours. Il faut bien mettre la commande complète avec le "." (point).

Maintenant les choses se complique un peu ! Il va falloir connaitre n'architecture de votre Mac. Pour cela allez dans le menu pomme puis "A propos de ce Mac".

Si en face de processeur vous avez :
- PowerPC G3 (très tare)
- PowerPC G4
- Core Duo
- Pentium 4 (parfois écrit P4)
Et bien votre ordinateur a une architecture 32 bits !

Si vous avez :
- PowerPC G5
- Core 2 Duo
- Xeon
Et bien votre ordinateur a une architecture 64 bits !





5) Maintenant que vous connaissez votre architecture choisissez la commande pour préparer la compilation selon votre cas :

Architecture 32 bits :
$ ./configure --enable-shared

Architecture 64 bits :
$ 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 --enable-shared
Attention : tout doit être sur la même ligne !

6) La compilation :
$ make

7) Préparation à l'installation :
$ sudo mkdir -p /usr/local/include
$ sudo mkdir -p /usr/local/bin
$ sudo mkdir -p /usr/local/lib
$ sudo mkdir -p /usr/local/man/man1

Note : lors de la première utilisation de "sudo" il vous demandera votre mot de passe tapez-le. Vous avez droit à 3 essai avant que cela annule la commande ! Rien ne s'affiche lors de la saisie du mot de passe et c'est normal !

8) Installation :
$ sudo make install

Maintenant les pré-requis pour la compilation de GD en temps que module de PHP est complète ! Nous allons pouvoir nous concentrer sur PHP et GD :

1) Le terminal est encore ouvert (si c'est pas le cas ouvrez le)
2) Retournons dans notre cache de code source :
$ cd /SourceCache

3) On télécharge les sources de PHP. Les sources contiennent les dossiers d'extension pour PHP.
Nous le téléchargeons là ou Apple à mis à disposition les codes sources de la partie libre de Mac Os X ! Il pèse 7,5Mo environ !
$ curl -O http://www.opensource.apple.com/darwinsource/10.5.2/apache_mod_php-44/php-5.2.5.tar.bz2

4) On décompresse :
$ tar xjf php-5.2.5.tar.bz2

5) On rentre dans le dossier de PHP puis des extensions puis GD :
$ cd /SourceCache/php-5.2.5/ext/gd

6) on prépare l'extension à devenir une extension de PHP avec la commande :
$ phpize

Note : si la commande indique des erreurs de permission exécutez : "$ sudo phpize" et saisissez votre mot de passe. Sudo garde le mot de passe 5 minutes. Passez ce délai il redemande le mot de passe pour continuer.

7) Encore une fois choisissez la commande qui correspond à votre architecture :
Architecture 32 bits :
$ ./configure --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6 --with-xpm-dir=/usr/X11R6

Architecture 64 bits :
$ 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 --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6 --with-xpm-dir=/usr/X11R6

Note : Selon certain critère pas très bien connu, il arrive que la commande génère l'erreur suivante : "/usr/X11/lib/libpng12.0.26.0.dylib: No such file or directory". Dans ce cas éditez le fichier : "/usr/X11/lib/libpng.la" par la commande : "$ sudo pico /usr/X11/lib/libpng.la".
Rechezchez les lignes :
library_names='libpng12.0.dylib libpng12.dylib libpng12.0.26.0.dylib'
current=26
age=26

et remplacez les par :
library_names='libpng12.0.dylib libpng12.dylib libpng12.0.24.0.dylib'
current=24
age=24

Attention : évitez le copier-coller ! Des caractères spéciaux pourait géner !
Note : l'utilisation de pico se fait avec les racourcis suivant : Ctrl + W pour faire une recherche; Ctrl + O pour enregistrer le fichier; Ctrl + X pour quitter.

8) Compilation de l'extension :
$ make

9) Installation de l'extension :
$ sudo make install

Résultat de l'installation :
iMac-G5:gd admin $ sudo make install Password: Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20060613/ Installing header files: /usr/include/php/

Copier le chemin se trouvant après : "Installing shared extensions: ". Cela sera utile pour la configuration de PHP.


10) configuration de PHP pour prendre en compte les extensions.
$ sudo pico /etc/php.ini

La première chose à faire est de rechercher (raccourci : Ctrl + W ) le texte : "extension_dir" (sans les guillemets).
La valeur par défaut est : extension_dir = "./"
Mettez un ; (point-virgule) au début de la ligne pour la désactivez puis saisissez : extension_dir = ""
et collez entre les guillemet le chemin que vous avez copier avant d'éditer le fichier de configuration de PHP.
Cela doit donner :
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20060613/"

Puis faire une recherche de "extension="
Avant la ligne "; Windows Extensions" ajoutez des lignes vide et sur l'une d'elle écrivez :
extension=gd.so

Maintenant enregistrez (Ctrl + O puis entrée) puis quittez pico (Ctrl + X).

Dernière chose : redémarrer le serveur Apache par la commande :
$ sudo apachectl restart

Un petit test pour voir si PHP charge bien la l'extension ?
tapez dans le terminal :
$ php -i|grep -i gd

Note : la barre vertical s'obtiens par le raccourcis : alt (option) + Maj + L

Le résultat doit être à quelque chose près :
gd GD Support => enabled GD Version => bundled (2.0.34 compatible)

Si rien n'apprait c'est que l'extension n'est pas chargé!
Autre moyen de le savoir :
1) tapez dans le terminal :
$ echo "" > /Library/WebServer/Documents/info.php
2) puis dans safari allez à l'adresse : http://localhost/info.php
3) Cherchez GD. Si vous l'avez, l'extension est chargé !

Merci d'avoir suivi mon tutoriel. Il est le résultat d'une journée de travail ! N'hésitez pas à me faire part de vos retour !

11 commentaires:

Anonyme a dit…

Bonjour,

Merci pour ce tuto vraiment utile. j'ai fait l'installation en moins d'une heure et sans pbs particulier.

La seul chose, je suis OS X server 10.5.6 et le fichier "php.ini" n'existe pas dans ce cas là. Il est géré par l'OS et la config. est dans "php.ini.default". Donc pour les deux paramètres "extension_dir" et "extension" j'ai créé un fichier php.ini vide et j'y ai mis les deux lignes. A priori ça à l'aide de marcher.

Merci encore

Buzzer

Wisky a dit…

Merci. Quand le fichier php.ini n'existe pas il faut le créer en copiant le fichier php.ini.default par la commande :
cp php.ini.default php.ini

Anonyme a dit…

Bonjour,

et merci pour les articles que vous écrivez et celui-ci en particulier.

je cherche effectivement à installer GD à PhP5 sous Mac OS X Server 10.5.4.
Dans votre article, je bute sur la commande
cp /usr/share/libtool/config.sub .
et sur la commande suivante.

Contrairement à Mac OS X, le dossier Libtool n'existe pas à cet endroit.

Pourriez-vous m'aider ?

D'avance merci,

Windrinker

Anonyme a dit…

Bonjour,

et merci pour les articles que vous écrivez et celui-ci en particulier.

je cherche effectivement à installer GD à PhP5 sous Mac OS X Server 10.5.4.
Dans votre article, je bute sur la commande
cp /usr/share/libtool/config.sub .
et sur la commande suivante.

Contrairement à Mac OS X, le dossier Libtool n'existe pas à cet endroit.

Pourriez-vous m'aider ?

D'avance merci,

Windrinker

Unknown a dit…

Merci infiniment pour ce tutoriel limpide ! Ca a fonctionné sans problème. Bravo !!!

Cédric a dit…

Très fort ce tuto ! Bien expliqué et complet, le plus long pour moi a été de récupérer l'image de Xcode ;-)
MERCI !

KanKan a dit…

Bonjour et merci pour cet excellent tuto
Tout s'est bien déroulé jusqu'a la fin.

Ce que je ne comprend pas c'est que mon fichier d'info PHP ne m'affiche pas la présence de GD.

De même, le script que j'essaie d'installer me mentionne l'absence de GD.

Une idée ?

padbrest (@me.com) a dit…

Très bien le tuto, je l'avais utilisé il y a quelques mois pour installer GD sur un MacBook tout neuf.
Mais...
on ne trouve plus qu'une version 7 :
jpegsrc.v7.tar.gz
et là, à l'étape "make" (en 64bits) horreur :
make all-am
CC jaricom.lo
gcc-4.0: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags
make[1]: *** [jaricom.lo] Error 1
make: *** [all] Error 2

Y'a moyen de s'en sortir ?

Merci !!!

Wisky a dit…

@ Windrinker
Pour la commande de copie il faut bien avoir un espace avant le point final. Il faut également être dans le bon dossier.

@ Gentil Dictateur
Vérifier la présence des fichiers installé et la présence des librairies. Il est aussi possible que l'extension PHP n'ait pas été chargé au lancement. Attention également au chemin racine de l'emplacement des extensions PHP.


@ padbrest
Je vais tenter de re-compiler la nouvelle version de la librairie JPEG. Pour voir d'où cela viens.

Merci de tous vos commentaires !

stef a dit…

Pour infos complémentaires, je viens de compiler l'ensemble sous architecture 64bits avec libjpeg version 7.

Pour passer outre l'erreur de compilation de libjpeg : "gcc-4.0: -E, -S, -save-temps and -M options are not allowed with multiple -arch flags", il suffit de rajouter l'option --disable-dependency-tracking au niveau de la configuration.


$ 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 --enable-shared --disable-dependency-tracking


Le reste des commandes suivantes restent inchangées…

Wisky a dit…

Merci stef.
Je viens de l'apprendre pour compiler GPUtils. Elle est bien pratique !

Voir mon billet : Compiler GPUtils en Universal Binary