Gentoo Logo
Gentoo Spaceship




Note: Due to technical difficulties, the Archives are currently not up to date. GMANE provides an alternative service for most mailing lists.
c.f. bug 424647
List Archive: gentoo-dev
Navigation:
Lists: gentoo-dev: < Prev By Thread Next > < Prev By Date Next >
Headers:
To: gentoo-dev@g.o, qa@g.o, loki_val@g.o
From: Tomáš Chvátal <scarabeus@g.o>
Subject: [RFC] base.eclass
Date: Sat, 02 Jan 2010 16:52:21 +0100
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_val@g.o>
#
# Original author Dan Armak <danarmak@g.o>
# @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 [[ ${#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

				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 [[ ${#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

		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 [[ ${#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
 }
Attachment:
signature.asc (OpenPGP digital signature)
Replies:
Re: [RFC] base.eclass
-- Mark Bateman
Re: [RFC] base.eclass
-- Ben de Groot
Navigation:
Lists: gentoo-dev: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
Farewell, Gentoo.
Next by thread:
Re: [RFC] base.eclass
Previous by date:
Re: Farewell, Gentoo.
Next by date:
Re: [RFC] base.eclass


Updated Jun 29, 2012

Summary: Archive of the gentoo-dev mailing list.

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.