Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 109459 Details for
Bug 165473
[fr] autofailure french translation
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
updated again
autofailure.xml (text/plain), 15.36 KB, created by
Alexis Ballier
on 2007-02-07 20:22:39 UTC
(
hide
)
Description:
updated again
Filename:
MIME Type:
Creator:
Alexis Ballier
Created:
2007-02-07 20:22:39 UTC
Size:
15.36 KB
patch
obsolete
><?xml version="1.0" encoding="UTF-8"?> ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> ><!-- $Header: /var/cvsroot/gentoo/xml/htdocs/proj/en/qa/autofailure.xml,v 1.5 2006/10/28 16:10:58 flameeyes Exp $ --> > ><guide link="/proj/fr/qa/autofailure.xml" lang="fr"> ><title>Comment corriger les échecs des autotools</tillés> > ><author title="Auteur"> > <mail link="flameeyes@gentoo.org">Diego Pettenò</mail> ></author> > ><author title="Traducteur"> > <mail link="aballier@gentoo.org">Alexis Ballier</mail> ></author> > ><abstract> >Ce guide a pour but de décrire les situations courantes qui causent >des erreurs lors de l'appel aux autotools dans un ebuild et de donner >des conseils sur comment les corriger. ></abstract> > ><!-- The content of this document is licensed under the CC-BY-SA license --> ><!-- See http://creativecommons.org/licenses/by-sa/2.5 --> ><license/> > ><version>0.5</version> ><date>2006-10-28</date> > ><chapter> <!-- Introduction --> ><title>Introduction</title> > ><section> ><body> > ><p> >Par le terme <e>autotools</e> on se réfère usuellement aux outils >développés par le projet GNU pour créer des systèmes de compilation >indépendants de la plate-forme et du système, <c>autoconf</c>, ><c>automake</c> et <c>libtool</c>. Même si chaque paquet ne les >utilisent tous en même temps, la plupart des modernes le font. Souvent, >de plus vieux paquets n'utilisent pas <c>automake</c> et <c>libtool</c> ; >Les paquets KDE utilisent un système de compilation plus complexe qui >dépend au final des trois logiciels cités plus haut. ></p> > ><p> >Il est aisé de reconnaître un paquet dont le système de compilation est >basé sur les autotools : s'il y a un script <path>configure</path>, et un >fichier <path>configure.in</path> ou <path>configure.ac</path>, le >système de compilation est basé sur <c>autoconf</c> ; s'il y a un ou >plusieurs fichiers <path>Makefile.am</path> dans divers >sous-répertoires, il est aussi basé sur <c>automake</c> ; s'il y a un >script <path>ltmain.sh</path>, il utilise aussi <c>libtool</c>. ></p> > ><p> >Pour compiler un paquet basé sur les autotools, les outils eux-mêmes ne sont >pas strictement nécessaires : le script <path>configure</path> est un >simple script Bourne Shell (usuellement, mais ceci sera traité plus >tard) et il transforme les fichiers <path>Makefile.in</path> en un ><path>Makefile</path>, plus simple, pour <c>make</c> (ou, plus souvent, ><c>gmake</c>). Malgré qu'ils soient optionnels pour compiler le paquet, >souvent des "patches" requis pour corriger des problèmes tels que ><uri link="/proj/en/qa/asneeded.xml">--as-needed build failure</uri> ou ><uri link="/proj/en/qa/automagic.xml">automagic dependencies</uri> nous forcent >à relancer ces outils pour recréer les scripts et schémas de makefiles. ></p> > ><p> >Ce guide ne donnera pas de consigne sur comment corriger les erreurs des >paquets en utilisant les autotools car c'est un vaste sujet qui requiert >d'expliquer beaucoup de choses. Pour une simple introduction aux >erreurs les plus courantes faites en utilisant les autotools, il est >plutôt suggéré de lire l'article <uri link="/doc/en/articles/autotools-practices.xml"> >best practices with autotools</uri>. >Au lieu de cela, il décrit les cas courants où relancer les autotools amène à >des erreurs, soit à la reconstruction du script soit à la compilation. ></p> > ></body> </section> > ></chapter> > ><chapter> <!-- Re-running autotools --> > ><title>Relancer les autotools</title> > ><section> > ><body> > ><p> >La première chose importante à savoir est comment reconstruire >proprement le support pour les autotools, étant donnée que c'est >un problème courant qui cause des erreurs dans certains >ebuilds. L'ordre dans lequel les autotools sont appelés est >important comme l'un dépend de l'autre et que le résultat final >dépend beaucoup du respect de cet ordre. ></p> > ><p> >Beaucoup de paquets fournissent un seul script, souvent appelé ><path>autogen.sh</path> ou <path>bootstrap.sh</path> qui sert à exécuter >ces outils dans l'ordre qu'ils pensent être le bon, souvent en >définissant des variables pour que la bonne version des outils soit >appelée (différentes versions des autotools sont souvent incompatibles) >Ces scripts sont, en général, préférés aux autres méthodes mais >contiennent souvent des erreurs ou supposent être sur un certain >environnement qui peut être propre à une autre distribution, pour cette >raison ils doivent être attentivement vérifiés et lorsqu'ils n'apportent >aucun avantage par rapport aux autres méthodes (comme ils peuvent se >contenter d'appeler les outils les uns après les autres sans pour >autant leur passer en argument de paramètres spéciaux ou vérifier leur >valeur de retour), ils ne devraient pas être utilisés. ></p> > ><p> >Le paquet <c>autoconf</c> fournit un script automatique, appelé ><c>autoreconf</c> qui devrait détecter automatiquement quels autotools >sont utilisés et les appeler, mais il échoue trop souvent à détecter la >bonne version ou plante à cause de cas imprévus. De plus, il appelle ><c>autopoint</c>, le script qui rajoute le support pour <c>gettext</c> à >un paquet, cet appel n'est presque jamais requis après avoir patché un >paquet. C'est pour cette raison que <c>autoreconf</c> n'est pas >recommandé et évité autant que possible (la même chose prévaut pour >certains scripts maison fournis par des paquets qui les utilisent). ></p> > ><p> >Pour pallier à ces problèmes, l'eclass <path>autotools</path> a été ajoutée ; >cette eclass fournit des fonctions autour des autotools GNU : ><c>eautoconf</c>, <c>eautomake</c>, <c>_elibtoolize</c> (avec le préfixe _ >pour éviter les collisions avec les fonctions <c>elibtoolize</c> de >l'eclass <path>libtool</path>) et la plus importante <c>eautoreconf</c>. >Cette fonction n'utilise pas le script cassé <c>autoreconf</c>, mais >analyse plutôt les fichiers présents pour le support des autotools et >les lance dans le bon ordre. Il appelle aussi la fonction ><c>elibtoolize</c> pour patcher les fichiers pour le support de libtool >si nécessaire, évitant ainsi les problèmes lorsqu'elle est appelée >avant la recréation des fichiers des autotools. ></p> > ><p> >Les fonctions dans l'eclass <path>autotools</path> ont aussi l'avantage de >ne pas présenter aux utilisateurs de nombreux messages non formatés >(dans le cas d'avertissements) ou rien (dans le cas où il n'y a pas de >problème) ; au lieu de cela, elle fournissent des messages sur leur >status avec <c>ebegin</c> et <c>eend</c> pour que les utilisateurs >sachent ce qu'il se passe, elles tracent aussi les cas d'erreurs en >fournissant des messages de sortie à la <c>epatch</c> dans le cas >d'erreurs. Pour cette raison ces fonctions sont préférées aux appels >manuels ou mauvais ou aux scripts presque inutiles fournis dans les >paquets. Un autre avantage est que l'eclass <path>autotools</path> >rajoute aussi les dépendances à la compilation aux paquets nécessaires >(<b>sys-devel/autoconf</b>, <b>sys-devel/automake</b>, ><b>sys-devel/libtool</b>). ></p> > ><warn> >Les paquets KDE utilisent souvent un système plus complexe basé sur les >autotools qui font usage de fichiers <path>configure.in.in</path> >spécifiques et un peu de magie de perl. Pour cette raison ils ne doivent ><b>jamais</b> utiliser l'eclass <path>autotools</path>. Si vous avez >besoin de refaire appel aux autotools il est préférable d'effacer le >fichier <path>${S}/configure</path> et de faire savoir à la fonction ><c>kde_src_compile</c> qu'il faut relancer les scripts qui recréent le >support pour les autotools. ></warn> > ></body> </section> > ><section> > ><title>Macros potentiellement non définies</title> > ><body> > ><p> >L'erreur la plus commune avec les autotools est à propos du message >d'<c>autoconf</c> "possibly undefined macro: UNE_MACRO". Ce >message est affiché quand une macro est appelée depuis le >fichier <path>configure.ac</path> ou <path>configure.in</path> >mais elle n'est pas définie dans le fichier <path>aclocal.m4</path> >créé par <c>aclocal</c>. ></p> > ><p> >Ceci arrive souvent car la macro mentionnée n'est pas disponible lorsque ><c>aclocal</c> est appelé ; comme, par défaut, il charge les macros >trouvées dans <path>/usr/share/aclocal</path>, ceci signifie que le >paquet fournissant cette macro n'est pas installé (ou la macro est >appelée avec un mauvais nom). Comme le second cas est soit trivial soit >complexe à résoudre, nous nous intéresserons aux premier, une définition >de macro manquante. ></p> > ><p> >Les macros écrites par les développeurs pour que leur programme soit détecté >dans le système en utilisant les autotools sont souvent écrits dans des >fichiers m4 qui sont installés dans le susmentionné répertoire ><path>/usr/share/aclocal</path>. Comme beaucoup de paquets utilisent >ces macros pour des dépendances optionnelles, un fichier m4 peut être >nécessaire mais ne pas être installé sur le système où les autotools >sont appelés ; pour pallier à ce problème il est possible de copier le >fichier m4 dans un sous-répertoire fourni avec le paquet lui même. ></p> > ><p> >Malheureusement pour utiliser ce sous-répertoire, souvent nommé ><path>m4</path>, il est nécessaire d'en informer <c>aclocal</c>. Dans >les projets utilisant <c>automake</c> il est possible de définir ceci >dans le fichier <path>Makefile.am</path> principal en définissant la >variable <b>ACLOCAL_AMFLAGS</b> : ></p> > ><pre caption="exemple de comment dire à aclocal de chercher ses fichiers de macro dans le répertoire 'm4'"> >... >ACLOCAL_AMFLAGS = -I m4 >... ></pre> > ><p> >Ceci est souvent évité par les développeurs de logiciels qui passent >simplement le paramètre <c>-I m4</c> à aclocal lorsqu'ils font leur >paquet. Comme ajouter un patch pour résoudre ce problème est trop >violent, il est plus simple, si le paquet a un répertoire avec les >fichiers m4 requis de le définir dans la variable <b>AT_M4DIR</b>. La >même chose vaut si le paquet n'utilise pas <c>automake</c> mais >seulement <c>autoconf</c>. ></p> > ><pre caption="dire à eautoreconf de chercher des fichiers de macro dans le répertoire 'm4'"> >src_unpack() { > ... > AT_M4DIR="m4" eautoreconf >} ></pre> > ><p> >Dans de rares cas le programme utilise un système de construction à la >cygnus avec des "sous-configure", l'exemple précédent peut échouer >puisqu'il essaie de trouver un sous-répertoire m4 là où est le >configure ; pour résoudre ce genre de problème, définissez le à la place >à <path>${S}/m4</path>. ></p> > ><note> >C'est souvent une bonne idée d'informer les développeurs des programmes >s'ils ne définissent pas la variable <b>ACLOCAL_AMFLAGS</b>, comme ça il >peuvent l'arranger pour les versions ultérieures ; dans un monde >théorique et parfait, <c>eautoreconf</c> seul devrait résoudre tous les >problèmes. ></note> > ><p> >Moins souvent, mais ça arrive tout de même, il n'y a pas de sous-répertoire >avec des fichiers m4, ou le fichier avec la macro indéfinie n'est pas >présent ; pour résoudre ce problème vous devez trouver quel paquet >fournit le fichier m4, et ensuite l'ajouter à ce répertoire, soit avec >un patch soit en le mettant sur les miroirs et ensuite en l'ajoutant au ><b>SRC_URI</b> (auquel cas vous devez ajouter <b>${WORKDIR}</b> à la >liste des répertoires dans lesquels chercher ou le déplacer dans le bon >répertoire). Ce genre de problème est un des plus pénibles, ainsi il >est souvent mieux d'en informer les développeurs du logiciel dès que >possible pour que les prochaines versions ne nécessitent pas de tels >"hacks". ></p> > ></body> </section> > ><section> <!-- Makefile.am requires missing files --> ><title>automake échoue, requiert des fichiers manquants</title> > ><body> > ><p> >Une autre erreur commune, cette fois avec <c>automake</c> est un >échec à cause de fichiers manquants, tels que <path>NEWS</path> >ou <path>README</path>. Ceci est à cause du fait que les >autotools supposent, si personne ne leur précise le contraire, >qu'ils travaillent sur un paquet GNU, qui ont une série de >fichiers dû au guide du style de code de GNU, et échoue ainsi >quand ces fichiers manquent. Dans ces cas, <c>automake</c> doit >être appelé avec le paramètre <c>--foreign</c>, qui lui dit de >ne pas échouer si les fichiers requis par GNU ne sont pas >présents. ></p> > ><p> >Encore une fois, la fonction <c>eautomake</c> tente de rendre plus simple la >reconstruction des autotools en vérifiant si tous les fichiers requis >par GNU sont présents et en appelant ensuite <c>automake</c> avec la >bonne option si ce n'est pas le cas. La bonne façon de résoudre ce >problème (en l'envoyant aux développeurs du logiciel) est d'ajouter à la >variable <b>AUTOMAKE_OPTIONS</b> l'option <e>foreign</e> pour qu'il >sache tout seul qu'il doit utiliser le support "foreign". ></p> > ><p> >Quand des fichiers requis par le <path>configure.in</path> ou ><path>configure.ac</path> au lieu du <path>Makefile.am</path>, et sont >souvent les fichiers <path>config.guess</path> et ><path>config.sub</path>, le problème est que le paquet n'est pas >proprement "bootstrappé". Pour résoudre ceci, <c>automake</c> doit être >appelé avec les options <c>--add-missing --copy</c>. C'est ce que la >fonction <c>eautomake</c> fait déjà , ainsi si vous rencontrez ce >problème vous devriez penser à utiliser les fonctions fournies par >l'eclass <path>autotools</path> au lieu d'appeler les outils >manuellement ou avec d'éventuels scripts fournis dans le paquet. ></p> > ><warn> >Une erreur courante faite lorsque <c>automake</c> échoue est de ne pas >mettre la condition <c>|| die</c>, évitant ainsi d'interrompre le >processus de compilation. C'est une erreur parce que les fichiers >seront souvent nécessaires plus tard, il est préférable de toujours >forcer leur remplacement, aussi parce que dans de nombreux cas les >nouvelles versions des deux fichiers sont nécessaires pour compiler sur >certaines architectures. ></warn> > ></body> </section> > ><section> <title>Version des dépendances manquantes</title> > ><body> > ><p> >Depuis l'été 2006, l'eclass <c>autotools</c> ne dépend plus de toutes les >versions des paquets <c>automake</c> et <c>autoconf</c> automatiquement, >ce qui signifie que vous ne pouvez pas supposer que les utilisateurs ont >installé toutes les versions, et les dépendances doivent être corrigées >pour avoir les bonnes versions installées. Pour simplifier la gestion >des dépendances et forcer les versions nécessaires, les variables ><b>WANT_AUTOCONF</b> et <b>WANT_AUTOMAKE</b> sont considérées comme >entrée pour l'eclass autotools qui se chargera de rajouter les bonnes >dépendances. ></p> > ><pre caption="dépendre d'autoconf 2.1 et automake 1.4"> >WANT_AUTOCONF="2.1" >WANT_AUTOMAKE="1.4" > >inherit autotools ></pre> > ><p> >Dans de nombreux cas, au lieu de dépendre d'une version spécifique >d'automake ou autoconf, on veut dépendre de la dernière version >disponible, probablement déjà présente sur le système des utilisateurs. >Pour cette raison l'eclass autotools accepte une valeur spéciale pour >les variables mentionnées, <e>latest</e>, qui sera remplacé pour ><c>autoconf</c> par 2.5 et pour <c>automake</c> soit 1.9 soit 1.10 selon >ce qui est démasqué pour le système donné. Ceci est suggéré quand le >paquet ne dépend pas de quelques options ou mauvais comportement de plus >vieilles versions. ></p> > ><pre caption="dépendre de la version la plus récente des autotools"> >WANT_AUTOCONF="latest" >WANT_AUTOMAKE="latest" > >inherit autotools ></pre> > ></body> </section> > ></chapter> > ></guide> > ><!-- kate: space-indent on; indent-width 2; replace-tabs on; indent-mode normal; >-->
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 165473
:
109248
|
109382
| 109459