Obligement - L'Amiga au maximum

Vendredi 17 novembre 2017 - 22:17  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : C - compiler/porter THTTPd sur AmigaOS 3.x
(Article écrit par Yann-Gaël Guéhéneuc et extrait de wiki.shingu.yann-gael.gueheneuc.net - juillet 2012)


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" :

php-4.2.3> ./configure --with-thttpd=../thttpd-2.21b --without-mysql --disable-xml

Changez "main/php_config.h" pour éliminer les collisions entre déclarations :

/* Define if your struct tm has tm_zone. */
/* Tygre 2011/11/13 */
#undef HAVE_TM_ZONE

/* whether you have tm_gmtoff in struct tm */
/* Tygre 2011/11/13 */
#undef HAVE_TM_GMTOFF

/* Define if you have the statfs function. */
/* Tygre 2011/11/13 */
#undef HAVE_STATFS

Pour obtenir l'objet bibliothèque PHP "./.libs/libraryphp4.a" :

php-4.2.3> make

THTTPd

Pour configurer "thttpd" :

thttpd-2.21b> ./configure

Pour compiler "thttpd" :

thttpd-2.21b> ./make

Pour exécuter "thttpd" :

thttpd-2.21b> ./thttpd.exe -C thttpd.conf

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 :

> m68k-amigaos-gcc -v

...alors j'obtiens :

Reading specs from /usr/local/amiga/lib/gcc/m68k-amigaos/3.4.0/specs
Configured with: ../gcc-3.4.0/configure --prefix=/usr/local/amiga --target=m68k-amigaos --enable-eptions --disable-shared --disable-libstdcxx-pch
Thread model: single
gcc version 3.4.0

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 :

configure.ac --.   .------> autoconf* -----> configure
               +---+
