summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Mrozowski <reavertm@gentoo.org>2010-07-17 10:42:55 +0000
committerMaciej Mrozowski <reavertm@gentoo.org>2010-07-17 10:42:55 +0000
commit21782b43c61fb82c59a89052f47f8e7338a4892f (patch)
tree40663b2ce9483cb6f226efbc376f2a242c677ca6 /eclass/autotools-utils.eclass
parentamd64 stable, bug #328439 (diff)
downloadgentoo-2-21782b43c61fb82c59a89052f47f8e7338a4892f.tar.gz
gentoo-2-21782b43c61fb82c59a89052f47f8e7338a4892f.tar.bz2
gentoo-2-21782b43c61fb82c59a89052f47f8e7338a4892f.zip
Add new eclass, emerge -1 eclass-manpages and see autotool-utils.eclass manual page for details
Diffstat (limited to 'eclass/autotools-utils.eclass')
-rw-r--r--eclass/autotools-utils.eclass263
1 files changed, 263 insertions, 0 deletions
diff --git a/eclass/autotools-utils.eclass b/eclass/autotools-utils.eclass
new file mode 100644
index 000000000000..4d407d2b394f
--- /dev/null
+++ b/eclass/autotools-utils.eclass
@@ -0,0 +1,263 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/autotools-utils.eclass,v 1.1 2010/07/17 10:42:55 reavertm Exp $
+
+# @ECLASS: autotools-utils.eclass
+# @MAINTAINER:
+# Maciej Mrozowski <reavertm@gentoo.org>
+# @BLURB: common ebuild functions for autotools-based packages
+# @DESCRIPTION:
+# autotools-utils.eclass is autotools.eclass(5) and base.eclass(5) wrapper
+# providing all inherited features along with econf arguments as Bash array,
+# out of source build with overridable build dir location, static archives
+# handling, libtool files removal, enable/disable debug handling.
+#
+# @EXAMPLE:
+# Typical ebuild using autotools-utils.eclass:
+#
+# @CODE
+# EAPI="2"
+#
+# inherit autotools-utils
+#
+# DESCRIPTION="Foo bar application"
+# HOMEPAGE="http://example.org/foo/"
+# SRC_URI="mirror://sourceforge/foo/${P}.tar.bz2"
+#
+# LICENSE="LGPL-2.1"
+# KEYWORDS=""
+# SLOT="0"
+# IUSE="debug doc examples qt4 static-libs tiff"
+#
+# CDEPEND="
+# media-libs/libpng:0
+# qt4? (
+# x11-libs/qt-core:4
+# x11-libs/qt-gui:4
+# )
+# tiff? ( media-libs/tiff:0 )
+# "
+# RDEPEND="${CDEPEND}
+# !media-gfx/bar
+# "
+# DEPEND="${CDEPEND}
+# doc? ( app-doc/doxygen )
+# "
+#
+# # bug 123456
+# AUTOTOOLS_IN_SOURCE_BUILD=1
+#
+# DOCS=(AUTHORS ChangeLog README "Read me.txt" TODO)
+#
+# PATCHES=(
+# "${FILESDIR}/${P}-gcc44.patch" # bug 123458
+# "${FILESDIR}/${P}-as-needed.patch"
+# "${FILESDIR}/${P}-unbundle_libpng.patch"
+# )
+#
+# src_configure() {
+# myeconfargs=(
+# $(use_with qt4)
+# $(use_enable threads multithreading)
+# $(use_with tiff)
+# )
+# autotools-utils_src_configure
+# }
+#
+# src_compile() {
+# autotools-utils_src_compile
+# use doc && autotools-utils_src_compile docs
+# }
+#
+# src_install() {
+# use doc && HTML_DOCS=("${AUTOTOOLS_BUILD_DIR}/apidocs/html/")
+# autotools-utils_src_install
+# if use examples; then
+# dobin "${AUTOTOOLS_BUILD_DIR}"/foo_example{1,2,3} \\
+# || die 'dobin examples failed'
+# fi
+# }
+#
+# @CODE
+
+# Keep variable names synced with cmake-utils and the other way around!
+
+case ${EAPI:-0} in
+ 2|3|4) ;;
+ *) DEPEND="EAPI-TOO-OLD" ;;
+esac
+
+inherit autotools base
+
+EXPORT_FUNCTIONS src_prepare src_configure src_compile src_install src_test
+
+# @ECLASS-VARIABLE: AUTOTOOLS_BUILD_DIR
+# @DESCRIPTION:
+# Build directory, location where all autotools generated files should be
+# placed. For out of source builds it defaults to ${WORKDIR}/${P}_build.
+
+# @ECLASS-VARIABLE: AUTOTOOLS_IN_SOURCE_BUILD
+# @DESCRIPTION:
+# Set to enable in-source build.
+
+# @ECLASS-VARIABLE: ECONF_SOURCE
+# @DESCRIPTION:
+# Specify location of autotools' configure script. By default it uses ${S}.
+
+# @ECLASS-VARIABLE: myeconfargs
+# @DESCRIPTION:
+# Optional econf arguments as Bash array. Should be defined before calling src_configure.
+# @CODE
+# src_configure() {
+# myeconfargs=(
+# --disable-readline
+# --with-confdir="/etc/nasty foo confdir/"
+# $(use_enable debug cnddebug)
+# $(use_enable threads multithreading)
+# )
+# autotools-utils_src_configure
+# }
+# @CODE
+
+# Determine using IN or OUT source build
+_check_build_dir() {
+ : ${ECONF_SOURCE:=${S}}
+ if [[ -n ${AUTOTOOLS_IN_SOURCE_BUILD} ]]; then
+ AUTOTOOLS_BUILD_DIR="${ECONF_SOURCE}"
+ else
+ : ${AUTOTOOLS_BUILD_DIR:=${WORKDIR}/${P}_build}
+ fi
+ echo ">>> Working in BUILD_DIR: \"$AUTOTOOLS_BUILD_DIR\""
+}
+
+# @FUNCTION: remove_libtool_files
+# @USAGE: [all|none]
+# @DESCRIPTION:
+# Determines unnecessary libtool files (.la) and libtool static archives (.a)
+# and removes them from installation image.
+# To unconditionally remove all libtool files, pass 'all' as argument.
+# To leave all libtool files alone, pass 'none' as argument.
+# Unnecessary static archives are removed in any case.
+#
+# In most cases it's not necessary to manually invoke this function.
+# See autotools-utils_src_install for reference.
+remove_libtool_files() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local f
+ for f in $(find "${D}" -type f -name '*.la'); do
+ # Keep only .la files with shouldnotlink=yes - likely plugins
+ local shouldnotlink=$(sed -ne '/^shouldnotlink=yes$/p' "${f}")
+ if [[ "$1" == 'all' || -z ${shouldnotlink} ]]; then
+ if [[ "$1" != 'none' ]]; then
+ echo "Removing unnecessary ${f}"
+ rm -f "${f}"
+ fi
+ fi
+ # Remove static libs we're not supposed to link against
+ if [[ -n ${shouldnotlink} ]]; then
+ local remove=${f/%.la/.a}
+ [[ "${f}" != "${remove}" ]] || die 'regex sanity check failed'
+ echo "Removing unnecessary ${remove}"
+ rm -f "${remove}"
+ fi
+ done
+}
+
+# @FUNCTION: autotools-utils_src_prepare
+# @DESCRIPTION:
+# The src_prepare function.
+#
+# Supporting PATCHES array and user patches. See base.eclass(5) for reference.
+autotools-utils_src_prepare() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ base_src_prepare
+}
+
+# @FUNCTION: autotools-utils_src_configure
+# @DESCRIPTION:
+# The src_configure function. For out of source build it creates build
+# directory and runs econf there. Configuration parameters defined
+# in myeconfargs are passed here to econf. Additionally following USE
+# flags are known:
+#
+# IUSE="debug" passes --disable-debug/--enable-debug to econf respectively.
+#
+# IUSE="static-libs" passes --enable-shared and either --disable-static/--enable-static
+# to econf respectively.
+autotools-utils_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ # Common args
+ local econfargs=()
+
+ # Handle debug found in IUSE
+ if has debug ${IUSE//+}; then
+ econfargs+=($(use_enable debug))
+ fi
+
+ # Handle static-libs found in IUSE, disable them by default
+ if has static-libs ${IUSE//+}; then
+ econfargs+=(
+ --enable-shared
+ $(use_enable static-libs static)
+ )
+ fi
+
+ # Append user args
+ econfargs+=(${myeconfargs[@]})
+
+ _check_build_dir
+ mkdir -p "${AUTOTOOLS_BUILD_DIR}" || die "mkdir '${AUTOTOOLS_BUILD_DIR}' failed"
+ pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
+ base_src_configure "${econfargs[@]}"
+ popd > /dev/null
+}
+
+# @FUNCTION: autotools-utils_src_compile
+# @DESCRIPTION:
+# The autotools src_compile function, invokes emake in specified AUTOTOOLS_BUILD_DIR.
+autotools-utils_src_compile() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ _check_build_dir
+ pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
+ base_src_compile "$@"
+ popd > /dev/null
+}
+
+# @FUNCTION: autotools-utils_src_install
+# @DESCRIPTION:
+# The autotools src_install function. Runs emake install, unconditionally
+# removes unnecessary static libs (based on shouldnotlink libtool property)
+# and removes unnecessary libtool files when static-libs USE flag is defined
+# and unset.
+#
+# DOCS and HTML_DOCS arrays are supported. See base.eclass(5) for reference.
+autotools-utils_src_install() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ _check_build_dir
+ pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
+ base_src_install
+ popd > /dev/null
+
+ # Remove libtool files and unnecessary static libs
+ local args
+ has static-libs ${IUSE//+} && ! use static-libs || args='none'
+ remove_libtool_files ${args}
+}
+
+# @FUNCTION: autotools-utils_src_test
+# @DESCRIPTION:
+# The autotools src_test function. Runs emake check in build directory.
+autotools-utils_src_test() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ _check_build_dir
+ pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null
+ # Run default src_test as defined in ebuild.sh
+ default_src_test
+ popd > /dev/null
+}