diff options
author | Vlastimil Babka <caster@gentoo.org> | 2007-05-28 19:28:22 +0000 |
---|---|---|
committer | Vlastimil Babka <caster@gentoo.org> | 2007-05-28 19:28:22 +0000 |
commit | 23dcdd77f88215ba9704e1ea18987e39d8db1bc0 (patch) | |
tree | a7038a379dc39cb499aa509e293c6ed2bb1886dd | |
parent | sources are already on mirrors, updated SRC_URI (diff) | |
download | gentoo-2-23dcdd77f88215ba9704e1ea18987e39d8db1bc0.tar.gz gentoo-2-23dcdd77f88215ba9704e1ea18987e39d8db1bc0.tar.bz2 gentoo-2-23dcdd77f88215ba9704e1ea18987e39d8db1bc0.zip |
Support for OPTIONAL_DEPEND in package.env, via new function java-pkg_register-optional-dependency, bug #176182.
-rw-r--r-- | eclass/java-utils-2.eclass | 78 |
1 files changed, 69 insertions, 9 deletions
diff --git a/eclass/java-utils-2.eclass b/eclass/java-utils-2.eclass index 75c44bb81567..eb6d82bc8ec5 100644 --- a/eclass/java-utils-2.eclass +++ b/eclass/java-utils-2.eclass @@ -6,7 +6,7 @@ # # Licensed under the GNU General Public License, v2 # -# $Header: /var/cvsroot/gentoo-x86/eclass/java-utils-2.eclass,v 1.87 2007/05/27 11:09:11 betelgeuse Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/java-utils-2.eclass,v 1.88 2007/05/28 19:28:22 caster Exp $ # ----------------------------------------------------------------------------- # @eclass-begin @@ -1078,7 +1078,6 @@ java-pkg_getjar() { # Intended for binary packages where you don't need to symlink the jars or get # their classpath during build. As such, the dependencies only need to be # specified in ebuild's RDEPEND, and should be omitted in DEPEND. -# Get the classpath provided by any number of packages. # # @param $1 - comma-separated list of packages, or a single package # @param $2 - if param $1 is a single package, optionally specify the jar @@ -1123,6 +1122,55 @@ java-pkg_register-dependency() { } # ------------------------------------------------------------------------------ +# @ebuild-function java-pkg_register-optional-dependency +# +# Registers optional runtime dependency on a package, list of packages, or a +# single jar from a package, into package.env OPTIONAL_DEPEND line. Can only be +# called in src_install phase. +# Intended for packages that can use other packages when those are in classpath. +# Will be put on classpath by launcher if they are installed. Typical case is +# JDBC implementations for various databases. It's better than having USE flag +# for each implementation triggering hard dependency. +# +# @param $1 - comma-separated list of packages, or a single package +# @param $2 - if param $1 is a single package, optionally specify the jar +# to depend on +# +# Example: Record the optional dependency on some jdbc providers +# java-pkg_register-optional-dependency jdbc-jaybird,jtds-1.2,jdbc-mysql +# +# Note: Passing both list of packages as the first parameter AND specifying the +# jar as the second is not allowed and will cause the function to die. We assume +# that there's more chance one passes such combination as a mistake, than that +# there are more packages providing identically named jar without class +# collisions. +# ------------------------------------------------------------------------------ +java-pkg_register-optional-dependency() { + debug-print-function ${FUNCNAME} $* + + java-pkg_check-phase install + + [[ ${#} -gt 2 ]] && die "${FUNCNAME} takes at most two arguments" + + local pkgs="${1}" + local jar="${2}" + + [[ -z "${pkgs}" ]] && die "${FUNCNAME} called with no package(s) specified" + + if [[ -z "${jar}" ]]; then + for pkg in ${pkgs//,/ }; do + java-pkg_record-jar_ --optional "${pkg}" + done + else + [[ ${pkgs} == *,* ]] && \ + die "${FUNCNAME} called with both package list and jar name" + java-pkg_record-jar_ --optional "${pkgs}" "${jar}" + fi + + java-pkg_do_write_ +} + +# ------------------------------------------------------------------------------ # @ebuild-function java-pkg_register-environment-variable # # Register an arbitrary environment variable into package.env. The gjl launcher @@ -2145,7 +2193,8 @@ java-pkg_do_write_() { # Create directory for package.env dodir "${JAVA_PKG_SHAREPATH}" if [[ -n "${JAVA_PKG_CLASSPATH}" || -n "${JAVA_PKG_LIBRARY}" || -f \ - "${JAVA_PKG_DEPEND_FILE}" ]]; then + "${JAVA_PKG_DEPEND_FILE}" || -f \ + "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" ]]; then # Create package.env ( echo "DESCRIPTION=\"${DESCRIPTION}\"" @@ -2155,7 +2204,9 @@ java-pkg_do_write_() { [[ -n "${JAVA_PKG_LIBRARY}" ]] && echo "LIBRARY_PATH=\"${JAVA_PKG_LIBRARY}\"" [[ -n "${JAVA_PROVIDE}" ]] && echo "PROVIDES=\"${JAVA_PROVIDE}\"" [[ -f "${JAVA_PKG_DEPEND_FILE}" ]] \ - && echo "DEPEND=\"$(cat ${JAVA_PKG_DEPEND_FILE} | uniq | tr '\n' ':')\"" + && echo "DEPEND=\"$(cat "${JAVA_PKG_DEPEND_FILE}" | uniq | tr '\n' ':')\"" + [[ -f "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" ]] \ + && echo "OPTIONAL_DEPEND=\"$(cat "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" | uniq | tr '\n' ':')\"" echo "VM=\"$(echo ${RDEPEND} ${DEPEND} | sed -e 's/ /\n/g' | sed -n -e '/virtual\/\(jre\|jdk\)/ { p;q }')\"" # TODO cleanup ! ) > "${JAVA_PKG_ENV}" @@ -2188,8 +2239,8 @@ java-pkg_do_write_() { # TODO try to cleanup if possible sed -e "s/=\":/=\"/" -e "s/:\"$/\"/" -i "${JAVA_PKG_ENV}" || die "Did you forget to call java_init ?" else - debug-print "JAVA_PKG_CLASSPATH, JAVA_PKG_LIBRARY or" - debug-print "JAVA_PKG_DEPEND_FILE not defined so can't" + debug-print "JAVA_PKG_CLASSPATH, JAVA_PKG_LIBRARY, JAVA_PKG_DEPEND_FILE" + debug-print "or JAVA_PKG_OPTIONAL_DEPEND_FILE not defined so can't" debug-print "write package.env." fi } @@ -2197,14 +2248,23 @@ java-pkg_do_write_() { # ------------------------------------------------------------------------------ # @internal-function java-pkg_record-jar_ # -# Record a dependency to the package.env -# +# Record an (optional) dependency to the package.env +# @param --optional - record dependency as optional +# @param $1 - package to record +# @param $2 - (optional) jar of package to record # ------------------------------------------------------------------------------ JAVA_PKG_DEPEND_FILE="${T}/java-pkg-depend" +JAVA_PKG_OPTIONAL_DEPEND_FILE="${T}/java-pkg-optional-depend" java-pkg_record-jar_() { debug-print-function ${FUNCNAME} $* + local depend_file="${JAVA_PKG_DEPEND_FILE}" + if [[ "${1}" == "--optional" ]]; then + depend_file="${JAVA_PKG_OPTIONAL_DEPEND_FILE}" + shift + fi + local pkg=${1} jar=${2} append if [[ -z "${jar}" ]]; then append="${pkg}" @@ -2212,7 +2272,7 @@ java-pkg_record-jar_() { append="$(basename ${jar})@${pkg}" fi - echo ${append} >> ${JAVA_PKG_DEPEND_FILE} + echo "${append}" >> "${depend_file}" } # ------------------------------------------------------------------------------ |