blob: 099c6eafc1fc15c6eb0bccee10b0e544d3df182d [file] [log] [blame]
#!/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