diff options
-rw-r--r-- | eclass/ChangeLog | 5 | ||||
-rw-r--r-- | eclass/autotools-utils.eclass | 104 |
2 files changed, 103 insertions, 6 deletions
diff --git a/eclass/ChangeLog b/eclass/ChangeLog index 633e45758f4f..a58b01bda787 100644 --- a/eclass/ChangeLog +++ b/eclass/ChangeLog @@ -1,6 +1,9 @@ # ChangeLog for eclass directory # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.70 2012/01/03 12:18:17 nirbheek Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.71 2012/01/05 22:42:53 mgorny Exp $ + + 05 Jan 2012; Michał Górny <mgorny@gentoo.org> autotools-utils.eclass: + Add AUTOTOOLS_AUTORECONF for bug #392073. 03 Jan 2012; Nirbheek Chauhan <nirbheek@gentoo.org> gnome-python-common.eclass: diff --git a/eclass/autotools-utils.eclass b/eclass/autotools-utils.eclass index 354fdadad8a7..7bb1e427f18e 100644 --- a/eclass/autotools-utils.eclass +++ b/eclass/autotools-utils.eclass @@ -1,6 +1,6 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/autotools-utils.eclass,v 1.31 2011/12/22 18:01:12 mgorny Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/autotools-utils.eclass,v 1.32 2012/01/05 22:42:53 mgorny Exp $ # @ECLASS: autotools-utils.eclass # @MAINTAINER: @@ -93,10 +93,28 @@ case ${EAPI:-0} in *) die "EAPI=${EAPI} is not supported" ;; esac +# @ECLASS-VARIABLE: AUTOTOOLS_AUTORECONF +# @DEFAULT-UNSET +# @DESCRIPTION: +# Set to a non-empty value in order to enable running autoreconf +# in src_prepare() and adding autotools dependencies. +# +# The eclass will try to determine the correct autotools to run including a few +# external tools: gettext, glib-gettext, intltool, gtk-doc, gnome-doc-prepare. +# If your tool is not supported, please open a bug and we'll add support for it. +# +# Note that dependencies are added for autoconf, automake and libtool only. +# If your package needs one of the external tools listed above, you need to add +# appropriate packages to DEPEND yourself. +[[ ${AUTOTOOLS_AUTORECONF} ]] || _autotools_auto_dep=no + +AUTOTOOLS_AUTO_DEPEND=${_autotools_auto_dep} \ inherit autotools eutils libtool EXPORT_FUNCTIONS src_prepare src_configure src_compile src_install src_test +unset _autotools_auto_dep + # @ECLASS-VARIABLE: AUTOTOOLS_BUILD_DIR # @DEFAULT_UNSET # @DESCRIPTION: @@ -250,20 +268,96 @@ remove_libtool_files() { fi } +# @FUNCTION: autotools-utils_autoreconf +# @DESCRIPTION: +# Reconfigure the sources (like gnome-autogen.sh or eautoreconf). +autotools-utils_autoreconf() { + debug-print-function ${FUNCNAME} "$@" + + # Override this func to not require unnecessary eaclocal calls. + autotools_check_macro() { + local x + + # Add a few additional variants as we don't get expansions. + [[ ${1} = AC_CONFIG_HEADERS ]] && set -- "${@}" AC_CONFIG_HEADER + + for x; do + grep -h "^${x}" configure.{ac,in} 2>/dev/null + done + } + + einfo "Autoreconfiguring '${PWD}' ..." + + local auxdir=$(sed -n -e 's/^AC_CONFIG_AUX_DIR(\(.*\))$/\1/p' \ + configure.{ac,in} 2>/dev/null) + if [[ ${auxdir} ]]; then + auxdir=${auxdir%%]} + mkdir -p ${auxdir##[} + fi + + # Support running additional tools like gnome-autogen.sh. + # Note: you need to add additional depends to the ebuild. + + # gettext + if [[ $(autotools_check_macro AM_GLIB_GNU_GETTEXT) ]]; then + echo 'no' | autotools_run_tool glib-gettextize --copy + elif [[ $(autotools_check_macro AM_GNU_GETTEXT) ]]; then + eautopoint + fi + + # intltool + if [[ $(autotools_check_macro AC_PROG_INTLTOOL IT_PROG_INTLTOOL) ]] + then + autotools_run_tool intltoolize --copy --automake + fi + + # gtk-doc + if [[ $(autotools_check_macro GTK_DOC_CHECK) ]]; then + autotools_run_tool gtkdocize --copy + fi + + # gnome-doc + if [[ $(autotools_check_macro GNOME_DOC_INIT) ]]; then + autotools_run_tool gnome-doc-prepare --copy + fi + + # We need to perform the check twice to know whether to run eaclocal. + # (_elibtoolize does that itself) + if [[ $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] + then + _elibtoolize --copy --force --install + else + eaclocal + fi + + eautoconf + eautoheader + eautomake + + local x + for x in $(autotools_get_subdirs); do + if [[ -d ${x} ]] ; then + pushd "${x}" >/dev/null + autotools-utils_eautoreconf + popd >/dev/null + fi + done +} + # @FUNCTION: autotools-utils_src_prepare # @DESCRIPTION: # The src_prepare function. # # Supporting PATCHES array and user patches. See base.eclass(5) for reference. -# -# This function calls elibtoolize implicitly. If you need to call eautoreconf -# afterwards, please use AT_NOELIBTOOLIZE=yes to avoid it being called twice. autotools-utils_src_prepare() { debug-print-function ${FUNCNAME} "$@" + local want_autoreconf=${AUTOTOOLS_AUTORECONF} + [[ ${PATCHES} ]] && epatch "${PATCHES[@]}" epatch_user + [[ ${want_autoreconf} ]] && autotools-utils_autoreconf elibtoolize --patch-only } |