diff --git a/chroot_version_hooks.d/7_host_gcc_upgrade b/chroot_version_hooks.d/7_host_gcc_upgrade new file mode 100644 index 0000000000..6e81ac9ac1 --- /dev/null +++ b/chroot_version_hooks.d/7_host_gcc_upgrade @@ -0,0 +1,48 @@ +#!/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" + +GCC_VERSIONS="$(gcc-config -l | grep "${CHOST}" | \ + cut -f3 -d' ')" +GCC_LATEST="$(gcc-config -l | grep "${CHOST}" | tail -n1 | \ + cut -f3 -d' ')" + +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 + +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 "