Na innym komputerze nadal mam GCC 4.1.2 i coś czuję, że nieprędko to się zmieni. Nie stracić korzyści wynikających z distcc tylko dlatego, że na najmocniejszej maszynie zaktualizowałem GCC do 4.3. Musiałem więc coś wymyślić. I tak dzięki wujkowi Google i własnej inwencji powstał poniższe rozwiązanie. Jest nim wrapper dla klienta distcc, który zmusza do używania konkretnej wersji GCC. Rzecz jasna, żeby to zadziałało, na serwerze distcc musi być zainstalowana odpowiednia wersja GCC (w tym przykładzie 4.1.2). Wszystkie komputery muszą też rzecz jasna używać tej samej architektury. Jeśli interesuje was kompilacja skrośna, możecie posiłkować się pierwotnym HOWTO.
Jak to zrobić:
1) Tworzymy plik /usr/lib/distcc/bin/wrapper.sh o treści:
#!/bin/bash exec distcc i686-pc-linux-gnu-g${0:$[-2]}-4.1.2 "$@"
2) Zastępujemy wszystkie symlinki z katalogu /usr/lib/distcc/bin symlinkami do wrapper.sh
Przed:
lrwxrwxrwx 1 root root 15 wrz 18 2006 c++ -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 cc -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 g++ -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 gcc -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 i686-pc-linux-gnu-c++ -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 i686-pc-linux-gnu-g++ -> /usr/bin/distcc lrwxrwxrwx 1 root root 15 wrz 18 2006 i686-pc-linux-gnu-gcc -> /usr/bin/distcc
Po:
lrwxrwxrwx 1 root root 10 lut 20 19:17 c++ -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 cc -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 g++ -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 gcc -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 i686-pc-linux-gnu-c++ -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 i686-pc-linux-gnu-g++ -> wrapper.sh lrwxrwxrwx 1 root root 10 lut 20 19:17 i686-pc-linux-gnu-gcc -> wrapper.sh -rwxr-xr-x 1 root root 65 lut 20 19:39 wrapper.sh
To wszystko, po wykonaniu tych kroków klient distcc powinien używać właściwej wersji GCC :)