| #!/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 |