#!/bin/sh
#
# ccache-config - helper script for ccache and its ebuild
#
# Copyright 2003-2014 Superlucidity Services, LLC
# Copyright 2013-2014 Gentoo Foundation
# This program licensed under the GNU GPL version 2.
#
# This script developed by Zachary T Welch at Superlucidity Services, LLC
#  it was cloned from the distcc-config script
#
# Additional features to come; this provides a starting point

EPREFIX=''

. "${EPREFIX}"/lib/gentoo/functions.sh 2>/dev/null || {
	ebegin() { echo " * $* ..."; }
	eend() {
		local r=${1:-$?}
		[ ${r} -eq 0 ] && echo " [ OK ]" || echo " [ !! ]"
		return $r
	}
}

LIBDIR="lib"

# this should be getopt'd someday (override with CC_QUIET=1)
CC_VERBOSE=1
unset _CC_QUIET
c_quiet() {
	[ -n "${CC_QUIET:-${_CC_QUIET}}" ] || [ -z "${CC_VERBOSE}" ]
}

c_ebegin() { c_quiet || ebegin "$@" ; }
c_eend()   { c_quiet || eend "$@" ; }

###
# the following functions manage the ccache symlinks
#  they allow the user or other scripts (namely gcc-config) to
#  automatically update ccache's links when upgrading toolchains
#
cc_path() {
	echo ${ROOT%/}${EPREFIX}/usr/${LIBDIR}/ccache/bin/$1
}
cc_remove_link() {
	local t=$(cc_path "$1")
	if [ -L ${t} ]; then
		c_ebegin "Removing ${t}"
		rm -f "${t}"
		c_eend

		# Trim the empty dir if possible. #517242
		t=${t%/*}
		if rmdir "${t}" 2>/dev/null; then
			rmdir "${t%/*}" 2>/dev/null
		fi
		:
	fi
}
cc_install_link() {
	# Search the PATH for the specified compiler
	#  then create shadow link in /usr/lib/ccache/bin to ccache

	if command -v "$1" >/dev/null ; then
		# first be sure any old link is removed
		_CC_QUIET=1
		cc_remove_link "$1"
		unset _CC_QUIET

		# then create the new link
		local t=$(cc_path "$1")
		c_ebegin "Creating ccache shadow link ${t}"
		mkdir -p -m 0755 "${t%/*}" && ln -s "${EPREFIX}"/usr/bin/ccache "${t}"
		c_eend
	fi
}
cc_links() {
	local a
	for a in gcc cc c++ g++ icc icpc clang clang++ ; do
		"cc_${1}_link" "${2}${2:+-}${a}"
	done
}

###
# main routine

case $1 in
	--install-links )
		cc_links install "$2"
		;;
	--remove-links )
		cc_links remove "$2"
		;;
	* )
		echo "usage: $0 {--install-links|--remove-links} [ CHOST ]"
		;;
esac
