Changing the CHOST variable/fr

Ce document explique comment changer la variable CHOST  d'un système existant.

Introduction
Changer la variable CHOST est un problème délicat qui peut sérieusement mettre en péril votre système. Alors, pourquoi faire un guide sur ce sujet ?

Il existe des situations où changer CHOST est inévitable, par exemple quand vous voulez mettre glibc à jour vers la version  2.4 qui ne supporte que nptl et que vous vous rendez compte que votre CHOST est i386, ce qui rend l'utilisation de nptl impossible. Dans un tel cas, vous n'avez guère d'options et changer CHOST en est une.

Même si vous suivez ces instructions, des problèmes peuvent surgir, c'est pourquoi vous devez les lire et les exécuter très prudemment. Dans cet exemple la variable CHOST sera changée de i386 en i686, si votre changement est différent, bien-sûr, adaptez les commandes en conséquence.

Compiler les paquets
Pour vous lancer dans le changement de la variable CHOST, éditez le fichier et changer la valeur CHOST selon votre besoin. Ensuite, recompilez les paquets suivants dans l'ordre indiqué :

Vérifier que tout fonctionne
Now it is time to make sure that the gcc-config and binutils-config settings are sane and that there are no leftovers in.

La sortie de   et de    devrait ressembler à ce qui suit (peut différer selon votre version de gcc et de chost, dans ce cas, il s'agit de gcc 4.1.1 et de i686) :

Next, check to see if there are references to the old  variable in :

Avant d'effacer le fichier, vérifions que des fichiers avec la nouvelle variable CHOST existent :

Cela paraît bon car il doit toujours n'y avoir qu'un seul fichier pour  dans  (05gcc dans notre exemple). Supprimons donc celui avec les mauvaises références :

Cela est aussi vrai pour   - s'il existe un fichier supplémentaire, cherchez celui qui est obsolète et supprimez le. Ensuite vérifiez votre.

Celui-ci paraît bon, ces deux fichiers devraient réellement être présents. Il est temps de se déplacer dans le répertoire gcc.

et sont corrects, mais  est un autre résidu qui doit être supprimé.

Maintenant exécutez les commandes suivantes pour mettre votre environnement à jour.

Puis vérifiez que tout est correctement réglé :

Si vous trouvez encore quelque chose, vous avez probablement manqué quelques fichiers, essayez de les repérer avant d'aller plus loin.

Terminer le changement
Now it is necessary to re-emerge libtool and run fix_libtool_files.sh which can be found in. Make sure to use the correct gcc version (the current one, 4.1.1 here) and pass the old architecture (i386 here) as argument. Replace  with the new   value, and   with the gcc version. This example assumes a  value applicable to i686.

Vous pouvez recompiler tous vos paquets :

Maintenant, bien qu'en théorie cela ne devrait pas être nécessaire, mais nous ne pouvons le garantir à 100%, recompilez votre cible world. J'ai entendu dire que quelques paquets au moins, nécessitaient cette re-compilation ; aussi faites ceci :

The following set of packages really need to be rebuilt:

All packages using perl install to the  directory and hence need rebuilding. In case qfile is not available on the system yet, install first.

Now rebuild all packages that have files installed in any location:

Si vous rencontrez d'autres paquets qui nécessitent la recompilation, faites le savoir à l'auteur de ce document.

Problèmes courants
Lorsque vous mettez à jour gcc de la version 3.3 vers la version 4.1 en même temps que vous changez la variable CHOST (s.v.p. ne faites ça en aucun cas), quelques utilisateurs ont fait état de paquets cassés qui nécessitent une recompilation, comme par exemple groff et courier :

This happens because during the upgrade, the  variable doesn't exactly match the   variable value, making the compiler assume that the system is using cross-compiling. As a consequence,  isn't inserted into, resulting in this error.

Please see the GCC upgrade guide for what needs to be rebuilt after a GCC upgrade.

In some rare cases, this can break old versions of python, too. This may be fixed by adding (change accordingly to the old   and gcc version) to, running ldconfig and then emerge libstdc++-v3. However, as can be seen, this situation needs to be avoided - don't change  and gcc at the same time.

Retour d'expérience
That should be all, feedback (both if it worked, failed or other problems were encountered) is welcome, please use the |discussion page or post to this forum thread. Much in this guide comes from vapier, thanks for your help!