blob: 438d6569945ecbf8322502d23eb9751ed9de544e [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.
# Try and catch bad multilib usage at install time. This check isn't meant
# to be 100% comprehensive, but should catch most bad behavior to be useful.
# We are basically hardcoding policy that already exists in Gentoo profiles,
# but we don't currently care about supporting full flexibility as no CrOS
# device should be doing weird stuff.
# We're a bit limited when it comes to lib64 users like x86_64 & aarch64.
# On those systems, /lib/ and /usr/lib/ are OK for arch-independent files,
# most commonly things like /usr/lib/debug/. So it's trickier to detect
# bad usage of that path vs good usage.
# Fortunately, most bad usage impacts 32-bit userlands because the sdk itself
# tends to be 64-bit (lib64), so this hook should still be effective.
# See whether the specified path exists in any form.
# We'll update the |paths| array variable in the parent scope.
bad_path_exists() {
local subdir="$1"
local basedir path ret=0
for basedir in / /usr /usr/local; do
if [[ -L "${path}" || -d "${path}" ]]; then
paths+=( "${path}" )
return ${ret}
# Main entry point for this hook.
check_multilib() {
local paths=()
case "${CATEGORY}/${PN}" in
# Needs to install a 64-bit archive on arm32 builds.
chromeos-base/google-breakpad) return ;;
case ${ARCH} in
if ! bad_path_exists "lib64"; then
eerror "Bad lib64 usage detected:"
find "${paths[@]}" -exec ls -ldh {} +
eerror "This arch (${ARCH}) should never use 'lib64'."
die "This package is installing into bad paths."