summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-08-23 02:02:06 +0000
committerZac Medico <zmedico@gentoo.org>2008-08-23 02:02:06 +0000
commit0e7a83b0946dc21d461a7c542267e2963354341e (patch)
tree6baebda06aacf81ab8483ec2d9f98d83bade8d30 /bin
parentc47730c0f2b6c9270382357d20f4a47322ad5da5 (diff)
downloadportage-0e7a83b0946dc21d461a7c542267e2963354341e.tar.gz
portage-0e7a83b0946dc21d461a7c542267e2963354341e.tar.bz2
portage-0e7a83b0946dc21d461a7c542267e2963354341e.zip
Add a new src_prepare phase function which is called in-between src_unpack
and src_configure (and bump EAPI to 2_pre3). Thanks to Ciaran McCreesh for the suggestion. svn path=/main/trunk/; revision=11454
Diffstat (limited to 'bin')
-rwxr-xr-xbin/ebuild.sh44
-rwxr-xr-xbin/isolated-functions.sh8
2 files changed, 44 insertions, 8 deletions
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 2a434ef75..e45747d02 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -726,7 +726,7 @@ dyn_clean() {
fi
if ! hasq keepwork $FEATURES; then
- rm -f "$PORTAGE_BUILDDIR"/.{exit_status,logid,unpacked} \
+ rm -f "$PORTAGE_BUILDDIR"/.{exit_status,logid,unpacked,prepared} \
"$PORTAGE_BUILDDIR"/.{configured,compiled,tested,packaged}
rm -rf "${PORTAGE_BUILDDIR}/build-info"
@@ -832,6 +832,12 @@ abort_handler() {
trap SIGINT SIGQUIT
}
+abort_prepare() {
+ abort_handler src_prepare $1
+ rm -f "$PORTAGE_BUILDDIR/.prepared"
+ exit 1
+}
+
abort_configure() {
abort_handler src_configure $1
rm -f "$PORTAGE_BUILDDIR/.configured"
@@ -856,6 +862,32 @@ abort_install() {
exit 1
}
+dyn_prepare() {
+
+ if [[ $PORTAGE_BUILDDIR/.prepared -nt $WORKDIR ]] ; then
+ vecho ">>> It appears that '$PF' is already prepared; skipping."
+ vecho ">>> Remove '$PORTAGE_BUILDDIR/.prepared' to force prepare."
+ return 0
+ fi
+
+ local srcdir
+ if [[ -d $S ]] ; then
+ srcdir=$S
+ else
+ srcdir=$WORKDIR
+ fi
+ cd "$srcdir"
+
+ trap abort_prepare SIGINT SIGQUIT
+
+ ebuild_phase pre_src_prepare
+ ebuild_phase src_prepare
+ touch "$PORTAGE_BUILDDIR"/.prepared
+ ebuild_phase post_src_prepare
+
+ trap SIGINT SIGQUIT
+}
+
dyn_configure() {
if [[ $PORTAGE_BUILDDIR/.configured -nt $WORKDIR ]] ; then
@@ -1038,7 +1070,8 @@ dyn_help() {
echo " fetch : download source archive(s) and patches"
echo " digest : create a manifest file for the package"
echo " manifest : create a manifest file for the package"
- echo " unpack : unpack/patch sources (auto-fetch if needed)"
+ echo " unpack : unpack sources (auto-dependencies if needed)"
+ echo " prepare : prepare sources (auto-dependencies if needed)"
echo " configure : configure sources (auto-fetch/unpack if needed)"
echo " compile : compile sources (auto-fetch/unpack/configure if needed)"
echo " test : test package (auto-fetch/unpack/configure/compile if needed)"
@@ -1387,7 +1420,7 @@ _ebuild_phase_funcs() {
[ $# -ne 2 ] && die "expected exactly 2 args, got $#: $*"
local eapi=$1
local phase_func=$2
- local default_phases="pkg_nofetch src_unpack src_configure
+ local default_phases="pkg_nofetch src_unpack src_prepare src_configure
src_compile src_install src_test"
local x y default_func=""
@@ -1440,6 +1473,7 @@ _ebuild_phase_funcs() {
eapi0_pkg_nofetch () { _eapi0_pkg_nofetch "$@" ; }
eapi0_src_unpack () { _eapi0_src_unpack "$@" ; }
+ eapi0_src_prepare () { die "$FUNCNAME is not supported" ; }
eapi0_src_configure () { die "$FUNCNAME is not supported" ; }
eapi0_src_compile () { _eapi0_src_compile "$@" ; }
eapi0_src_test () { _eapi0_src_test "$@" ; }
@@ -1447,6 +1481,7 @@ _ebuild_phase_funcs() {
eapi1_pkg_nofetch () { _eapi0_pkg_nofetch "$@" ; }
eapi1_src_unpack () { _eapi0_src_unpack "$@" ; }
+ eapi1_src_prepare () { die "$FUNCNAME is not supported" ; }
eapi1_src_configure () { die "$FUNCNAME is not supported" ; }
eapi1_src_compile () { _eapi1_src_compile "$@" ; }
eapi1_src_test () { _eapi0_src_test "$@" ; }
@@ -1454,6 +1489,7 @@ _ebuild_phase_funcs() {
eapi2_pkg_nofetch () { _eapi0_pkg_nofetch "$@" ; }
eapi2_src_unpack () { _eapi0_src_unpack "$@" ; }
+ eapi2_src_prepare () { true ; }
eapi2_src_configure () { _eapi2_src_configure "$@" ; }
eapi2_src_compile () { _eapi2_src_compile "$@" ; }
eapi2_src_test () { _eapi0_src_test "$@" ; }
@@ -1945,7 +1981,7 @@ ebuild_main() {
| bzip2 -c -f9 > "$PORTAGE_UPDATE_ENV"
fi
;;
- unpack|configure|compile|test|clean|install)
+ unpack|prepare|configure|compile|test|clean|install)
if [[ ${SANDBOX_DISABLED:-0} = 0 ]] ; then
export SANDBOX_ON="1"
else
diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh
index e52c9fd7c..0345bbead 100755
--- a/bin/isolated-functions.sh
+++ b/bin/isolated-functions.sh
@@ -517,7 +517,7 @@ save_ebuild_env() {
if hasq --exclude-init-phases $* ; then
unset S _E_DOCDESTTREE_ _E_EXEDESTTREE_
- unset -f pkg_nofetch src_unpack src_configure \
+ unset -f pkg_nofetch src_unpack src_prepare src_configure \
src_compile src_test src_install
if [[ -n $PYTHONPATH ]] ; then
export PYTHONPATH=${PYTHONPATH/${PORTAGE_PYM_PATH}:}
@@ -543,7 +543,7 @@ save_ebuild_env() {
# There's no need to bloat environment.bz2 with internally defined
# functions and variables, so filter them out if possible.
- for x in pkg_setup pkg_nofetch src_unpack src_configure \
+ for x in pkg_setup pkg_nofetch src_unpack src_prepare src_configure \
src_compile src_test src_install pkg_preinst pkg_postinst \
pkg_prerm pkg_postrm ; do
unset -f {,_}default_$x {,_}eapi{0,1,2}_$x
@@ -559,8 +559,8 @@ save_ebuild_env() {
keepdir unpack strip_duplicate_slashes econf einstall \
dyn_setup dyn_unpack dyn_clean into insinto exeinto docinto \
insopts diropts exeopts libopts \
- abort_handler abort_configure abort_compile \
- abort_test abort_install dyn_configure \
+ abort_handler abort_prepare abort_configure abort_compile \
+ abort_test abort_install dyn_prepare dyn_configure \
dyn_compile dyn_test dyn_install \
dyn_preinst dyn_help debug-print debug-print-function \
debug-print-section inherit EXPORT_FUNCTIONS newdepend newrdepend \