|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Voici les étapes pour recompiler/porter THTTPd v2.21b + PHP v4.2.3 sur AmigaOS 3.x. Ces étapes ont été toutes validées : le résultat que vous obtiendrez à la fin est visible sur ces pages, qui sont gérées avec THTTPd et PHP sur Amiga. Ces étapes font l'hypothèse que vous avez installé GCC v3.4.0 pour faire de la compilation croisée sur votre Windows/Cygwin et les Geek Gadgets sur votre Amiga, pour tester PHP. Téléchargement Vous pouvez télécharger le code source de THTTPd v2.21b + PHP v4.2.3, incluant les exécutables obtenus en suivant les étapes ci-dessous, ici. Cette archive contient tout ce dont vous avez besoin pour exécuter et recompiler ces versions de THTTPd et PHP, incluant les étapes ci-dessous et un fichier résumant les différences entre le contenu de cette archive et le code source original de THTTPd et PHP disponible sur Aminet. Si vous trouvez un quelconque problème, s'il vous plaît prévenez-moi ! Sans compilation croisée PHP Pour configurer la compilation de PHP, en particulier pour annoncer qu'on le compile pour "thttpd" :
Changez "main/php_config.h" pour éliminer les collisions entre déclarations :
Pour obtenir l'objet bibliothèque PHP "./.libs/libraryphp4.a" :
THTTPd Pour configurer "thttpd" :
Pour compiler "thttpd" :
Pour exécuter "thttpd" :
Compilation croisée Acronymes utilisés pour la suite de cet article : FYTD : à vous de le faire. ADFY : déjà fait pour vous. O : optionnel. Attention ! Lorsque j'entre dans la console Cygwin :
...alors j'obtiens :
Geek Gadgets (FYTD) Suivez les instructions dans "BOOT.lha.readme". Vous aurez besoin des Geek Gadgets pour exécuter PHP sur votre Amiga, en particulier pour exécuter les tests. PHP (FYTD) Installez FLex/Bison dans Cygwin s'ils ne sont pas déjà présents. (FYTD) Téléchargez et installez "libcrypt.a" depuis Aminet, typiquement dans "/usr/local/amiga/m68k-amigaos/lib/libcrypt.a". (ADFY) Si vous faites de la compilation croisée Cygwin-AmigaOS, alors "configure" considère toujours que "sprintf" n'est pas cassé. Je me suis aperçu que, dans ma configuration, "sprintf" est cassé alors j'ai changé le résultat retourné en cas de compilation croisée dans "aclocal.m4" et "zend/acinclude.m4". (ADFY) Lié au "sprintf" cassé, PHP, et en particulier à son module Zend, appelait "sprintf" au lieu de "zend_sprintf", lequel gère correctement les paramètres "variadic" : eab.abime.net/showthread.php?t=53987. J'ai remplacé tous ces appels avec des appels à "zend_sprintf" pour éviter les "hits" dans Enforcer et la corruption de la mémoire qui amène le Guru à méditer... (ADFY) Souvenez-vous que la chaîne de compilation se décompose en de nombreuses étapes. Voir www.gnu.org/s/hello/manual/autoconf/acconfig-Header.html et en particulier les explications pour :
Ainsi, pour générer "configure", vous devez avoir "autoconf v2.13" et utiliser la commande suivante :
...pour être sûr que "autoconf" v2.13 est bien utilisé, puis :
...qui utilise les fichiers m4, en particulier le fichier aclocal.m4. Vous devez utiliser "autoconf v2.13" parce que : bugs.php.net/bug.php?id=50291 et dmatwork.blogspot.com/2010/05/errors-when-installing-php-53-with-fpm.html. Voyez aussi : lists.gnu.org/archive/html/autoconf/2008-03/msg00093.html et ensuite utilisez la commande suivante :
...qui génère les fichiers "h.in" appropriés, en particulier "main/php_config.h.in", lequel sera utilisé à son tour quand on appelle "configure" (ci-dessous) pour obtenir les fichiers d'en-tête. (FYTD) Pour configurer la compilation de PHP, en particulier pour annoncer qu'on le compile pour "thttpd", utilisez les commandes :
Ou :
Ou n'importe quel autre ensemble de paramètres à votre guise.
Ces commandes vont créer les différents fichiers ".h et "makefile" requis pour compiler PHP. Elles font l'hypothèse que le fichier de configuration de PHP "php.ini" est logé dans "/THTTPd/" (c'est-à-dire "THTTPd:" en termes AmigaOS). Vous pouvez utiliser "--enable-debug" mais cette option peut amener à des erreurs mémoire à cause des "sprintf" utilisés pour construire et afficher les informations de débogage. Les paramètres de GCC doivent être choisis avec soin, en suivant les explications sur : gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/M680x0-Options.html. Le choix du processeur, e.g., "-m68020", peut amener GCC à croire qu'une FPU est disponible ! (FYTD, O) Assurez-vous que "libtool" contient les lignes suivantes :
(FYTD) Pour une raison inconnue, la fonction "_eprintf" est déclarée et utilisée dans "assert.h" mais absente dans "libgcc.a", comparez "nm /usr/local/amiga/lib/gcc/m68k-amigaos/3.4.0/libgcc.a" avec "nm /usr/local/amiga/lib/gcc-lib/m68k-amigaos/2.95.3/libgcc.a". Aussi, vous devez ajouter cette fonction dans "sapi/cli/getopt.c" (voir la prochaine étape) mais aussi supprimer sa déclaration de "assert.h" sans quoi vous recevrez une erreur disant que cette fonction est déjà déclarée. Vous devez modifier le fichier "/usr/local/amiga/m68k-amigaos/include/assert.h" pour commenter les lignes 30 et 31, de :
En :
(ADFY) Ajouter la fonction suivante à "sapi/cli/getopt.c" :
(ADFY) Assurez-vous que les fonctions mathématiques suivantes dans "ext/standard/math.c" se compilent. Une solution est de les remplacer dans un premier temps par quelques autres fonctions qui se compilent : asinh -> sinh acosh -> cosh ... (FYTD) Pour obtenir l'objet bibliothèque PHP "./.libs/libraryphp4.a" et l'interpréteur en ligne de commande, utilisez :
Ne vous inquiétez pas des alertes, entre autres :
(FYTD) L'interpréteur est dans "sapi/cli/php.exe". Pour le tester en utilisant (par exemple) WinUAE, tapez dans un Shell :
Pour le tester à fond en utilisant (encore par exemple) WinUAE, faites dans un Shell :
Quelques tests ne peuvent pas passer : OO Bug Test (Bug #7515) (029.phpt) ... failed Voir bugs.php.net/bug.php?id=60376. THTTPd (ADFY) Appliquez la rustine 22 (P22) qui corrige des problèmes lorsque de trop grands fichiers sont traités par "thttpd" en utilisant la commande :
(FYTD) Pour configurer "thttpd", utilisez la commande :
Ou :
Ou n'importe quel autre ensemble de paramètres à votre guise.
Les paramètres de GCC doivent être choisis avec soin, en suivant les explications sur : gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/M680x0-Options.html. Le choix du processeur, e.g., "-m68020", peut amener GCC à croire qu'une FPU est disponible ! (ADFY) Changez le fichier "php_makefile" pour lier PHP et les bibliothèques Amiga :
(ADFY) Ajoutez la fonction suivante dans "extras/htpasswd.c" :
(FYTD) Pour compiler "thttpd", utilisez la commande suivante :
(ADFY) Pour exécuter THTTPd et utiliser PHP dans votre serveur Web, la directive PHP "register_argc_argv" doit être à "Off", sinon "phpinfo();" va dépasser le délai maximal "max_execution_time". Remerciements Cette recompilation/portage n'aurait pas été possible sans l'aide de beaucoup de monde, incluant mais pas limité à : ACME Labs, Joachim Birging, Leffmann, Matthey, NovaCoder, Toni Wilen, Trumo.
|