blob: 1126b7612ef15c33b5c7462c3905a5ddbc6712e5 [file] [log] [blame]
# Copyright (c) 2013 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.
# A bunch of packages run `python_set_active_version 2` in their pkg_setup
# in order to set the system python interp to version 2.x. The problem is
# that it ends up encoding the active python ABI in the binpkg's env. So
# when you try to emerge it later, it requires the exact same python ver
# to be available (e.g. 2.6). Ignoring the stupidness of this for binpkgs
# (as there's an open Gentoo bug on the topic), let's force the binpkgs to
# be rebuilt.
set -e
OLD_PY_VER="2.6"
export CLEAN_DELAY=0
find_pkgs() {
find "${root}"/var/db/pkg/ -name environment.bz2 \
-exec bzgrep "PYTHON_ABI=\"${OLD_PY_VER}\"" {} + | \
sed -r 's:.*/var/db/pkg/(.*)/environment.bz2.*:\1:'
}
update_pkgs() {
# Try and update/rebuild any packages.
info "${board}: searching for packages using python-${OLD_PY_VER}"
local pkgs=( $(find_pkgs) )
if [[ ${#pkgs[*]} -gt 0 ]]; then
# Note: we allow this stage to fail because the binpkgs might be old
# and relying on python-2.6. Since we nuked that version though, most
# will fail to even emerge.
info "${board}: trying to update via binpkgs"
sudo ${emerge} -q1g "${pkgs[@]/#/>=}" || :
pkgs=( $(find_pkgs) )
if [[ ${#pkgs[*]} -gt 0 ]]; then
info "${board}: forcing rebuild from source"
sudo ${emerge} -q1 "${pkgs[@]/#/>=}"
fi
fi
}
b() {
local cmd=$1 root=$2 board=$3
local emerge="/mnt/host/source/chromite/bin/parallel_emerge"
local qfile="qfile"
if [[ ${root} != "/" ]]; then
emerge+=" --board=${board}"
qfile+="-${board}"
fi
"$@"
}
# Update host sdk first before we update the boards. We have to
# do this specially since the package manager is based on python.
b update_pkgs / host_sdk
# Update board packages in serial (might build from source).
for board_root in /build/*; do
board=${board_root##*/}
b update_pkgs ${board_root} ${board}
done
wait