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 & 07777)  == 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 & 07777) & 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 @@
                        "$@" \
                        ${LOCAL_EXTRA_ECONF}
 
-               if ! "${ECONF_SOURCE}/configure" \
+               if ! ${CONFCACHE} ${CONFCACHE_ARG} ${TMP_CONFCACHE_DIR} 
"${ECONF_SOURCE}/configure" \
                        --prefix=/usr \
                        --host=${CHOST} \
                        --mandir=/usr/share/man \

Attachment: pgp14bCivJKZA.pgp
Description: PGP signature

Reply via email to