Mise à jour du compilateur GCC avec Gentoo
Par Jean-Seb le vendredi 3 août 2007, 22:13 - Linuxeries - Lien permanent
La mise à jour de GCC ne doit pas poser de problèmes, mais quelques points sont à retenir.
Préparation
Tout d'abord, lire le guide de migration GCC dans la doc Gentoo!
Ce qu'on en retient: il n'y a pas grand chose à faire, sauf si vous faites un grand saut de version (ex: de 3.3 à 4.1)
Dans cet exemple, on se contente de passer de la version 4.1.1 à la version 4.1.2
Il faut faire la mise à jour de GCC dès le système de base installé, car cela limitera fortement le nombre de paquets à recompiler.
En avant
#~ emerge -va gcc
Le emerge va faire le fixlibtool_files.sh lui même (visible dans les dernières lignes, à la fin de la compilation).
Ex: ici, emerge a exécuté en fin de compilation :
fixlibtools_files.sh 4.1.1
#~ gcc -v
Pour avoir la version du gcc installé (cette fois ci: 4.1.2)
#~ gcc-config i686-pc-linux-gnu-4.1.2
Pour passer la version 4.1.2 de gcc comme compilateur par défaut
#~ env-update
#~ source /etc/profile
Problèmes éventuels
Si au milieu d'une compilation, on a une erreur du type :
gcc-config error: Could not run/locate "i386-pc-linux-gnu-gcc"
Comme vous n'utilisez probablement plus un i386, il y a un problème.
Cela signifie qu'il y a encore des paquets compilés avec une ancienne mouture du compilateur:
Il faut mettre à jour tous les paquets compilés avec l'ancienne version du compilateur ("i386 ...")
#liste des paquets à mettre à jour
grep i386-pc-linux-gnu /var/db/pkg/*/*/CHOST -R|cut -d\/ -f5-6
#mise à jour proprement dite
for package in $(grep i386-pc-linux-gnu /var/db/pkg/*/*/CHOST -R|cut -d\/ -f5-6); do emerge =${package}; done
ou encore (moins facile à suivre avec tous les pipes, mais fait la même chose
en plus rapide (trouvé sur un forum, non testé)):
emerge -1 $(grep i386-pc-linux-gnu /var/db/pkg/*/*/CHOST -r | cut -d\/ -f5-6 | sort -u | sed s/\-r[0-9]*$//g | sed s/\_[a-z]*[0-9]*//g | rev | cut -d\- -f2- | rev | sort -u)
Note pour la recherche des fichiers, Fred propose quelque
chose de plus correct:
(cd /var/db/pkg/; find -mindepth 3 -maxdepth 3 -name CHOST -print0|xargs -0 grep -l i386-pc-linux-gnu-gcc) | cut -d/ -f2-3