summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/ebuild.sh36
-rw-r--r--bin/misc-functions.sh45
-rw-r--r--pym/portage.py13
-rw-r--r--pym/portage_const.py1
4 files changed, 59 insertions, 36 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index d92d5efc3..87d72f4f5 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -891,13 +891,6 @@ abort_unpack() {
exit 1
}
-abort_package() {
- abort_handler "dyn_package" $1
- rm -f "${PORTAGE_BUILDDIR}/.packaged"
- rm -f "${PKGDIR}"/All/${PF}.t*
- exit 1
-}
-
abort_test() {
abort_handler "dyn_test" $1
rm -f "${PORTAGE_BUILDDIR}/.tested"
@@ -998,27 +991,6 @@ dyn_compile() {
trap SIGINT SIGQUIT
}
-dyn_package() {
- trap "abort_package" SIGINT SIGQUIT
- cd "${PORTAGE_BUILDDIR}/image"
- install_mask "${PORTAGE_BUILDDIR}/image" ${PKG_INSTALL_MASK}
- tar cpvf - ./ | bzip2 -f > ../bin.tar.bz2 || die "Failed to create tarball"
- cd ..
- xpak build-info inf.xpak
- tbz2tool join bin.tar.bz2 inf.xpak "${PF}.tbz2"
- mv "${PF}.tbz2" "${PKGDIR}/All" || die "Failed to move tbz2 to ${PKGDIR}/All"
- rm -f inf.xpak bin.tar.bz2
- if [ ! -d "${PKGDIR}/${CATEGORY}" ]; then
- install -d "${PKGDIR}/${CATEGORY}"
- fi
- ln -sf "../All/${PF}.tbz2" "${PKGDIR}/${CATEGORY}/${PF}.tbz2" || die "Failed to create symlink in ${PKGDIR}/${CATEGORY}"
- echo ">>> Done."
- cd "${PORTAGE_BUILDDIR}"
- touch .packaged || die "Failed to 'touch .packaged' in ${PORTAGE_BUILDDIR}"
- trap SIGINT SIGQUIT
-}
-
-
dyn_test() {
[ "$(type -t pre_src_test)" == "function" ] && pre_src_test
if [ "${PORTAGE_BUILDDIR}/.tested" -nt "${WORKDIR}" ]; then
@@ -2004,7 +1976,7 @@ for myarg in $*; do
set +x
fi
;;
- package|rpm)
+ rpm)
export SANDBOX_ON="0"
if [ "$PORTAGE_DEBUG" != "1" ]; then
dyn_${myarg}
@@ -2069,7 +2041,8 @@ for myarg in $*; do
#fi
done
-if [ "$myarg" != "clean" ]; then
+# Save the env only for relevant phases.
+if [ -n "$myarg" ] && [ "$myarg" != "clean" ]; then
# Save current environment and touch a success file. (echo for success)
umask 002
set | egrep -v "^SANDBOX_" > "${T}/environment" 2>/dev/null
@@ -2077,4 +2050,5 @@ if [ "$myarg" != "clean" ]; then
chmod g+w "${T}/environment" &>/dev/null
fi
-exit 0
+# Do not exit when ebuild.sh is sourced by other scripts.
+true
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
new file mode 100644
index 000000000..0eb184b30
--- /dev/null
+++ b/bin/misc-functions.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header$
+#
+# Miscellaneous shell functions that make use of the ebuild env but don't need
+# to be included directly in ebuild.sh.
+#
+# We're sourcing ebuild.sh here so that we inherit all of it's goodness,
+# including bashrc trickery. This approach allows us to do our miscellaneous
+# shell work withing the same env that ebuild.sh has, but without polluting
+# ebuild.sh itself with unneeded logic and shell code.
+#
+# XXX hack: clear the args so ebuild.sh doesn't see them
+MISC_FUNCTIONS_ARGS="$@"
+shift $#
+source /usr/lib/portage/bin/ebuild.sh
+
+dyn_package() {
+ cd "${PORTAGE_BUILDDIR}/image"
+ install_mask "${PORTAGE_BUILDDIR}/image" ${PKG_INSTALL_MASK}
+ tar cpvf - ./ | bzip2 -f > ../bin.tar.bz2 || die "Failed to create tarball"
+ cd ..
+ xpak build-info inf.xpak
+ tbz2tool join bin.tar.bz2 inf.xpak "${PF}.tbz2"
+ addwrite "${PKGDIR}"
+ mv "${PF}.tbz2" "${PKGDIR}/All" || die "Failed to move tbz2 to ${PKGDIR}/All"
+ rm -f inf.xpak bin.tar.bz2
+ if [ ! -d "${PKGDIR}/${CATEGORY}" ]; then
+ install -d "${PKGDIR}/${CATEGORY}"
+ fi
+ ln -sf "../All/${PF}.tbz2" "${PKGDIR}/${CATEGORY}/${PF}.tbz2" || die "Failed to create symlink in ${PKGDIR}/${CATEGORY}"
+ echo ">>> Done."
+ cd "${PORTAGE_BUILDDIR}"
+ touch .packaged || die "Failed to 'touch .packaged' in ${PORTAGE_BUILDDIR}"
+}
+
+if [ -n "${MISC_FUNCTIONS_ARGS}" ]; then
+ [ "$PORTAGE_DEBUG" == "1" ] && set -x
+ for x in ${MISC_FUNCTIONS_ARGS}; do
+ ${x}
+ done
+fi
+
+true
diff --git a/pym/portage.py b/pym/portage.py
index e3d5ad742..6468b0f87 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -86,7 +86,7 @@ try:
MOVE_BINARY, PRELINK_BINARY, WORLD_FILE, MAKE_CONF_FILE, MAKE_DEFAULTS_FILE, \
DEPRECATED_PROFILE_FILE, USER_VIRTUALS_FILE, EBUILD_SH_ENV_FILE, \
INVALID_ENV_FILE, CUSTOM_MIRRORS_FILE, CONFIG_MEMORY_FILE,\
- INCREMENTALS, STICKIES, EAPI
+ INCREMENTALS, STICKIES, EAPI, MISC_SH_BINARY
from portage_data import ostype, lchown, userland, secpass, uid, wheelgid, \
portage_uid, portage_gid
@@ -2367,18 +2367,21 @@ def spawnebuild(mydo,actionmap,mysettings,debug,alwaysdep=0,logfile=None):
retval=spawnebuild(actionmap[mydo]["dep"],actionmap,mysettings,debug,alwaysdep=alwaysdep,logfile=logfile)
if retval:
return retval
- # spawn ebuild.sh
- mycommand = EBUILD_SH_BINARY + " "
+ # spawn ebuild.sh or misc-functions.sh as appropriate
+ if mydo in ["package"]:
+ mycommand = MISC_SH_BINARY + " dyn_" + mydo
+ else:
+ mycommand = EBUILD_SH_BINARY + " " + mydo
if selinux_enabled and ("sesandbox" in features) and (mydo in ["unpack","compile","test","install"]):
con=selinux.getcontext()
con=string.replace(con,mysettings["PORTAGE_T"],mysettings["PORTAGE_SANDBOX_T"])
selinux.setexec(con)
- retval=spawn(mycommand + mydo,mysettings,debug=debug,
+ retval=spawn(mycommand, mysettings, debug=debug,
free=actionmap[mydo]["args"][0],
droppriv=actionmap[mydo]["args"][1],logfile=logfile)
selinux.setexec(None)
else:
- retval=spawn(mycommand + mydo,mysettings, debug=debug,
+ retval=spawn(mycommand, mysettings, debug=debug,
free=actionmap[mydo]["args"][0],
droppriv=actionmap[mydo]["args"][1],logfile=logfile)
return retval
diff --git a/pym/portage_const.py b/pym/portage_const.py
index 99082a77c..04b61c4b7 100644
--- a/pym/portage_const.py
+++ b/pym/portage_const.py
@@ -24,6 +24,7 @@ PROFILE_PATH = "/etc/make.profile"
LOCALE_DATA_PATH = PORTAGE_BASE_PATH+"/locale"
EBUILD_SH_BINARY = PORTAGE_BIN_PATH+"/ebuild.sh"
+MISC_SH_BINARY = PORTAGE_BIN_PATH + "/misc-functions.sh"
SANDBOX_BINARY = "/usr/bin/sandbox"
BASH_BINARY = "/bin/bash"
MOVE_BINARY = "/bin/mv"