[aclocal.m4] --+   `---.
[acsite.m4] ---'       |
                       +--> [autoheader*] -> [config.h.in]
[acconfig.h] ----.     |
                 +-----'
[config.h.top] --+
[config.h.bot] --'

Ainsi, pour générer "configure", vous devez avoir "autoconf v2.13" et utiliser la commande suivante :

php-4.2.3> export WANT_AUTOCONF=2.1

...pour être sûr que "autoconf" v2.13 est bien utilisé, puis :

php-4.2.3> autoconf

...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 :

php-4.2.3> autoheader

...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 :

php-4.2.3> export CFLAGS="-m68020 -g"

Ou :

php-4.2.3> export CFLAGS="-m68020 -g -O2"

Ou n'importe quel autre ensemble de paramètres à votre guise.

php-4.2.3> AR=/usr/local/amiga/bin/m68k-amigaos-ar.exe
CC="/usr/local/amiga/bin/m68k-amigaos-gcc.exe"
LD=/usr/local/amiga/bin/m68k-amigaos-ld.exe
NM=/usr/local/amiga/bin/m68k-amigaos-nm.exe
RANLIB=/usr/local/amiga/bin/m68k-amigaos-ranlib.exe
./configure
--with-thttpd=../thttpd-2.21b --disable-shared --disable-xml
--enable-cli --without-pear --without-mysql
--with-config-file-path="/THTTPd/"

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 terme 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 :

# The archiver.
AR="/usr/local/amiga/bin/m68k-amigaos-ar.exe"

...

# The default C compiler.
CC="/usr/local/amiga/bin/m68k-amigaos-gcc.exe"

...

# The linker used to build libraries.
LD="/usr/local/amiga/bin/m68k-amigaos-ld.exe"

...

# A BSD-compatible nm program.
NM="/usr/local/amiga/bin/m68k-amigaos-nm.exe -B"

...

RANLIB="/usr/local/amiga/bin/m68k-amigaos-ranlib.exe"

(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 :

extern void __eprintf (const char *, const char *, unsigned, const char *)
   __attribute__ ((noreturn));

En :

/* extern void __eprintf (const char *, const char *, unsigned, const char *)
   __attribute__ ((noreturn));
*/

(ADFY) Ajouter la fonction suivante à "sapi/cli/getopt.c" :

    void
    __eprintf (
         const char *format,
         const char *file,
         int line,
         const char *expression)
    {
      (void) fprintf (stderr, format, file, line, expression);
      abort ();
      /*NOTREACHED*/
    }

(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 :

php-4.2.3> make AR=/usr/local/amiga/bin/m68k-amigaos-ar.exe
CC="/usr/local/amiga/bin/m68k-amigaos-gcc.exe"
LD=/usr/local/amiga/bin/m68k-amigaos-ld.exe
NM=/usr/local/amiga/bin/m68k-amigaos-nm.exe
RANLIB=/usr/local/amiga/bin/m68k-amigaos-ranlib.exe

Ne vous inquiétez pas des alertes, entre autres :

libtool: link: warning: undefined symbols not allowed in i686-pc-cygwin shared libraries

(FYTD) L'interpréteur est dans "sapi/cli/php.exe". Pour le tester en utilisant (par exemple) WinUAE, tapez dans un Shell :

php-4.2.3> php sapi/cli/php_info.php

Pour le tester à fond en utilisant (encore par exemple) WinUAE, faites dans un Shell :

php-4.2.3> php -d php.ini-dist run-tests.php

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 :

thttpd-2.21b> patch -Nbp2 --verbose < thttpd-2.21b-p22.patch

(FYTD) Pour configurer "thttpd", utilisez la commande :

thttpd-2.21b> export CFLAGS="-m68020 -g"

Ou :

thttpd-2.21b> export CFLAGS="-m68020 -g -O2"

Ou n'importe quel autre ensemble de paramètres à votre guise.

thttpd-2.21b> AR=/usr/local/amiga/bin/m68k-amigaos-ar.exe
CC="/usr/local/amiga/bin/m68k-amigaos-gcc.exe"
LD=/usr/local/amiga/bin/m68k-amigaos-ld.exe
NM=/usr/local/amiga/bin/m68k-amigaos-nm.exe
RANLIB=/usr/local/amiga/bin/m68k-amigaos-ranlib.exe
./configure

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 :

PHP_LIBS = -L. \
    -L../php-4.2.3/.libs/ \
    -lphp4 -lphp4cli \
    -L/usr/local/amiga/m68k-amigaos/lib/ \
    -lamiga -lc \
    -L/usr/local/amiga/m68k-amigaos/lib/libnix \
    -lstubs -lnix -lcrypt -lm
PHP_LDFLAGS =
PHP_CFLAGS = -I. \
    -I../php-4.2.3/ \
    -I../php-4.2.3/main \
    -I../php-4.2.3 \
    -I../thttpd-2.21b \
    -I../php-4.2.3/Zend \
    -I../php-4.2.3/ext/xml/expat \
    -I../php-4.2.3/TSRM \
    -g -O2 -I../php-4.2.3/TSRM

(ADFY) Ajoutez la fonction suivante dans "extras/htpasswd.c" :

    static int getline(char *s, int n, FILE *f) {
        register int i=0;

        while(1) {
            s[i] = (char)fgetc(f);

            if(s[i] == CR)
                s[i] = fgetc(f);

            if((s[i] == 0x4) || (s[i] == LF) || (i == (n-1))) {
                s[i] = '\0';
                return (feof(f) ? 1 : 0);
            }
            ++i;
        }
    }

(FYTD) Pour compiler "thttpd", utilisez la commande suivante :

thttpd-2.21b> make AR=/usr/local/amiga/bin/m68k-amigaos-ar.exe
CC="/usr/local/amiga/bin/m68k-amigaos-gcc.exe"
LD=/usr/local/amiga/bin/m68k-amigaos-ld.exe
NM=/usr/local/amiga/bin/m68k-amigaos-nm.exe
RANLIB=/usr/local/amiga/bin/m68k-amigaos-ranlib.exe

(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.


[Retour en haut] / [Retour aux articles]