--- /home/scarab/gentoo/gentoo-x86/eclass/base.eclass 2009-05-25 17:05:03.000000000 +0200 +++ /usr/local/portage/kde/eclass/base.eclass 2010-01-02 16:40:59.000000000 +0100 @@ -11,15 +11,11 @@ # @DESCRIPTION: # The base eclass defines some default functions and variables. Nearly # everything else inherits from here. -# -# NOTE: You must define EAPI before inheriting from base, or the wrong functions -# may be exported. - inherit eutils case "${EAPI:-0}" in - 2) + 2|3) EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install ;; *) @@ -27,18 +23,35 @@ ;; esac -DESCRIPTION="Based on the $ECLASS eclass" +# @ECLASS-VARIABLE: DOCS +# @USAGE: DOCS=( "${S}/doc/document.txt" "${S}/doc/doc_folder/" ) +# @DESCRIPTION: +# Array containing documents passed to dodoc command. + +# @ECLASS-VARIABLE: HTML_DOCS +# @DESCRIPTION: HTML_DOCS=( "${S}/doc/document.html" "${S}/doc/html_folder/" ) +# Array containing documents passed to dohtml command. + +# @ECLASS-VARIABLE: PATCHES +# @USAGE: PATCHES=( "${FILESDIR}/mypatch.patch" "${FILESDIR}/patches_folder/" ) +# @DESCRIPTION: +# PATCHES array variable containing all various patches to be applied. +# This variable is expected to be defined in global scope of ebuild. +# Make sure to specify the full path. This variable is utilised in +# src_unpack/src_prepare phase based on EAPI. +# NOTE: if using patches folders with special file suffixes you have to +# define one additional variable EPATCH_SUFFIX="something" + # @FUNCTION: base_src_unpack -# @USAGE: [ unpack ] [ patch ] [ autopatch ] [ all ] +# @USAGE: [ unpack ] [ autopatch ] [ all ] # @DESCRIPTION: # The base src_unpack function, which is exported. If no argument is given, # "all" is assumed if EAPI!=2, "unpack" if EAPI=2. base_src_unpack() { - debug-print-function $FUNCNAME "$@" - if [ -z "$1" ] ; then + if [ -z "$1" ]; then case "${EAPI:-0}" in 2) base_src_util unpack @@ -57,63 +70,72 @@ # The base src_prepare function, which is exported when EAPI=2. Performs # "base_src_util autopatch". base_src_prepare() { - debug-print-function $FUNCNAME "$@" base_src_util autopatch } # @FUNCTION: base_src_util -# @USAGE: [ unpack ] [ patch ] [ autopatch ] [ all ] +# @USAGE: [ unpack ] [ autopatch ] [ all ] # @DESCRIPTION: # The base_src_util function is the grunt function for base src_unpack # and base src_prepare. base_src_util() { - local x - debug-print-function $FUNCNAME "$@" - cd "${WORKDIR}" + local x oldval while [ "$1" ]; do + case $1 in + unpack) + debug-print-section unpack + + pushd "${WORKDIR}" > /dev/null + [ ! -z "$A" ] && unpack ${A} + popd > /dev/null + ;; + autopatch) + debug-print-section autopatch + debug-print "$FUNCNAME: autopatch: PATCHES=$PATCHES" + + pushd "${S}" > /dev/null + + if [[ ${#PATCHES[@]} -gt 1 ]] ; then + for x in "${PATCHES[@]}"; do + debug-print "$FUNCNAME: autopatch: applying patch from ${x}" + [[ -f "${x}" ]] && epatch "${x}" + if [[ -d "${x}" ]]; then + # Use standardized names and locations with bulk patching + # Patch directory is ${WORKDIR}/patch + # See epatch() in eutils.eclass for more documentation + EPATCH_SUFFIX=${EPATCH_SUFFIX:=patch} + + # in order to preserve normal EPATCH_SOURCE value that can + # be used other way than with base eclass store in local + # variable and restore later + oldval=${EPATCH_SOURCE} + EPATCH_SOURCE=${x} + epatch + EPATCH_SOURCE=${oldval} + fi + done + else + for x in ${PATCHES}; do + debug-print "$FUNCNAME: autopatch: patching from ${x}" + epatch "${x}" + done + fi - case $1 in - unpack) - debug-print-section unpack - if [ ! -z "$A" ] ; then - unpack ${A} - fi - ;; - patch) - debug-print-section patch - cd "${S}" - epatch "${FILESDIR}/${P}-gentoo.diff" - ;; - autopatch) - debug-print-section autopatch - debug-print "$FUNCNAME: autopatch: PATCHES=$PATCHES, PATCHES1=$PATCHES1" - cd "${S}" - if [[ ${#PATCHES[@]} -gt 1 ]] ; then - for x in "${PATCHES[@]}"; do - debug-print "$FUNCNAME: autopatch: patching from ${x}" - epatch "${x}" - done - else - for x in ${PATCHES} ${PATCHES1}; do - debug-print "$FUNCNAME: autopatch: patching from ${x}" - epatch "${x}" - done - fi - ;; - all) - debug-print-section all - base_src_util unpack autopatch - ;; - esac + popd > n/dev/null + ;; + all) + debug-print-section all + base_src_util unpack autopatch + ;; + esac - shift + shift done - } # @FUNCTION: base_src_configure @@ -121,7 +143,6 @@ # The base src_prepare function, which is exported when EAPI=2. Performs # "base_src_work configure". base_src_configure() { - debug-print-function $FUNCNAME "$@" base_src_work configure @@ -133,11 +154,9 @@ # The base src_compile function, which is exported. If no argument is given, # "all" is assumed if EAPI!=2, "make" if EAPI=2. base_src_compile() { - debug-print-function $FUNCNAME "$@" - if [ -z "$1" ] - then + if [ -z "$1" ]; then case "${EAPI:-0}" in 2) base_src_work make @@ -157,65 +176,78 @@ # The base_src_work function is the grunt function for base src_configure # and base src_compile. base_src_work() { - debug-print-function $FUNCNAME "$@" - cd "${S}" + pushd "${S}" > /dev/null while [ "$1" ]; do + case $1 in + configure) + debug-print-section configure + if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then + econf || die "died running econf, $FUNCNAME:configure" + fi + ;; + make) + debug-print-section make + if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then + emake || die "died running emake, $FUNCNAME:make" + fi + ;; + all) + debug-print-section all + base_src_work configure make + ;; + esac - case $1 in - configure) - debug-print-section configure - if [[ -x ${ECONF_SOURCE:-.}/configure ]] - then - econf || die "died running econf, $FUNCNAME:configure" - fi - ;; - make) - debug-print-section make - if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ] - then - emake || die "died running emake, $FUNCNAME:make" - fi - ;; - all) - debug-print-section all - base_src_work configure make - ;; - esac - - shift + shift done + popd > /dev/null } # @FUNCTION: base_src_install -# @USAGE: [ make ] [ all ] +# @USAGE: [ make ] [ docs ] [ all ] # @DESCRIPTION: # The base src_install function, which is exported. If no argument is given, # "all" is assumed. base_src_install() { - debug-print-function $FUNCNAME "$@" + + local x [ -z "$1" ] && base_src_install all - cd "${S}" + pushd "${S}" > /dev/null while [ "$1" ]; do + case $1 in + make) + debug-print-section make + emake DESTDIR="${D}" install || die "died running make install, $FUNCNAME:make" + ;; + docs) + debug-print-section docs + if [[ ${#DOCS[@]} -gt 1 ]] ; then + for x in "${DOCS[@]}"; do + debug-print "$FUNCNAME: docs: creating document from ${x}" + dodoc -r "${x}" || die "dodoc failed" + done + fi + if [[ ${#HTML_DOCS[@]} -gt 1 ]] ; then + for x in "${HTML_DOCS[@]}"; do + debug-print "$FUNCNAME: docs: creating html document from ${x}" + dohtml -r "${x}" || die "dohtml failed" + done + fi + ;; + all) + debug-print-section all + base_src_install make docs + ;; + esac - case $1 in - make) - debug-print-section make - make DESTDIR="${D}" install || die "died running make install, $FUNCNAME:make" - ;; - all) - debug-print-section all - base_src_install make - ;; - esac - - shift + shift done + popd > /dev/null }