| #!/bin/bash |
| |
| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This is a generic script for upgrading the host toolchain. It should: |
| # - be able to run repeatedly, in case someone has ancient chroot with |
| # several missed gcc upgrades |
| # - be easily tweakable for future upgrades of the same kind, if needed |
| |
| CHOST="$(portageq envvar CHOST)" |
| |
| # This is the lowest we want to go in this particular case. |
| MINIMUM_GCC="4.4.6" |
| |
| env_setup() { |
| GCC_VERSIONS="$(gcc-config -l | grep "${CHOST}" | \ |
| cut -f3 -d' ')" |
| GCC_LATEST="$(gcc-config -l | grep "${CHOST}" | tail -n1 | \ |
| cut -f3 -d' ')" |
| } |
| |
| env_setup |
| |
| if ! [ "$(portageq match / ">=sys-devel/gcc-${MINIMUM_GCC}")" ]; |
| then |
| info "You don't have the latest gcc installed, trying to build it" |
| if ! sudo emerge -u --getbinpkg sys-devel/gcc; then |
| error "Emerging gcc failed. Please recreate your chroot." |
| exit 1 |
| fi |
| if ! [ "$(portageq match / ">=sys-devel/gcc-${MINIMUM_GCC}")" ]; |
| then |
| error "You still don't have the latest gcc. Something is very" |
| error "wrong with your tree. Recreating your chroot will likely fix it." |
| exit 1 |
| fi |
| fi |
| |
| env_setup |
| |
| info "Updating the host toolchain. crosbug.com/19613" |
| info "Currently installed host gcc versions: $(echo -n ${GCC_VERSIONS})" |
| |
| if ! sudo gcc-config "${GCC_LATEST}"; then |
| error "gcc-config failed. This is really bad. Recreate your chroot." |
| exit 1 |
| fi |
| |
| info "Cleaning up the old toolchain" |
| sudo emerge --unmerge "<sys-devel/gcc-${MINIMUM_GCC}" |
| |
| exit 0 |