Hola, I have incorporated all fixes to base.eclass that has been itching me for a while (closes both open bugs).
Whats new: * base_src_install docs this thingie install docs and html_docs from bash array defined in global scope (or anywhere else indeed :P) * all bash variable arrays including the PATCHES one have support for folders * using same codestyle everywhere... * using pushd/popd instead of cd Diff and full eclass attached. Living link: http://git.overlays.gentoo.org/gitweb/?p=proj/kde.git;a=blob;f=eclass/base.eclass Also i would recommend we in QA take over maintainership for this eclass if Peter wont mind or comaintain with him if he wants not to proxy all changes through us? Any more suggestions for this eclass or bugs you find reply please to -dev thread so we keep it nicely folded for everyone Tom
# Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/eclass/base.eclass,v 1.38 2009/05/17 09:25:55 loki_val Exp $ # @ECLASS: base.eclass # @MAINTAINER: # Peter Alfredsen <loki_...@gentoo.org> # # Original author Dan Armak <danar...@gentoo.org> # @BLURB: The base eclass defines some default functions and variables. # @DESCRIPTION: # The base eclass defines some default functions and variables. Nearly # everything else inherits from here. inherit eutils case "${EAPI:-0}" in 2|3) EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install ;; *) EXPORT_FUNCTIONS src_unpack src_compile src_install ;; esac # @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 ] [ 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 case "${EAPI:-0}" in 2) base_src_util unpack ;; *) base_src_util all ;; esac else base_src_util $@ fi } # @FUNCTION: base_src_prepare # @DESCRIPTION: # 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 ] [ autopatch ] [ all ] # @DESCRIPTION: # The base_src_util function is the grunt function for base src_unpack # and base src_prepare. base_src_util() { debug-print-function $FUNCNAME "$@" 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 [[ ${#patch...@]} -gt 1 ]] ; then for x in "${patch...@]}"; 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 popd > n/dev/null ;; all) debug-print-section all base_src_util unpack autopatch ;; esac shift done } # @FUNCTION: base_src_configure # @DESCRIPTION: # 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 } # @FUNCTION: base_src_compile # @USAGE: [ configure ] [ make ] [ all ] # @DESCRIPTION: # 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 case "${EAPI:-0}" in 2) base_src_work make ;; *) base_src_work all ;; esac else base_src_work $@ fi } # @FUNCTION: base_src_work # @USAGE: [ configure ] [ make ] [ all ] # @DESCRIPTION: # The base_src_work function is the grunt function for base src_configure # and base src_compile. base_src_work() { debug-print-function $FUNCNAME "$@" 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 shift done popd > /dev/null } # @FUNCTION: base_src_install # @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 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 [[ ${#do...@]} -gt 1 ]] ; then for x in "${do...@]}"; do debug-print "$FUNCNAME: docs: creating document from ${x}" dodoc -r "${x}" || die "dodoc failed" done fi if [[ ${#html_do...@]} -gt 1 ]] ; then for x in "${html_do...@]}"; 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 shift done popd > /dev/null }
--- /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 [[ ${#patch...@]} -gt 1 ]] ; then + for x in "${patch...@]}"; 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 [[ ${#patch...@]} -gt 1 ]] ; then - for x in "${patch...@]}"; 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 [[ ${#do...@]} -gt 1 ]] ; then + for x in "${do...@]}"; do + debug-print "$FUNCNAME: docs: creating document from ${x}" + dodoc -r "${x}" || die "dodoc failed" + done + fi + if [[ ${#html_do...@]} -gt 1 ]] ; then + for x in "${html_do...@]}"; 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 }
signature.asc
Description: OpenPGP digital signature