Last active
July 5, 2023 04:57
-
-
Save lopesivan/6f638631552ed7090e2236cd83358028 to your computer and use it in GitHub Desktop.
update-alternatives
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
test -n "$DEBUG" && set -x | |
# __ __ ___ | |
# /\ \\ \ /'___`\ | |
# \ \ \\ \ /\_\ /\ \ | |
# \ \ \\ \_\/_/// /__ | |
# \ \__ ,__\ // /_\ \ | |
# \/_/\_\_//\______/ | |
# \/_/ \/_____/ | |
# Algoritimos | |
# | |
# | |
# Author: Ivan Lopes | |
# Mail: ivan@42algoritmos.com.br | |
# Site: http://www.42algoritmos.com.br | |
# License: gpl | |
# Phone: +1 561 801 7985 | |
# Language: Shell Script | |
# File: u.sh | |
# Date: Sex 03 Ago 2018 03:39:01 -03 | |
# Description: | |
# ---------------------------------------------------------------------------- | |
# Modo strict | |
set -euo pipefail | |
# ---------------------------------------------------------------------------- | |
############################################################################## | |
############################################################################## | |
############################################################################## | |
# ---------------------------------------------------------------------------- | |
versions=( | |
5 6 7 8 | |
) | |
let i=50 | |
for v in ${versions[*]}; do | |
echo -e '\e[1;49;36m'gcc-${v}'\e[0m' >&2 | |
echo -n sudo update-alternatives | |
echo -n " "--install /usr/bin/gcc gcc /usr/bin/gcc-$v $i | |
dpkg -L gcc-$v g++-$v| | |
awk -F'/bin/' '/.*bin\// {print $2}' | | |
while read line; do | |
[[ "$line" == "gcc-$v" ]] && continue | |
cmd=${line%-*} | |
echo -n " "--slave /usr/bin/$cmd $cmd /usr/bin/$line | |
done | |
echo | |
let i=$((i + 10)) | |
done | |
# ---------------------------------------------------------------------------- | |
exit 0 |
Author
lopesivan
commented
Aug 3, 2018
Thanks for this, very useful! Helped me fix an issue where I thought I was building python with gcc 10, but because the generated python make file used x86_64-linux-gnu-gcc
and not gcc
, it was actually building with gcc 9...
On Ubuntu 20.04, with gcc9 and gcc10, I refactored this and generated the command to use via:
versions=(9 10)
i=90
for v in ${versions[*]}; do
echo -e '\e[1;49;36m'"gcc-${v}"'\e[0m' >&2
cmd_str_install="sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$v $i\n"
cmd_str_slaves=$(
dpkg -L "gcc-$v" "g++-$v" |
awk -F'/bin/' '/.*bin\// {print $2}' |
while read -r line; do
[[ "$line" == "gcc-$v" ]] && continue
cmd=${line%-*}
echo " --slave /usr/bin/$cmd $cmd /usr/bin/$line"
done
)
# remove trailing newline and backslash split each slave section
echo -ne "$cmd_str_install$cmd_str_slaves" | sed -z 's/\n$//' | sed -z 's/\n/ \\\n/g'
echo
i=$((i + 10))
done
It generated:
gcc-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 \
--slave /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/x86_64-linux-gnu-gcc-9 \
--slave /usr/bin/x86_64-linux-gnu-gcc-ar x86_64-linux-gnu-gcc-ar /usr/bin/x86_64-linux-gnu-gcc-ar-9 \
--slave /usr/bin/x86_64-linux-gnu-gcc-nm x86_64-linux-gnu-gcc-nm /usr/bin/x86_64-linux-gnu-gcc-nm-9 \
--slave /usr/bin/x86_64-linux-gnu-gcc-ranlib x86_64-linux-gnu-gcc-ranlib /usr/bin/x86_64-linux-gnu-gcc-ranlib-9 \
--slave /usr/bin/x86_64-linux-gnu-gcov x86_64-linux-gnu-gcov /usr/bin/x86_64-linux-gnu-gcov-9 \
--slave /usr/bin/x86_64-linux-gnu-gcov-dump x86_64-linux-gnu-gcov-dump /usr/bin/x86_64-linux-gnu-gcov-dump-9 \
--slave /usr/bin/x86_64-linux-gnu-gcov-tool x86_64-linux-gnu-gcov-tool /usr/bin/x86_64-linux-gnu-gcov-tool-9 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-9 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-9 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-9 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-9 \
--slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-9 \
--slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-9 \
--slave /usr/bin/x86_64-linux-gnu-g++ x86_64-linux-gnu-g++ /usr/bin/x86_64-linux-gnu-g++-9 \
--slave /usr/bin/g++ g++ /usr/bin/g++-9
gcc-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 \
--slave /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/x86_64-linux-gnu-gcc-10 \
--slave /usr/bin/x86_64-linux-gnu-gcc-ar x86_64-linux-gnu-gcc-ar /usr/bin/x86_64-linux-gnu-gcc-ar-10 \
--slave /usr/bin/x86_64-linux-gnu-gcc-nm x86_64-linux-gnu-gcc-nm /usr/bin/x86_64-linux-gnu-gcc-nm-10 \
--slave /usr/bin/x86_64-linux-gnu-gcc-ranlib x86_64-linux-gnu-gcc-ranlib /usr/bin/x86_64-linux-gnu-gcc-ranlib-10 \
--slave /usr/bin/x86_64-linux-gnu-gcov x86_64-linux-gnu-gcov /usr/bin/x86_64-linux-gnu-gcov-10 \
--slave /usr/bin/x86_64-linux-gnu-gcov-dump x86_64-linux-gnu-gcov-dump /usr/bin/x86_64-linux-gnu-gcov-dump-10 \
--slave /usr/bin/x86_64-linux-gnu-gcov-tool x86_64-linux-gnu-gcov-tool /usr/bin/x86_64-linux-gnu-gcov-tool-10 \
--slave /usr/bin/x86_64-linux-gnu-lto-dump x86_64-linux-gnu-lto-dump /usr/bin/x86_64-linux-gnu-lto-dump-10 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-10 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-10 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-10 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-10 \
--slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-10 \
--slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-10 \
--slave /usr/bin/lto-dump lto-dump /usr/bin/lto-dump-10 \
--slave /usr/bin/x86_64-linux-gnu-g++ x86_64-linux-gnu-g++ /usr/bin/x86_64-linux-gnu-g++-10 \
--slave /usr/bin/g++ g++ /usr/bin/g++-10
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment