# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

EAPI=5
inherit multilib-minimal arc-build-constants

DESCRIPTION="Ebuild for per-sysroot arc-build components."

LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"

RDEPEND=""
DEPEND=""

S=${WORKDIR}

src_compile() {
	arc-build-constants-configure

	# Note that in the code generated below, references to ${SYSROOT} etc. are
	# escaped so they don't get evaluated only at run time of the script.
	# There is one exception for ${ARC_PREFIX} (see the commment below) -
	# if/when this is resolved, the script would be static and there'd be no
	# need to dynamically generate it.
	# TODO(crbug.com/1056100): Consider moving to ${FILESDIR} when the bug is
	# addressed.
	cat > pkg-config <<EOF
#!/bin/bash
case \${ABI} in
arm64|amd64)
	libdir=lib64
	;;
arm|x86)
	libdir=lib
	;;
*)
	echo "Unsupported ABI: \${ABI}" >&2
	exit 1
	;;
esac

export PKG_CONFIG_LIBDIR="\${ARC_SYSROOT}/vendor/\${libdir}/pkgconfig"

# This would normally use just \${SYSROOT}, but platform.eclass re-points
# \${SYSROOT} at \${ARC_SYSROOT}. Note that \${ARC_PREFIX} would better be
# expanded at run time as well, but it's currently not exported into the build
# environment.
# TODO(crbug.com/1056100): Address sysroot confusion.
export PKG_CONFIG_SYSROOT_DIR="\${SYSROOT%${ARC_PREFIX}}"

# Portage will get confused and try to "help" us by exporting this.
# Undo that logic.
unset PKG_CONFIG_PATH

exec /usr/bin/pkg-config "\$@"
EOF
}

install_pc_file() {
	prefix="${ARC_PREFIX}/usr"
	sed \
		-e "s|@lib@|$(get_libdir)|g" \
		-e "s|@prefix@|${prefix}|g" \
		"${PC_SRC_DIR}"/"$1" > "$1" || die
	doins "$1"
}

multilib_src_install() {
	PC_SRC_DIR="${FILESDIR}/${ARC_VERSION_CODENAME}"

	insinto "${ARC_PREFIX}/vendor/$(get_libdir)/pkgconfig"
	install_pc_file backtrace.pc
	install_pc_file cutils.pc
	install_pc_file expat.pc
	install_pc_file hardware.pc
	install_pc_file mediandk.pc
	install_pc_file pthread-stubs.pc
	install_pc_file sync.pc
	install_pc_file zlib.pc

	install_pc_file nativewindow.pc
}

multilib_src_install_all() {
	local bin_dir="${ARC_PREFIX}/build/bin"
	local prebuilt_dir="${ARC_PREFIX}/usr"

	local arc_arch="${ARCH}"
	# arm needs to use arm64 directory, which provides combined arm/arm64
	# headers and libraries.
	if [[ "${ARCH}" == "arm" ]]; then
		arc_arch="arm64"
	fi

	local prebuilt_src="${ARC_BASE}/${arc_arch}/usr"

	exeinto "${bin_dir}"
	doexe pkg-config

	dosym "${prebuilt_src}" "${prebuilt_dir}"
}
