On Tue, Jan 24, 2006 at 03:37:07PM -0500, solar wrote:
> On Wed, 2006-01-25 at 00:30 +0900, Jason Stubbs wrote:
> > On Tuesday 24 January 2006 21:50, Brian Harring wrote:
> > 
> > +    os.makedirs(mysettings["CONFCACHE_DIR"], mode=0775)
> > +    os.chown(mysettings["CONFCACHE_DIR"], portage_uid, -1)
> > 
> > This will die when running as non-root, no? "ebuild" is now oft used by devs
> > running as normal users which will be broken by this. 
> 
> Your right. I've hit that bug myself in the past switching 
> between root merges and being a real life dev and running ebuild 
> foo.build clean unpack compile;
Meh.  should've told me :P

Attached is round 2, including man/make.conf mods (ignore the fact 
it's a single make.conf, if accepted the alt make.conf's will be 
updated with the same text).
~harring
Index: pym/portage.py
===================================================================
--- pym/portage.py      (revision 2583)
+++ pym/portage.py      (working copy)
@@ -2669,7 +2669,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: cnf/make.conf
===================================================================
--- cnf/make.conf       (revision 2583)
+++ cnf/make.conf       (working copy)
@@ -259,6 +259,8 @@
 #  'buildpkg'    causes binary packages to be created of all packages that 
 #                are being merged.
 #  'ccache'      enables ccache support via CC.
+#  'confcache'   enable confcache support; speeds up autotool based configure
+#                calls
 #  'collision-protect'
 #                prevents packages from overwriting files that are owned by
 #                another package or by no package at all.
Index: bin/ebuild.sh
===================================================================
--- bin/ebuild.sh       (revision 2583)
+++ bin/ebuild.sh       (working copy)
@@ -493,7 +493,22 @@
                        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"
+                       fi
+               else
+                       CONFCACHE=
+               fi
+
+               echo ${CONFCACHE} ${CONFCACHE_ARG} ${TMP_CONFCACHE_DIR} 
"${ECONF_SOURCE}/configure" \
                        --prefix=/usr \
                        --host=${CHOST} \
                        --mandir=/usr/share/man \
@@ -504,7 +519,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 \
Index: man/make.conf.5
===================================================================
--- man/make.conf.5     (revision 2583)
+++ man/make.conf.5     (working copy)
@@ -126,6 +126,10 @@
 present in the user's environment, then portage will default to 
 ${PORTAGE_TMPDIR}/ccache (with \fIuserpriv\fR) and to /root/.ccache otherwise.
 .TP
+.B confcache
+Enable confcache support; global configure caching, speeds up autotool based 
configure 
+calls.
+.TP
 .B collision\-protect
 A QA\-feature to ensure that a package doesn't overwrite files it doesn't own.
 .TP

Attachment: pgpiSLK3MPJUE.pgp
Description: PGP signature

Reply via email to