#!/bin/bash
# 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
    path="${D}${basedir%/}/${subdir}"
    if [[ -L "${path}" || -d "${path}" ]]; then
      paths+=( "${path}" )
      ret=1
    fi
  done
  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 ;;
  esac

  case ${ARCH} in
  arm|x86)
    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."
    fi
    ;;
  esac
}

check_multilib
