ferringb did some tests and found that doing multiple inclusion protection in eclasses gets us some nice speed ups. it isn't nearly as nice as if we had a way of skipping the `source` altogether, but that that would require PMS/tree changes. the change i'm proposing can be implemented $now and should work with all versions. PMS extensions can thus be discussed in parallel.
simply put, it's the same thing as doing standard #ifdef logic in headers to
protect against multiple inclusion errors. on to the example:
--- autotools.eclass
+++ autotools.eclass
@@ -10,6 +10,9 @@
# This eclass is for safely handling autotooled software packages that need
# regenerate their build scripts. All functions will abort in case of
+if [[ ${___ECLASS_ONCE_AUTOTOOLS} != "recur -_+^+_- spank" ]] ; then
+___ECLASS_ONCE_AUTOTOOLS="recur -_+^+_- spank"
+
inherit eutils libtool
# @ECLASS-VARIABLE: WANT_AUTOCONF
@@ -399,3 +402,5 @@
echo $include_opts
}
+
+fi
this assumes that the eclass in question isn't doing something weird. for
example, if you had an ebuild today that did:
inherit eutils
epatch() { die erp; }
inherit eutils
that local epatch() would get reset by the eutils inherit. but i can't see
any ebuild having a valid reason for doing things like this, so screw 'em.
i plan on implementing this in the eclasses i generally look over. i don't
plan on doing it for all eclasses since i'm not familiar with them.
-mike
signature.asc
Description: This is a digitally signed message part.
