Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 109248 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]
teh file
autofailure.xml (text/plain), 15.38 KB, created by
Alexis Ballier
on 2007-02-05 18:49:37 UTC
(
hide
)
Description:
teh file
Filename:
MIME Type:
Creator:
Alexis Ballier
Created:
2007-02-05 18:49:37 UTC
Size:
15.38 KB
patch
obsolete
><?xml version="1.0" encoding="UTF-8"?> ><!DOCTYPE guide SYSTEM "http://www.gentoo.org/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</title> > ><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éferre 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 pas tous les paquets 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 reconaitre 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, plus simple, <path>Makefile</path> pour > <c>make</c> (ou, plus souvnet, <c>gmake</c>). > Malgré qu'ils soient optionels pour compiler le paquet, souvent des "patches" requis pour corriger des problèmes > tels que ><uri link="asneeded.xml">--as-needed build failure</uri> ou ><uri link="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 plutot suggéré de lire l'article ><uri link="/doc/en/articles/autotools-practices.xml">best practices with autotools</uri>. > Au lieu de celà , il décrire 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 causent des erreurs dans certains ebuilds. > L'ordre dans lequel les autotools sont appellé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 appellé <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 appellée (différentes versions des autotools ne s'entendent souvent pas bien). > 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'appeller les outils les uns après les autres sans pour autant leur passer en arguement 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, appellé <c>autoreconf</c> > qui devrait détecter automatiquement quels autotools sont utilisés et les appeller, 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 plutot 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 appellé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>Possibly undefind macros</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 appellé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 appellé; 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 appellé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 sus-mentionné répertoire <path>/usr/share/aclocal</path>. > Comme beaucoup de paquets utilisent ces macros pour des dépendances optionelles, > un fichier m4 peut être nécessaire mais ne pas être installé sur le système où les autotools > sont appellé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 mirroirs 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 appellé 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 appellant 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 appellé 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'appeller 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 parceque 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="dependre 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