Yo...
attached is a patch enabling confcache support for portage. Lots of
testing, plus fixups from comments from folks prior.
So... giving it a few days, nows the time to bitch if you dislike the
implementation (and no, I'm not rewriting all of doebuild just for
this :)
~harring
Index: pym/portage.py
===
--- pym/portage.py (revision 2622)
+++ pym/portage.py (working copy)
@@ -2666,7 +2666,38 @@
print !!! Perhaps: rm -Rf,mysettings[BUILD_PREFIX]
print !!!,str(e)
return 1
+ try:
+ if confcache in features:
+ if not mysettings.has_key(CONFCACHE_DIR):
+ mysettings[CONFCACHE_DIR] =
os.path.join(mysettings[PORTAGE_TMPDIR], confcache)
+ if not
os.path.exists(mysettings[CONFCACHE_DIR]):
+ if not os.getuid() == 0:
+ # we're boned.
+ features.remove(confcache)
+ mysettings[FEATURES] =
.join(features)
+ else:
+
os.makedirs(mysettings[CONFCACHE_DIR], mode=0775)
+
os.chown(mysettings[CONFCACHE_DIR], -1, portage_gid)
+ else:
+ st =
os.stat(mysettings[CONFCACHE_DIR])
+ if not (st.st_mode 0) == 0775:
+
os.chmod(mysettings[CONFCACHE_DIR], 0775)
+ if not st.st_gid == portage_gid:
+
os.chown(mysettings[CONFCACHE_DIR], -1, portage_gid)
+ # check again, since it may have been disabled.
+ if confcache in features:
+ for x in listdir(mysettings[CONFCACHE_DIR]):
+ p =
os.path.join(mysettings[CONFCACHE_DIR], x)
+ st = os.stat(p)
+ if not (st.st_mode 0) 07600 ==
0600:
+ os.chmod(p, (st.st_mode 0777)
| 0600)
+ if not st.st_gid == portage_gid:
+ os.chown(p, -1, portage_gid)
+
+ except OSError, e:
+ print !!! Failed resetting perms on confcachedir %s %
mysettings[CONFCACHE_DIR]
+ return 1
#try:
# mystat=os.stat(mysettings[CCACHE_DIR])
# if (mystat[stat.ST_GID]!=portage_gid) or
((mystat[stat.ST_MODE]02070)!=02070):
Index: bin/ebuild.sh
===
--- bin/ebuild.sh (revision 2622)
+++ bin/ebuild.sh (working copy)
@@ -493,7 +493,32 @@
LOCAL_EXTRA_ECONF=--libdir=${CONF_LIBDIR_RESULT}
${LOCAL_EXTRA_ECONF}
fi
- echo ${ECONF_SOURCE}/configure \
+ local TMP_CONFCACHE_DIR CONFCACHE_ARG
+ if hasq confcache $FEATURES ! hasq confcache $RESTRICT; then
+ CONFCACHE=$(type -p confcache)
+ if [ -z ${CONFCACHE} ]; then
+ ewarn disabling confcache, binary cannot be
found
+ else
+ CONFCACHE=${CONFCACHE/ /\ }
+
TMP_CONFCACHE_DIR=${CONFCACHE:+${CONFCACHE_DIR:-${PORTAGE_TMPDIR}/confcache}}
+ TMP_CONFCACHE_DIR=${TMP_CONFCACHE_DIR/ /\ }
+ CONFCACHE_ARG=--confcache-dir
+ local s
+ if [ -n $CCACHE_DIR ]; then
+ s=$CCACHE_DIR
+ fi
+ if [ -n $DISTCC_DIR ]; then
+ s=${s:+${s}:}$DISTCC_DIR
+ fi
+ if [ -n $s ]; then
+ CONFCACHE_ARG=--confcache-ignore $s
$CONFCACHE_ARG
+ fi
+ fi
+ else
+ CONFCACHE=
+ fi
+
+ echo ${CONFCACHE} ${CONFCACHE_ARG} ${TMP_CONFCACHE_DIR}
${ECONF_SOURCE}/configure \
--prefix=/usr \
--host=${CHOST} \
--mandir=/usr/share/man \
@@ -504,7 +529,7 @@