aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2014-09-25 11:33:44 -0700
committerBrian Dolbec <dolsen@gentoo.org>2014-09-25 18:22:13 -0700
commit042e1e0695255470e3194b6d343c74a1f2ec7f4b (patch)
tree55767946f6af70c1615fa4fecc1f50b6a27d1796
parentsetup.py: Move sbin scripts in bin/ (diff)
downloadportage-042e1e0695255470e3194b6d343c74a1f2ec7f4b.tar.gz
portage-042e1e0695255470e3194b6d343c74a1f2ec7f4b.tar.bz2
portage-042e1e0695255470e3194b6d343c74a1f2ec7f4b.zip
Re-apply "Rewrite default ebuild phase setting code" (bug 523182)"
Add empty default src_prepare() as required by PMS Add missing bind for pkg_nofetch. Spotted-by: Zac Medico <zmedico@gentoo.org> X-Gento-Bug: 523182 X-Gentoo-URL: https://bugs.gentoo.org/show_bug.cgi?id=523182 Merged 3 pathces by: Brian Dolbec <dolsen@gentoo.org>
-rw-r--r--bin/phase-functions.sh123
-rw-r--r--bin/phase-helpers.sh4
-rw-r--r--bin/save-ebuild-env.sh2
3 files changed, 63 insertions, 66 deletions
diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index df385b841..d292ad306 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -750,91 +750,84 @@ __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_prepare src_configure
- src_compile src_install src_test"
- local x y default_func=""
-
- for x in pkg_nofetch src_unpack src_test ; do
- declare -F $x >/dev/null || \
- eval "$x() { __eapi0_$x \"\$@\" ; }"
+ local all_phases="src_compile pkg_config src_configure pkg_info
+ src_install pkg_nofetch pkg_postinst pkg_postrm pkg_preinst
+ src_prepare pkg_prerm pkg_pretend pkg_setup src_test src_unpack"
+ local x
+
+ # First, set up the error handlers for default*
+ for x in ${all_phases} ; do
+ eval "default_${x}() {
+ die \"default_${x}() is not supported in EAPI='${eapi}' in phase ${phase_func}\"
+ }"
done
+ # We can just call the specific handler -- it will either error out
+ # on invalid phase or run it.
+ eval "default() {
+ default_${phase_func}
+ }"
+
case "$eapi" in
+ 0|1) # EAPIs not supporting 'default'
- 0|1)
+ for x in pkg_nofetch src_unpack src_test ; do
+ declare -F $x >/dev/null || \
+ eval "$x() { __eapi0_$x; }"
+ done
if ! declare -F src_compile >/dev/null ; then
case "$eapi" in
0)
- src_compile() { __eapi0_src_compile "$@" ; }
+ src_compile() { __eapi0_src_compile; }
;;
*)
- src_compile() { __eapi1_src_compile "$@" ; }
+ src_compile() { __eapi1_src_compile; }
;;
esac
fi
-
- for x in $default_phases ; do
- eval "default_$x() {
- die \"default_$x() is not supported with EAPI='$eapi' during phase $phase_func\"
- }"
- done
-
- eval "default() {
- die \"default() is not supported with EAPI='$eapi' during phase $phase_func\"
- }"
-
;;
- *)
-
+ *) # EAPIs supporting 'default'
+
+ # defaults starting with EAPI 0
+ [[ ${phase_func} == pkg_nofetch ]] && \
+ default_pkg_nofetch() { __eapi0_pkg_nofetch; }
+ [[ ${phase_func} == src_unpack ]] && \
+ default_src_unpack() { __eapi0_src_unpack; }
+ [[ ${phase_func} == src_test ]] && \
+ default_src_test() { __eapi0_src_test; }
+
+ # defaults starting with EAPI 2
+ [[ ${phase_func} == src_prepare ]] && \
+ default_src_prepare() { __eapi2_src_prepare; }
+ [[ ${phase_func} == src_configure ]] && \
+ default_src_configure() { __eapi2_src_configure; }
+ [[ ${phase_func} == src_compile ]] && \
+ default_src_compile() { __eapi2_src_compile; }
+
+ # bind supported phases to the defaults
+ declare -F pkg_nofetch >/dev/null || \
+ pkg_nofetch() { default; }
+ declare -F src_unpack >/dev/null || \
+ src_unpack() { default; }
+ declare -F src_prepare >/dev/null || \
+ src_prepare() { default; }
declare -F src_configure >/dev/null || \
- src_configure() { __eapi2_src_configure "$@" ; }
-
+ src_configure() { default; }
declare -F src_compile >/dev/null || \
- src_compile() { __eapi2_src_compile "$@" ; }
-
- has $eapi 2 3 || declare -F src_install >/dev/null || \
- src_install() { __eapi4_src_install "$@" ; }
+ src_compile() { default; }
+ declare -F src_test >/dev/null || \
+ src_test() { default; }
- if has $phase_func $default_phases ; then
-
- __eapi2_pkg_nofetch () { __eapi0_pkg_nofetch "$@" ; }
- __eapi2_src_unpack () { __eapi0_src_unpack "$@" ; }
- __eapi2_src_prepare () { true ; }
- __eapi2_src_test () { __eapi0_src_test "$@" ; }
- __eapi2_src_install () { die "$FUNCNAME is not supported" ; }
-
- for x in $default_phases ; do
- eval "default_$x() { __eapi2_$x \"\$@\" ; }"
- done
-
- eval "default() { __eapi2_$phase_func \"\$@\" ; }"
-
- case "$eapi" in
- 2|3)
- ;;
- *)
- eval "default_src_install() { __eapi4_src_install \"\$@\" ; }"
- [[ $phase_func = src_install ]] && \
- eval "default() { __eapi4_$phase_func \"\$@\" ; }"
- ;;
- esac
-
- else
-
- for x in $default_phases ; do
- eval "default_$x() {
- die \"default_$x() is not supported in phase $default_func\"
- }"
- done
-
- eval "default() {
- die \"default() is not supported with EAPI='$eapi' during phase $phase_func\"
- }"
+ # defaults starting with EAPI 4
+ if ! has ${eapi} 2 3; then
+ [[ ${phase_func} == src_install ]] && \
+ default_src_install() { __eapi4_src_install; }
+ declare -F src_install >/dev/null || \
+ src_install() { default; }
fi
-
;;
esac
}
diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
index ca28ce9e9..5f7c809e5 100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@ -682,6 +682,10 @@ __eapi1_src_compile() {
__eapi2_src_compile
}
+__eapi2_src_prepare() {
+ :
+}
+
__eapi2_src_configure() {
if [[ -x ${ECONF_SOURCE:-.}/configure ]] ; then
econf
diff --git a/bin/save-ebuild-env.sh b/bin/save-ebuild-env.sh
index 98cff839e..de0c49935 100644
--- a/bin/save-ebuild-env.sh
+++ b/bin/save-ebuild-env.sh
@@ -42,7 +42,7 @@ __save_ebuild_env() {
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
+ pkg_prerm pkg_postrm pkg_config pkg_info pkg_pretend ; do
unset -f default_$x __eapi{0,1,2,3,4}_$x
done
unset x