diff -uNrp portage-2.0.51.19/bin/ebuild.sh portage-2.0.51.19-preconfig/bin/ebuild.sh --- portage-2.0.51.19/bin/ebuild.sh 2005-02-26 06:22:37.000000000 -0500 +++ portage-2.0.51.19-preconfig/bin/ebuild.sh 2005-07-14 20:21:38.000000000 -0400 @@ -548,6 +548,11 @@ src_unpack() { fi } +src_preconfig() { + echo "default preconfig" + return `false` +} + src_compile() { if [ -x ./configure ]; then econf @@ -685,6 +690,20 @@ dyn_unpack() { trap SIGINT SIGQUIT } +dyn_preconfig() { + echo ">>> Preconfiguring source..." + cd ${S} + local preconfigured = 1 + echo "some more stuff" + src_preconfig && preconfigured=0 || preconfigured=1 + + if [ preconfigured ]; then + echo ">>> Source preconfigured." + else + echo ">>> Could not preconfigure the source." + fi +} + dyn_clean() { if [ "$USERLAND" == "BSD" ] && type -p chflags &>/dev/null; then chflags -R noschg,nouchg,nosappnd,nouappnd,nosunlnk,nouunlnk \ @@ -1778,7 +1797,7 @@ for myarg in $*; do set +x fi ;; - unpack|compile|test|clean|install) + unpack|preconfig|compile|test|clean|install) if [ "${SANDBOX_DISABLED="0"}" == "0" ]; then export SANDBOX_ON="1" else diff -uNrp portage-2.0.51.19/pym/portage.py portage-2.0.51.19-preconfig/pym/portage.py --- portage-2.0.51.19/pym/portage.py 2005-03-03 11:45:01.000000000 -0500 +++ portage-2.0.51.19-preconfig/pym/portage.py 2005-07-14 20:53:15.000000000 -0400 @@ -2253,9 +2253,14 @@ def spawnebuild(mydo,actionmap,mysetting retval=spawnebuild(actionmap[mydo]["dep"],actionmap,mysettings,debug,alwaysdep=alwaysdep,logfile=logfile) if retval: return retval + + # Do not log for preconfig as it break interactivity. + if mydo=="preconfig": + logfile=None + # spawn ebuild.sh mycommand = EBUILD_SH_BINARY + " " - if selinux_enabled and ("sesandbox" in features) and (mydo in ["unpack","compile","test","install"]): + if selinux_enabled and ("sesandbox" in features) and (mydo in ["unpack","preconfig","compile","test","install"]): con=selinux.getcontext() con=string.replace(con,mysettings["PORTAGE_T"],mysettings["PORTAGE_SANDBOX_T"]) selinux.setexec(con) @@ -2295,7 +2300,7 @@ def doebuild(myebuild,mydo,myroot,mysett validcommands = ["help","clean","prerm","postrm","preinst","postinst", "config","setup","depend","fetch","digest", - "unpack","compile","test","install","rpm","qmerge","merge", + "unpack","preconfig","compile","test","install","rpm","qmerge","merge", "package","unmerge", "manifest"] if mydo not in validcommands: @@ -2533,7 +2538,7 @@ def doebuild(myebuild,mydo,myroot,mysett return unmerge(mysettings["CATEGORY"],mysettings["PF"],myroot,mysettings) # if any of these are being called, handle them -- running them out of the sandbox -- and stop now. - if mydo=="clean": + if mydo in ["clean","config"]: logfile=None if mydo in ["help","clean","setup"]: return spawn(EBUILD_SH_BINARY+" "+mydo,mysettings,debug=debug,free=1,logfile=logfile) @@ -2623,13 +2628,18 @@ def doebuild(myebuild,mydo,myroot,mysett "depend": { "args":(0,1)}, # sandbox / portage "setup": { "args":(1,0)}, # without / root "unpack": {"dep":"setup", "args":(0,1)}, # sandbox / portage - "compile": {"dep":"unpack", "args":(nosandbox,1)}, # optional / portage + "preconfig": {"dep":"unpack", "args":(nosandbox,1)}, # optional / portage "test": {"dep":"compile", "args":(nosandbox,1)}, # optional / portage "install": {"dep":"test", "args":(0,0)}, # sandbox / root "rpm": {"dep":"install", "args":(0,0)}, # sandbox / root "package": {"dep":"install", "args":(0,0)}, # sandbox / root } - + + if "preconfig" in mysettings["FEATURES"].split(): + actionmap["compile"] = {"dep":"preconfig", "args":(nosandbox,1)} # optional / portage + else: + actionmap["compile"] = {"dep":"unpack", "args":(nosandbox,1)} # optional / portage + if mydo in actionmap.keys(): if mydo=="package": for x in ["","/"+mysettings["CATEGORY"],"/All"]: