#!/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" function 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 "