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
pgpiSLK3MPJUE.pgp
Description: PGP signature
