fix(toolchain_util.sh): Never force binary packages with crossdev.

When calling update_chroot with --usepkg --nogetbinpkg the default
emerge command line will force binary packages for the toolchain but if
the packages are not available locally building via crossdev is
required. Since the crossdev bootstrap process rebuilds the toolchain a
couple times with different use flags if binary packages are forced the
second stages gets skipped resulting in a broken gcc and glibc install.
This commit is contained in:
Michael Marineau 2013-12-06 15:19:41 -08:00
parent 1e7ce95508
commit 8330920290

View File

@ -174,6 +174,11 @@ install_cross_toolchain() {
local cross_cfg="/usr/${cross_chost}/etc/portage/${cross_chost}-crossdev"
local cross_cfg_data=$(_crossdev_info "${cross_chost}" stable)
# Forcing binary packages for toolchain packages breaks crossdev since it
# prevents it from rebuilding with different use flags during bootstrap.
local safe_flags=( "${@/#--useoldpkg-atoms=*/}" )
safe_flags=( "${safe_flags[@]/#--rebuild-exclude=*/}" )
# may be called from either catalyst (root) or upgrade_chroot (user)
local sudo=
if [[ $(id -u) -ne 0 ]]; then
@ -183,7 +188,7 @@ install_cross_toolchain() {
# Only call crossdev to regenerate configs if something has changed
if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}"
then
$sudo crossdev --stable --portage "$*" \
$sudo crossdev --stable --portage "${safe_flags[*]}" \
--init-target --target "${cross_chost}"
$sudo tee "${cross_cfg}" <<<"${cross_cfg_data}" >/dev/null
fi
@ -193,7 +198,7 @@ install_cross_toolchain() {
if emerge "$@" --binpkg-respect-use=y --update --newuse \
--pretend "${cross_pkgs[@]}" | grep -q '^\[ebuild'
then
$sudo crossdev --stable --portage "$*" \
$sudo crossdev --stable --portage "${safe_flags[*]}" \
--stage4 --target "${cross_chost}"
else
$sudo emerge "$@" --binpkg-respect-use=y --update --newuse \