Make EXPORT_FUNCTIONS store it's arguments in an environment variable and
authorZac Medico <zmedico@gentoo.org>
Sun, 8 Mar 2009 06:26:09 +0000 (06:26 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 8 Mar 2009 06:26:09 +0000 (06:26 -0000)
perform the function generation after the current inherit call has returned.
This way an eclass can call EXPORT_FUNCTIONS either before or after it
inherits other eclasses, and the result is still the same. Thanks to
Donnie Berkholz <dberkholz@g.o> for reporting.

svn path=/main/trunk/; revision=12782

bin/ebuild.sh

index dac55a2116e81c9af7158d0147bf251611db008f..d1ff26aba6af1368e27209befb5d6d1e697de5de 100755 (executable)
@@ -1159,6 +1159,7 @@ inherit() {
        local location
        local olocation
        local PECLASS
+       local export_funcs_var x
 
        local B_IUSE
        local B_DEPEND
@@ -1171,6 +1172,8 @@ inherit() {
                # PECLASS is used to restore the ECLASS var after recursion.
                PECLASS="$ECLASS"
                export ECLASS="$1"
+               export_funcs_var=__export_functions_${ECLASS/-/___}
+               unset $export_funcs_var
 
                if [ "${EBUILD_PHASE}" != "depend" ] && \
                        [[ ${EBUILD_PHASE} != *rm ]] && \
@@ -1245,6 +1248,14 @@ inherit() {
                #turn on glob expansion
                set +f
 
+               if [[ -n ${!export_funcs_var} ]] ; then
+                       for x in ${!export_funcs_var} ; do
+                               debug-print "EXPORT_FUNCTIONS: $x -> ${ECLASS}_$x"
+                               eval "$x() { ${ECLASS}_$x \"\$@\" ; }" > /dev/null
+                       done
+               fi
+               unset $export_funcs_var
+
                hasq $1 $INHERITED || export INHERITED="$INHERITED $1"
 
                export ECLASS="$PECLASS"
@@ -1261,14 +1272,9 @@ inherit() {
 # src_unpack() { base_src_unpack; }
 EXPORT_FUNCTIONS() {
        if [ -z "$ECLASS" ]; then
-               echo "EXPORT_FUNCTIONS without a defined ECLASS" >&2
-               exit 1
+               die "EXPORT_FUNCTIONS without a defined ECLASS"
        fi
-       while [ "$1" ]; do
-               debug-print "EXPORT_FUNCTIONS: ${1} -> ${ECLASS}_${1}"
-               eval "$1() { ${ECLASS}_$1 \"\$@\" ; }" > /dev/null
-               shift
-       done
+       eval __export_functions_${ECLASS/-/___}+=\" $*\"
 }
 
 # adds all parameters to E_DEPEND and E_RDEPEND, which get added to DEPEND