From 598a46df25a4e0fde644880012ec9b0a28e2bfc0 Mon Sep 17 00:00:00 2001
From: Zac Medico <zmedico@gentoo.org>
Date: Thu, 26 Mar 2009 21:17:18 +0000
Subject: [PATCH] Move checks for /usr/lib/distcc/bin and /usr/lib/ccache/bin
 to the python side and don't add distcc to CC and CXX when
 /usr/lib/distcc/bin doesn't exist since that won't necessarily work. Thanks
 to Jeroen Roovers <jer@g.o> for reporting the issue with adding distcc to CC.

svn path=/main/trunk/; revision=13198
---
 bin/ebuild.sh           | 19 ++++---------------
 pym/portage/__init__.py | 28 +++++++++++++++++++++++-----
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index f66de9aea..d36c81e0c 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -1887,26 +1887,15 @@ ebuild_main() {
 	if ! hasq $EBUILD_SH_ARGS clean depend help info nofetch ; then
 
 		if hasq distcc $FEATURES ; then
-			if [ -d /usr/lib/distcc/bin ] ; then
-				[[ -z ${PATH/*distcc*/} ]] && remove_path_entry distcc
-				export PATH="/usr/lib/distcc/bin:$PATH"
-				[[ -n $DISTCC_LOG ]] && addwrite "${DISTCC_LOG%/*}"
-			elif type -P distcc >/dev/null ; then
-				! hasq distcc $CC && export CC="distcc $CC"
-				! hasq distcc $CXX && export CXX="distcc $CXX"
-			fi
+			[[ -z ${PATH/*distcc*/} ]] && remove_path_entry distcc
+			export PATH="/usr/lib/distcc/bin:$PATH"
+			[[ -n $DISTCC_LOG ]] && addwrite "${DISTCC_LOG%/*}"
 		fi
 
 		if hasq ccache $FEATURES ; then
 			[[ -z ${PATH/*ccache*/} ]] && remove_path_entry ccache
 
-			if [ -d /usr/lib/ccache/bin ] ; then
-				export PATH="/usr/lib/ccache/bin:$PATH"
-			elif [ -d /usr/bin/ccache ] ; then
-				export PATH="/usr/bin/ccache:$PATH"
-			fi
-
-			[[ -z $CCACHE_DIR ]] && export CCACHE_DIR=/var/tmp/ccache
+			export PATH="/usr/lib/ccache/bin:$PATH"
 
 			addread "$CCACHE_DIR"
 			addwrite "$CCACHE_DIR"
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 131b8d19d..7630c2ff1 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -5348,10 +5348,12 @@ def _prepare_features_dirs(mysettings):
 
 	features_dirs = {
 		"ccache":{
+			"path_dir": "/usr/lib/ccache/bin",
 			"basedir_var":"CCACHE_DIR",
 			"default_dir":os.path.join(mysettings["PORTAGE_TMPDIR"], "ccache"),
 			"always_recurse":False},
 		"distcc":{
+			"path_dir": "/usr/lib/distcc/bin",
 			"basedir_var":"DISTCC_DIR",
 			"default_dir":os.path.join(mysettings["BUILD_PREFIX"], ".distcc"),
 			"subdirs":("lock", "state"),
@@ -5367,11 +5369,16 @@ def _prepare_features_dirs(mysettings):
 		"userpriv" not in restrict
 	for myfeature, kwargs in features_dirs.iteritems():
 		if myfeature in mysettings.features:
-			basedir = mysettings[kwargs["basedir_var"]]
-			if basedir == "":
+			failure = False
+			basedir = mysettings.get(kwargs["basedir_var"])
+			if basedir is None or not basedir.strip():
 				basedir = kwargs["default_dir"]
 				mysettings[kwargs["basedir_var"]] = basedir
 			try:
+				path_dir = kwargs["path_dir"]
+				if not os.path.isdir(path_dir):
+					raise portage.exception.DirectoryNotFound(path_dir)
+
 				mydirs = [mysettings[kwargs["basedir_var"]]]
 				if "subdirs" in kwargs:
 					for subdir in kwargs["subdirs"]:
@@ -5421,14 +5428,25 @@ def _prepare_features_dirs(mysettings):
 						filemode=filemode, filemask=modemask, onerror=onerror):
 							raise portage.exception.OperationNotPermitted(
 								"Failed to apply recursive permissions for the portage group.")
+
+			except portage.exception.DirectoryNotFound, e:
+				failure = True
+				writemsg("\n!!! Directory does not exist: '%s'\n" % \
+					(e,), noiselevel=-1)
+				writemsg("!!! Disabled FEATURES='%s'\n" % myfeature,
+					noiselevel=-1)
+
 			except portage.exception.PortageException, e:
-				mysettings.features.remove(myfeature)
-				mysettings["FEATURES"] = " ".join(mysettings.features)
-				writemsg("!!! %s\n" % str(e), noiselevel=-1)
+				failure = True
+				writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
 				writemsg("!!! Failed resetting perms on %s='%s'\n" % \
 					(kwargs["basedir_var"], basedir), noiselevel=-1)
 				writemsg("!!! Disabled FEATURES='%s'\n" % myfeature,
 					noiselevel=-1)
+
+			if failure:
+				mysettings.features.remove(myfeature)
+				mysettings['FEATURES'] = ' '.join(sorted(mysettings.features))
 				time.sleep(5)
 
 def _prepare_workdir(mysettings):
-- 
2.26.2