#!/bin/bash
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1

if [[ -z ${PORTAGE_INTERNAL_DOLIB} ]] && ! ___eapi_has_dolib_libopts; then
	die "'${0##*/}' has been banned for EAPI '$EAPI'"
	exit 1
fi

if ! ___eapi_has_prefix_variables; then
	ED=${D}
fi

if ! ___eapi_has_DESTTREE_INSDESTTREE; then
	[[ -n ${DESTTREE} ]] &&
		die "${0##*/}: \${DESTTREE} has been banned for EAPI '$EAPI'; use 'into' instead"
else
	# backwards compatibility
	_E_DESTTREE_=${DESTTREE}
fi

# Setup ABI cruft
LIBDIR_VAR="LIBDIR_${ABI}"
if [[ -n ${ABI} && -n ${!LIBDIR_VAR} ]] ; then
	CONF_LIBDIR=${!LIBDIR_VAR}
fi
unset LIBDIR_VAR
# we need this to default to lib so that things dont break
CONF_LIBDIR=${CONF_LIBDIR:-lib}
libdir="${ED%/}/${_E_DESTTREE_#/}/${CONF_LIBDIR}"


if [[ $# -lt 1 ]] ; then
	__helpers_die "${0##*/}: at least one argument needed"
	exit 1
fi
if [[ ! -d ${libdir} ]] ; then
	install -d "${libdir}" || { __helpers_die "${0##*/}: failed to install ${libdir}"; exit 1; }
fi

ret=0

for x in "$@" ; do
	if [[ -e ${x} ]] ; then
		if [[ ! -L ${x} ]] ; then
			install ${LIBOPTIONS} "${x}" "${libdir}"
		else
			ln -s "$(readlink "${x}")" "${libdir}/${x##*/}"
		fi
	else
		echo "!!! ${0##*/}: ${x} does not exist" 1>&2
		false
	fi
	((ret|=$?))
done

[[ $ret -ne 0 ]] && __helpers_die "${0##*/} failed"
exit ${ret}
