blob: 256f8bd8c89f6f6f1dcad8b5453427ebf8104bdd [file] [log] [blame]
# Copyright 2018 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.
# Rebuild host packages after libc++ migration.
REPOS=( $(portageq envvar PORTDIR) $(portageq envvar PORTDIR_OVERLAY) )
package_exists() {
local pkg=$1
for repo in "${REPOS[@]}"; do
[[ -d "${repo}/${pkg}" ]] && return 0
done
return 1
}
# Find packages that use libstdc++ and remove their existing
# binary package.
PKGS=( $(qdepends -qCN -k NEEDED -Q 'libstdc\+\+\.so\.6') )
PKGDIR=$(portageq envvar PKGDIR)
PKGS_TO_REMOVE=()
cd "${PKGDIR}"
for pkg in "${PKGS[@]}"; do
sudo rm -f "${pkg}-"[0-9]*.tbz2
# Collect packages without ebuilds.
if ! package_exists "${pkg}"; then
PKGS_TO_REMOVE+=( "${pkg}" )
fi
done
# Remove packages no longer present in tree.
if [[ ${#PKGS_TO_REMOVE[@]} -ne 0 ]]; then
echo "Removing non-existent tree packages ${PKGS_TO_REMOVE[*]}"
sudo qmerge -Uqy "${PKGS_TO_REMOVE[@]}"
fi
# New list that can be passed to portage.
# Ensure that llvm and clang are always pulled in.
PKGS=( sys-devel/llvm sys-devel/clang )
PKGS+=( $(qdepends -qCN -k NEEDED -Q 'libstdc\+\+\.so\.6') )
# Reinstall the packages using fresh binary packages.
sudo emerge --getbinpkg "${PKGS[@]}"