This also fixes various other code smells.  I wrote this back in the start of
October, and never got around to sending it to the list for review.  A note:
given how extensively this patch changes the eclass, it is suggested that it
actually become depend.apache-r1 and only support EAPI=6, and the EAPI=6
ebuilds that presently inherit depend.apache can inherit this instead.
---
 eclass/depend.apache.eclass | 156 ++++++++++++++++++++++++++------------------
 1 file changed, 93 insertions(+), 63 deletions(-)

diff --git a/eclass/depend.apache.eclass b/eclass/depend.apache.eclass
index b69c2ec..2ef18cf 100644
--- a/eclass/depend.apache.eclass
+++ b/eclass/depend.apache.eclass
@@ -36,23 +36,21 @@
 # want_apache2 server
 #
 # pkg_setup() {
-#      depend.apache_pkg_setup server
+#      depend.apache_pkg_setup
 # }
 # @CODE
-
-inherit multilib
+#
+# NOTE: Unless you have an indirect dependency on Apache, if you have your
+# own pkg_setup, you must call depend.apache_pkg_setup to get the variables
+# provided by this eclass.
 
 case ${EAPI:-0} in
-       0|1|2|3|4|5)
+       2|3|4|5)
+               inherit multilib
                ;;
        6)
-               ewarn
-               ewarn "EAPI=${EAPI} is not supported by depend.apache.eclass."
-               ewarn "This means that ${CATEGORY}/${PF} is most likely buggy."
-               ewarn "Please file a report on https://bugs.gentoo.org/";
-               ewarn
                ;;
-       *)
+       0|1|*)
                die "EAPI=${EAPI} is not supported by depend.apache.eclass"
                ;;
 esac
@@ -64,47 +62,47 @@ esac
 # @ECLASS-VARIABLE: APACHE_VERSION
 # @DESCRIPTION:
 # Stores the version of apache we are going to be ebuilding.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APXS
 # @DESCRIPTION:
 # Path to the apxs tool.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_BIN
 # @DESCRIPTION:
 # Path to the apache binary.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_CTL
 # @DESCRIPTION:
 # Path to the apachectl tool.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_BASEDIR
 # @DESCRIPTION:
 # Path to the server root directory.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_CONFDIR
 # @DESCRIPTION:
 # Path to the configuration file directory.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_MODULES_CONFDIR
 # @DESCRIPTION:
 # Path where module configuration files are kept.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_VHOSTS_CONFDIR
 # @DESCRIPTION:
 # Path where virtual host configuration files are kept.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_MODULESDIR
 # @DESCRIPTION:
 # Path where we install modules.
-# This variable is set by the want/need_apache functions.
+# This variable is set by depend.apache-pkg_setup.
 
 # @ECLASS-VARIABLE: APACHE_DEPEND
 # @DESCRIPTION:
@@ -126,6 +124,17 @@ APACHE2_2_DEPEND="=www-servers/apache-2.2*"
 # Dependencies for Apache 2.4.x
 APACHE2_4_DEPEND="=www-servers/apache-2.4*"
 
+# @ECLASS-VARIABLE: APACHE_DEPENDENCY
+# @INTERNAL
+# @DESCRIPTION:
+# Whether we want or need Apache (used in pkg_setup)
+APACHE_DEPENDENCY="none"
+
+# @ECLASS-VARIABLE: APACHE_USEFLAG
+# @INTERNAL
+# @DESCRIPTION:
+# What useflag indicates we want apache2, defaults to apache2
+APACHE_USEFLAG="apache2"
 
 # 
==============================================================================
 # INTERNAL FUNCTIONS
@@ -134,8 +143,6 @@ APACHE2_4_DEPEND="=www-servers/apache-2.4*"
 _init_apache2() {
        debug-print-function $FUNCNAME $*
 
-       # WARNING: Do not use these variables with anything that is put
-       # into the dependency cache (DEPEND/RDEPEND/etc)
        APACHE_VERSION="2"
        APXS="/usr/sbin/apxs2"
        APACHE_BIN="/usr/sbin/apache2"
@@ -153,16 +160,42 @@ _init_no_apache() {
        APACHE_VERSION="0"
 }
 
+# @FUNCTION: _apache_dependency
+# @USAGE: { want | need } dependency [myiuse]
+# @DESCRIPTION:
+# Sets up apache dependencies. First parameter is the literal string "want" or
+# "need" to indicate the type of dependency. Second parameter is the dependency
+# string for {R,}DEPEND. Third parameter overrides the default useflag
+# indicating apache2 is wanted.
+_apache_dependency() {
+       debug-print-function $FUNCNAME $*
+
+       case $1 in
+               want)
+                       APACHE_USEFLAG="${3:-${APACHE_USEFLAG}}"
+                       IUSE="${IUSE} ${APACHE_USEFLAG}"
+                       DEPEND="${DEPEND} ${APACHE_USEFLAG}? ( $2 )"
+                       RDEPEND="${RDEPEND} ${APACHE_USEFLAG}? ( $2 )"
+                       ;;
+               need)
+                       DEPEND="${DEPEND} $2"
+                       RDEPEND="${RDEPEND} $2"
+                       ;;
+               *)
+                       die "Invalid first parameter to $FUNCNAME"
+                       ;;
+       esac
+       APACHE_DEPENDENCY="$1"
+}
+
 # 
==============================================================================
 # PUBLIC FUNCTIONS
 # 
==============================================================================
 
 # @FUNCTION: depend.apache_pkg_setup
-# @USAGE: [myiuse]
 # @DESCRIPTION:
