blob: 8c1bcb2d3734f6e0babd5e207c87ba1576f2a370 [file] [log] [blame]
#!/bin/sh
#
# ccache-config - helper script for ccache and its ebuild
#
# Copyright 2003-2010 Superlucidity Services, LLC
# 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
. /etc/init.d/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%/}/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
fi
}
cc_install_link() {
# Search the PATH for the specified compiler
# then create shadow link in /usr/lib/ccache/bin to ccache
if [ -n "$(type -p ${1})" ]; 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 /usr/bin/ccache "${t}"
c_eend
fi
}
cc_links() {
local a
for a in gcc cc c++ g++ ; do
if [ -n "${2}" ] ; then
# gcc-config doesnt install ${CHOST}-cc, so until
# it does, don't install a ccache symlink for it
[ "${a}" = "cc" ] && continue
a="${2}-${a}"
fi
eval "cc_${1}_link" "${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