# Copyright (c) 2011 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.

update_pkgconfig_wrapper() {
  local board="$1"
  local board_root="/build/${board}"
  local target="/usr/local/bin/pkg-config-${board}"
  sudo_clobber "${target}" <<EOF
#!/bin/bash

PKG_CONFIG_LIBDIR="${board_root}/usr/lib/pkgconfig"
PKG_CONFIG_LIBDIR="\${PKG_CONFIG_LIBDIR}:${board_root}/usr/share/pkgconfig"
export PKG_CONFIG_LIBDIR

export PKG_CONFIG_SYSROOT_DIR="${board_root}"

exec pkg-config "\$@"
EOF
  sudo chmod a+rx ${target}
  sudo chown root:root ${target}
  info "Created wrapper pkg-config for ${board}"

  local board_setup="${board_root}/etc/make.conf.board_setup"
  if ! grep -q PKG_CONFIG "${board_setup}"; then
    info "Added PKG_CONFIG to ${board_setup}"
    sudo_append "${board_setup}" <<EOF
PKG_CONFIG="pkg-config-${board}"
EOF
  fi
}

info "Deleting masked *.la files for in /usr/lib64"
sudo find /usr/lib64 -maxdepth 1 \
  '(' -name 'lib*.la' -not -name 'libltdl.la' ')' -delete

for board_root in /build/*; do
  if [ -d "${board_root}" ]; then
    board=$(basename "${board_root}")
    update_pkgconfig_wrapper "${board}"

    info "Deleting masked *.la files for ${board}"
    sudo find "${board_root}/usr/lib" -maxdepth 1 \
      '(' -name 'lib*.la' -not -name 'libltdl.la' ')' -delete

    info "Removing hard-coded paths to ${board_root} in *.pc files"
    sudo find "${board_root}/usr" -type f -name '*.pc' | xargs sudo \
      sed -i -e "s|${board_root}/|/|g"
  fi
done

info "Chroot upgraded to version 3: libtool upgrade"
exit 0