-# An ebuild calls this in pkg_setup() to initialize variables for optional
-# apache-2.x support. If the myiuse parameter is not given it defaults to
-# apache2.
+# An ebuild calls this in pkg_setup() to initialize variables for apache-2.x
+# support.
 depend.apache_pkg_setup() {
        debug-print-function $FUNCNAME $*
 
@@ -170,14 +203,23 @@ depend.apache_pkg_setup() {
                die "$FUNCNAME() should be called in pkg_setup()"
        fi
 
-       local myiuse=${1:-apache2}
-       if has ${myiuse} ${IUSE}; then
-               if use ${myiuse}; then
+       case ${APACHE_DEPENDENCY} in
+               want)
+                       if use ${APACHE_USEFLAG}; then
+                               _init_apache2
+                       else
+                               _init_no_apache
+                       fi
+                       ;;
+               need)
                        _init_apache2
-               else
-                       _init_no_apache
-               fi
-       fi
+                       ;;
+               none)
+                       ;;
+               *)
+                       die "Invalid APACHE_DEPENDENCY setting"
+                       ;;
+       esac
 }
 
 # @FUNCTION: want_apache
@@ -185,8 +227,6 @@ depend.apache_pkg_setup() {
 # @DESCRIPTION:
 # An ebuild calls this to get the dependency information for optional apache
 # support. If the myiuse parameter is not given it defaults to apache2.
-# An ebuild should additionally call depend.apache_pkg_setup() in pkg_setup()
-# with the same myiuse parameter.
 want_apache() {
        debug-print-function $FUNCNAME $*
        want_apache2 "$@"
@@ -197,15 +237,9 @@ want_apache() {
 # @DESCRIPTION:
 # An ebuild calls this to get the dependency information for optional 
apache-2.x
 # support. If the myiuse parameter is not given it defaults to apache2.
-# An ebuild should additionally call depend.apache_pkg_setup() in pkg_setup()
-# with the same myiuse parameter.
 want_apache2() {
        debug-print-function $FUNCNAME $*
-
-       local myiuse=${1:-apache2}
-       IUSE="${IUSE} ${myiuse}"
-       DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )"
-       RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )"
+       _apache_dependency want "${APACHE2_DEPEND}" "$@"
 }
 
 # @FUNCTION: want_apache2_2
@@ -214,15 +248,20 @@ want_apache2() {
 # An ebuild calls this to get the dependency information for optional
 # apache-2.2.x support. If the myiuse parameter is not given it defaults to
 # apache2.
-# An ebuild should additionally call depend.apache_pkg_setup() in pkg_setup()
-# with the same myiuse parameter.
 want_apache2_2() {
        debug-print-function $FUNCNAME $*
+       _apache_dependency want "${APACHE2_2_DEPEND}" "$@"
+}
 
-       local myiuse=${1:-apache2}
-       IUSE="${IUSE} ${myiuse}"
-       DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )"
-       RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )"
+# @FUNCTION: want_apache2_4
+# @USAGE: [myiuse]
+# @DESCRIPTION:
+# An ebuild calls this to get the dependency information for optional
+# apache-2.4.x support. If the myiuse parameter is not given it defaults to
+# apache2.
+want_apache2_4() {
+       debug-print-function $FUNCNAME $*
+       _apache_dependency want "${APACHE2_4_DEPEND}" "$@"
 }
 
 # @FUNCTION: need_apache
@@ -238,10 +277,7 @@ need_apache() {
 # An ebuild calls this to get the dependency information for apache-2.x.
 need_apache2() {
        debug-print-function $FUNCNAME $*
-
-       DEPEND="${DEPEND} ${APACHE2_DEPEND}"
-       RDEPEND="${RDEPEND} ${APACHE2_DEPEND}"
-       _init_apache2
+       _apache_dependency need "${APACHE2_DEPEND}" "$@"
 }
 
 # @FUNCTION: need_apache2_2
@@ -249,21 +285,15 @@ need_apache2() {
 # An ebuild calls this to get the dependency information for apache-2.2.x.
 need_apache2_2() {
        debug-print-function $FUNCNAME $*
-
-       DEPEND="${DEPEND} ${APACHE2_2_DEPEND}"
-       RDEPEND="${RDEPEND} ${APACHE2_2_DEPEND}"
-       _init_apache2
+       _apache_dependency need "${APACHE2_2_DEPEND}" "$@"
 }
 
 # @FUNCTION: need_apache2_4
 # @DESCRIPTION:
 # An ebuild calls this to get the dependency information for apache-2.4.x.
 need_apache2_4() {
-        debug-print-function $FUNCNAME $*
-
-        DEPEND="${DEPEND} ${APACHE2_4_DEPEND}"
-        RDEPEND="${RDEPEND} ${APACHE2_4_DEPEND}"
-        _init_apache2
+       debug-print-function $FUNCNAME $*
+       _apache_dependency need "${APACHE2_4_DEPEND}" "$@"
 }
 
 # @FUNCTION: has_apache
@@ -290,7 +320,7 @@ has_apache() {
 has_apache_threads() {
        debug-print-function $FUNCNAME $*
 
-       if ! built_with_use www-servers/apache threads; then
+       if ! has_version 'www-servers/apache[threads]'; then
                return
        fi
 
@@ -313,14 +343,14 @@ has_apache_threads() {
 has_apache_threads_in() {
        debug-print-function $FUNCNAME $*
 
-       if ! built_with_use www-servers/apache threads; then
+       if ! has_version 'www-servers/apache[threads]'; then
                return
        fi
 
        local myforeign="$1"
        local myflag="${2:-threads}"
 
-       if ! built_with_use ${myforeign} ${myflag}; then
+       if ! has_version "${myforeign}[${myflag}]"; then
                echo
                eerror "You need to enable USE flag '${myflag}' in ${myforeign} 
to"
                eerror "build a thread-safe version of ${CATEGORY}/${PN} for 
use"
-- 
1.9.1


Reply via email to