[oe] [PATCH 4/4] autotools: split up into multiple files

Khem Raj raj.khem at gmail.com
Tue Feb 8 17:19:19 UTC 2011


On Tue, Feb 8, 2011 at 8:16 AM, Chris Larson <kergoth at gmail.com> wrote:
> From: Chris Larson <chris_larson at mentor.com>
>
> Split up autotools.bbclass into:
>
>    classes/autotools/configure.bbclass
>        To be inherited if one wants ./configure and config.{sub,guess}
>        updating, but not autoreconf execution
>
>    classes/autotools/bootstrap.bbclass
>        Autoreconf execution
>
>    classes/autotools/staging.inc
>        Holds the old autotools staging utility functions
>
> autotools.bbclass still exists, and simply inherits
> classes/autotools/bootstrap.bbclass.
>
> Signed-off-by: Chris Larson <chris_larson at mentor.com>


Acked-by: Khem Raj <raj.khem at gmail.com>
> ---
>  classes/autotools.bbclass           |  238 +----------------------------------
>  classes/autotools/bootstrap.bbclass |  101 +++++++++++++++
>  classes/autotools/configure.bbclass |  118 +++++++++++++++++
>  classes/autotools/staging.inc       |   36 ++++++
>  4 files changed, 256 insertions(+), 237 deletions(-)
>  create mode 100644 classes/autotools/bootstrap.bbclass
>  create mode 100644 classes/autotools/configure.bbclass
>  create mode 100644 classes/autotools/staging.inc
>
> diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass
> index a88a4d1..6f30a9e 100644
> --- a/classes/autotools.bbclass
> +++ b/classes/autotools.bbclass
> @@ -1,237 +1 @@
> -# use autotools_stage_all for native packages
> -AUTOTOOLS_NATIVE_STAGE_INSTALL = "1"
> -
> -def autotools_deps(d):
> -       if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1):
> -               return ''
> -
> -       pn = bb.data.getVar('PN', d, 1)
> -       deps = ''
> -
> -       if pn in ['autoconf-native', 'automake-native', 'help2man-native']:
> -               return deps
> -       deps += 'autoconf-native automake-native help2man-native '
> -
> -       if pn not in ['libtool', 'libtool-native', 'libtool-cross']:
> -               deps += 'libtool-native '
> -               if (not oe.utils.inherits(d, 'native', 'nativesdk', 'cross',
> -                                         'sdk') and
> -                   not d.getVar('INHIBIT_DEFAULT_DEPS', True)):
> -                       deps += 'libtool-cross '
> -
> -       return deps + 'gnu-config-native '
> -
> -EXTRA_OEMAKE = ""
> -
> -DEPENDS_prepend = "${@autotools_deps(d)}"
> -DEPENDS_virtclass-native_prepend = "${@autotools_deps(d)}"
> -DEPENDS_virtclass-nativesdk_prepend = "${@autotools_deps(d)}"
> -
> -inherit siteinfo
> -
> -def _autotools_get_sitefiles(d):
> -    if oe.utils.inherits(d, 'native', 'nativesdk'):
> -        return
> -
> -    sitedata = siteinfo_data(d)
> -    for path in d.getVar("BBPATH", True).split(":"):
> -        for element in sitedata:
> -            filename = os.path.join(path, "site", element)
> -            if os.path.exists(filename):
> -                yield filename
> -
> -# Space separated list of shell scripts with variables defined to supply test
> -# results for autoconf tests we cannot run at build time.
> -export CONFIG_SITE = "${@' '.join(_autotools_get_sitefiles(d))}"
> -
> -acpaths = "default"
> -EXTRA_AUTORECONF = "--exclude=autopoint"
> -
> -def autotools_set_crosscompiling(d):
> -       if not bb.data.inherits_class('native', d):
> -               return " cross_compiling=yes"
> -       return ""
> -
> -def append_libtool_sysroot(d):
> -       if bb.data.getVar('LIBTOOL_HAS_SYSROOT', d, 1) == "yes":
> -               if bb.data.getVar('BUILD_SYS', d, 1) == bb.data.getVar('HOST_SYS', d, 1):
> -                       return '--with-libtool-sysroot'
> -               else:
> -                       return '--with-libtool-sysroot=${STAGING_DIR_HOST}'
> -       return ''
> -
> -def distro_imposed_configure_flags(d):
> -       distro_features = bb.data.getVar('DISTRO_FEATURES', d, True) or ""
> -       distro_features = distro_features.split()
> -       flags = set()
> -       features = (('largefile', 'largefile'),
> -               ('ipv6'     , 'ipv6'),
> -               ('nls'      , 'nls'))
> -
> -       for knob, cfgargs in features:
> -               if isinstance(cfgargs, basestring):
> -                       cfgargs = [cfgargs]
> -               en_or_dis = knob in distro_features and "enable" or "disable"
> -               for flg in cfgargs:
> -                       flags.add("--%s-%s" % (en_or_dis, flg))
> -       return " ".join(flags)
> -
> -# EXTRA_OECONF_append = "${@autotools_set_crosscompiling(d)}"
> -
> -CONFIGUREOPTS = " --build=${BUILD_SYS} \
> -                 --host=${HOST_SYS} \
> -                 --target=${TARGET_SYS} \
> -                 --prefix=${prefix} \
> -                 --exec_prefix=${exec_prefix} \
> -                 --bindir=${bindir} \
> -                 --sbindir=${sbindir} \
> -                 --libexecdir=${libexecdir} \
> -                 --datadir=${datadir} \
> -                 --sysconfdir=${sysconfdir} \
> -                 --sharedstatedir=${sharedstatedir} \
> -                 --localstatedir=${localstatedir} \
> -                 --libdir=${libdir} \
> -                 --includedir=${includedir} \
> -                 --oldincludedir=${oldincludedir} \
> -                 --infodir=${infodir} \
> -                 --mandir=${mandir} \
> -                 ${@append_libtool_sysroot(d)} \
> -                 ${@distro_imposed_configure_flags(d)} \
> -               "
> -
> -oe_runconf () {
> -       if [ -x ${S}/configure ] ; then
> -               ${S}/configure \
> -               ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@"
> -       else
> -               oefatal "no configure script found"
> -       fi
> -}
> -
> -oe_autoreconf () {
> -       if [ x"${acpaths}" = xdefault ]; then
> -               acpaths=
> -               for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \
> -                       grep -v 'acinclude.m4' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do
> -                       acpaths="$acpaths -I $i"
> -               done
> -       else
> -               acpaths="${acpaths}"
> -       fi
> -       AUTOV=`automake --version | head -n 1 | sed "s/.* //;s/\.[0-9]\+$//"`
> -       install -d ${STAGING_DATADIR}/aclocal
> -       install -d ${STAGING_DATADIR}/aclocal-$AUTOV
> -       acpaths="$acpaths -I${STAGING_DATADIR}/aclocal-$AUTOV -I ${STAGING_DATADIR}/aclocal"
> -       # autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
> -       # like it was auto-generated.  Work around this by blowing it away
> -       # by hand, unless the package specifically asked not to run aclocal.
> -       if ! echo ${EXTRA_AUTORECONF} | grep -q "aclocal"; then
> -               rm -f aclocal.m4
> -       fi
> -       if [ -e configure.in ]; then
> -               CONFIGURE_AC=configure.in
> -       else
> -               CONFIGURE_AC=configure.ac
> -       fi
> -       if grep "^[[:space:]]*AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
> -               if grep "sed.*POTFILES" $CONFIGURE_AC >/dev/null; then
> -                       : do nothing -- we still have an old unmodified configure.ac
> -               else
> -                       echo "no" | glib-gettextize --force
> -               fi
> -       else if grep "^[[:space:]]*AM_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
> -               if [ -e ${STAGING_DATADIR}/gettext/config.rpath ]; then
> -                       ln -sf ${STAGING_DATADIR}/gettext/config.rpath ${S}/
> -               else
> -                       oenote ${STAGING_DATADIR}/gettext/config.rpath not found. gettext is not installed.
> -               fi
> -       fi
> -
> -       fi
> -       for aux in m4 `sed -n -e '/^[[:space:]]*AC_CONFIG_MACRO_DIR/s|[^(]*([[]*\([^])]*\)[]]*)|\1|p' $CONFIGURE_AC`; do
> -               mkdir -p ${aux}
> -       done
> -       autoreconf -Wcross --verbose --install --symlink --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed."
> -       if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then
> -               intltoolize --force --automake
> -       fi
> -}
> -
> -autotools_do_configure() {
> -       case ${PN} in
> -       autoconf*|automake*)
> -       ;;
> -       *)
> -               find ${S} -name configure.in -o -name configure.ac | \
> -                       while read fn; do
> -                               rm -f `dirname $fn`/configure
> -                       done
> -               if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then
> -                       olddir=`pwd`
> -                       cd ${S}
> -                       oe_autoreconf
> -                       cd $olddir
> -               fi
> -       ;;
> -       esac
> -       if [ -e ${S}/configure ]; then
> -               oe_runconf $@
> -       else
> -               oenote "nothing to configure"
> -       fi
> -}
> -
> -autotools_do_install() {
> -       oe_runmake 'DESTDIR=${D}' install
> -}
> -
> -PACKAGE_PREPROCESS_FUNCS += "${@['autotools_prepackage_lamangler',''][bb.data.getVar('LIBTOOL_HAS_SYSROOT', d, 1) == "yes"]}"
> -autotools_prepackage_lamangler () {
> -        for i in `find ${PKGD} -name "*.la"` ; do \
> -            sed -i -e 's:${STAGING_LIBDIR}:${libdir}:g;' \
> -                   -e 's:${D}::g;' \
> -                   -e 's:-I${WORKDIR}\S*: :g;' \
> -                   -e 's:-L${WORKDIR}\S*: :g;' \
> -                   $i
> -       done
> -}
> -
> -# STAGE_TEMP_PREFIX is used for a speedup by packaged-staging
> -STAGE_TEMP="${WORKDIR}/temp-staging"
> -STAGE_TEMP_PREFIX = ""
> -
> -autotools_stage_includes() {
> -       if [ "${INHIBIT_AUTO_STAGE_INCLUDES}" != "1" ]
> -       then
> -               rm -rf ${STAGE_TEMP}
> -               mkdir -p ${STAGE_TEMP}
> -               make DESTDIR="${STAGE_TEMP}" install
> -               cp -pPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
> -               rm -rf ${STAGE_TEMP}
> -       fi
> -}
> -
> -autotools_stage_dir() {
> -       sysroot_stage_dir $1 ${STAGE_TEMP_PREFIX}$2
> -}
> -
> -autotools_stage_libdir() {
> -       sysroot_stage_libdir $1 ${STAGE_TEMP_PREFIX}$2
> -}
> -
> -autotools_stage_all() {
> -       if [ "${INHIBIT_AUTO_STAGE}" = "1" ]
> -       then
> -               return
> -       fi
> -       rm -rf ${STAGE_TEMP}
> -       mkdir -p ${STAGE_TEMP}
> -       oe_runmake DESTDIR="${STAGE_TEMP}" install
> -       rm -rf ${STAGE_TEMP}/${mandir} || true
> -       rm -rf ${STAGE_TEMP}/${infodir} || true
> -       sysroot_stage_dirs ${STAGE_TEMP} ${STAGE_TEMP_PREFIX}
> -       rm -rf ${STAGE_TEMP}
> -}
> -
> -EXPORT_FUNCTIONS do_configure do_install
> -
> +inherit autotools/bootstrap
> diff --git a/classes/autotools/bootstrap.bbclass b/classes/autotools/bootstrap.bbclass
> new file mode 100644
> index 0000000..f992aa3
> --- /dev/null
> +++ b/classes/autotools/bootstrap.bbclass
> @@ -0,0 +1,101 @@
> +inherit autotools/configure
> +
> +def autotools_deps(d):
> +       if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1):
> +               return ''
> +
> +       pn = bb.data.getVar('PN', d, 1)
> +       deps = ''
> +
> +       if pn in ['autoconf-native', 'automake-native', 'help2man-native']:
> +               return deps
> +       deps += 'autoconf-native automake-native help2man-native '
> +
> +       if pn not in ['libtool', 'libtool-native', 'libtool-cross']:
> +               deps += 'libtool-native '
> +               if (not oe.utils.inherits(d, 'native', 'nativesdk', 'cross',
> +                                         'sdk') and
> +                   not d.getVar('INHIBIT_DEFAULT_DEPS', True)):
> +                       deps += 'libtool-cross '
> +
> +       return deps
> +
> +DEPENDS_prepend = "${@autotools_deps(d)}"
> +DEPENDS_virtclass-native_prepend = "${@autotools_deps(d)}"
> +DEPENDS_virtclass-nativesdk_prepend = "${@autotools_deps(d)}"
> +
> +acpaths = "default"
> +EXTRA_AUTORECONF = "--exclude=autopoint"
> +
> +oe_autoreconf () {
> +       if [ x"${acpaths}" = xdefault ]; then
> +               acpaths=
> +               for i in `find ${S} -maxdepth 2 -name \*.m4|grep -v 'aclocal.m4'| \
> +                       grep -v 'acinclude.m4' | sed -e 's,\(.*/\).*$,\1,'|sort -u`; do
> +                       acpaths="$acpaths -I $i"
> +               done
> +       else
> +               acpaths="${acpaths}"
> +       fi
> +       AUTOV=`automake --version | head -n 1 | sed "s/.* //;s/\.[0-9]\+$//"`
> +       install -d ${STAGING_DATADIR}/aclocal
> +       install -d ${STAGING_DATADIR}/aclocal-$AUTOV
> +       acpaths="$acpaths -I${STAGING_DATADIR}/aclocal-$AUTOV -I ${STAGING_DATADIR}/aclocal"
> +       # autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
> +       # like it was auto-generated.  Work around this by blowing it away
> +       # by hand, unless the package specifically asked not to run aclocal.
> +       if ! echo ${EXTRA_AUTORECONF} | grep -q "aclocal"; then
> +               rm -f aclocal.m4
> +       fi
> +       if [ -e configure.in ]; then
> +               CONFIGURE_AC=configure.in
> +       else
> +               CONFIGURE_AC=configure.ac
> +       fi
> +       if grep "^[[:space:]]*AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
> +               if grep "sed.*POTFILES" $CONFIGURE_AC >/dev/null; then
> +                       : do nothing -- we still have an old unmodified configure.ac
> +               else
> +                       echo "no" | glib-gettextize --force
> +               fi
> +       else if grep "^[[:space:]]*AM_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then
> +               if [ -e ${STAGING_DATADIR}/gettext/config.rpath ]; then
> +                       ln -sf ${STAGING_DATADIR}/gettext/config.rpath ${S}/
> +               else
> +                       oenote ${STAGING_DATADIR}/gettext/config.rpath not found. gettext is not installed.
> +               fi
> +       fi
> +
> +       fi
> +       for aux in m4 `sed -n -e '/^[[:space:]]*AC_CONFIG_MACRO_DIR/s|[^(]*([[]*\([^])]*\)[]]*)|\1|p' $CONFIGURE_AC`; do
> +               mkdir -p ${aux}
> +       done
> +       autoreconf -Wcross --verbose --install --symlink --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed."
> +       if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then
> +               intltoolize --force --automake
> +       fi
> +}
> +
> +autotools_do_configure() {
> +       case ${PN} in
> +       autoconf*|automake*)
> +       ;;
> +       *)
> +               find ${S} -name configure.in -o -name configure.ac | \
> +                       while read fn; do
> +                               rm -f `dirname $fn`/configure
> +                       done
> +               if [ -e ${S}/configure.in -o -e ${S}/configure.ac ]; then
> +                       olddir=`pwd`
> +                       cd ${S}
> +                       oe_autoreconf
> +                       cd $olddir
> +               fi
> +       ;;
> +       esac
> +       if [ -e ${S}/configure ]; then
> +               oe_runconf $@
> +       else
> +               oenote "nothing to configure"
> +       fi
> +}
> diff --git a/classes/autotools/configure.bbclass b/classes/autotools/configure.bbclass
> new file mode 100644
> index 0000000..8f93d9c
> --- /dev/null
> +++ b/classes/autotools/configure.bbclass
> @@ -0,0 +1,118 @@
> +# use autotools_stage_all for native packages
> +AUTOTOOLS_NATIVE_STAGE_INSTALL = "1"
> +
> +DEPENDS_prepend = "${@['gnu-config-native ', ''][bool(d.getVar('INHIBIT_AUTOTOOLS_DEPS', 1))]}"
> +EXTRA_OEMAKE = ""
> +
> +inherit siteinfo
> +
> +def _autotools_get_sitefiles(d):
> +    if oe.utils.inherits(d, 'native', 'nativesdk'):
> +        return
> +
> +    sitedata = siteinfo_data(d)
> +    for path in d.getVar("BBPATH", True).split(":"):
> +        for element in sitedata:
> +            filename = os.path.join(path, "site", element)
> +            if os.path.exists(filename):
> +                yield filename
> +
> +# Space separated list of shell scripts with variables defined to supply test
> +# results for autoconf tests we cannot run at build time.
> +export CONFIG_SITE = "${@' '.join(_autotools_get_sitefiles(d))}"
> +
> +def autotools_set_crosscompiling(d):
> +       if not bb.data.inherits_class('native', d):
> +               return " cross_compiling=yes"
> +       return ""
> +
> +def append_libtool_sysroot(d):
> +       if bb.data.getVar('LIBTOOL_HAS_SYSROOT', d, 1) == "yes":
> +               if bb.data.getVar('BUILD_SYS', d, 1) == bb.data.getVar('HOST_SYS', d, 1):
> +                       return '--with-libtool-sysroot'
> +               else:
> +                       return '--with-libtool-sysroot=${STAGING_DIR_HOST}'
> +       return ''
> +
> +def distro_imposed_configure_flags(d):
> +       distro_features = bb.data.getVar('DISTRO_FEATURES', d, True) or ""
> +       distro_features = distro_features.split()
> +       flags = set()
> +       features = (('largefile', 'largefile'),
> +               ('ipv6'     , 'ipv6'),
> +               ('nls'      , 'nls'))
> +
> +       for knob, cfgargs in features:
> +               if isinstance(cfgargs, basestring):
> +                       cfgargs = [cfgargs]
> +               en_or_dis = knob in distro_features and "enable" or "disable"
> +               for flg in cfgargs:
> +                       flags.add("--%s-%s" % (en_or_dis, flg))
> +       return " ".join(flags)
> +
> +CONFIGUREOPTS = " --build=${BUILD_SYS} \
> +                 --host=${HOST_SYS} \
> +                 --target=${TARGET_SYS} \
> +                 --prefix=${prefix} \
> +                 --exec_prefix=${exec_prefix} \
> +                 --bindir=${bindir} \
> +                 --sbindir=${sbindir} \
> +                 --libexecdir=${libexecdir} \
> +                 --datadir=${datadir} \
> +                 --sysconfdir=${sysconfdir} \
> +                 --sharedstatedir=${sharedstatedir} \
> +                 --localstatedir=${localstatedir} \
> +                 --libdir=${libdir} \
> +                 --includedir=${includedir} \
> +                 --oldincludedir=${oldincludedir} \
> +                 --infodir=${infodir} \
> +                 --mandir=${mandir} \
> +                 ${@append_libtool_sysroot(d)} \
> +                 ${@distro_imposed_configure_flags(d)} \
> +               "
> +
> +oe_runconf () {
> +       if [ -x ${S}/configure ] ; then
> +               ${S}/configure \
> +               ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@"
> +       else
> +               oefatal "no configure script found"
> +       fi
> +}
> +
> +autotools_do_configure () {
> +       if [ -e ${S}/configure ]; then
> +               find ${S} -name config.guess -exec \
> +                   ln -sf ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess "{}" \;
> +               find ${S} -name config.sub -exec \
> +                   ln -sf ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub "{}" \;
> +               oe_runconf $@
> +       else
> +               oenote "nothing to configure"
> +       fi
> +}
> +
> +autotools_do_install() {
> +       oe_runmake 'DESTDIR=${D}' install
> +}
> +
> +do_configure () {
> +    autotools_do_configure
> +}
> +
> +do_install () {
> +    autotools_do_install
> +}
> +
> +PACKAGE_PREPROCESS_FUNCS += "${@['autotools_prepackage_lamangler',''][bb.data.getVar('LIBTOOL_HAS_SYSROOT', d, 1) == "yes"]}"
> +autotools_prepackage_lamangler () {
> +        for i in `find ${PKGD} -name "*.la"` ; do \
> +            sed -i -e 's:${STAGING_LIBDIR}:${libdir}:g;' \
> +                   -e 's:${D}::g;' \
> +                   -e 's:-I${WORKDIR}\S*: :g;' \
> +                   -e 's:-L${WORKDIR}\S*: :g;' \
> +                   $i
> +       done
> +}
> +
> +require classes/autotools/staging.inc
> diff --git a/classes/autotools/staging.inc b/classes/autotools/staging.inc
> new file mode 100644
> index 0000000..6fa45cb
> --- /dev/null
> +++ b/classes/autotools/staging.inc
> @@ -0,0 +1,36 @@
> +# STAGE_TEMP_PREFIX is used for a speedup by packaged-staging
> +STAGE_TEMP="${WORKDIR}/temp-staging"
> +STAGE_TEMP_PREFIX = ""
> +
> +autotools_stage_includes() {
> +       if [ "${INHIBIT_AUTO_STAGE_INCLUDES}" != "1" ]
> +       then
> +               rm -rf ${STAGE_TEMP}
> +               mkdir -p ${STAGE_TEMP}
> +               make DESTDIR="${STAGE_TEMP}" install
> +               cp -pPR ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}
> +               rm -rf ${STAGE_TEMP}
> +       fi
> +}
> +
> +autotools_stage_dir() {
> +       sysroot_stage_dir $1 ${STAGE_TEMP_PREFIX}$2
> +}
> +
> +autotools_stage_libdir() {
> +       sysroot_stage_libdir $1 ${STAGE_TEMP_PREFIX}$2
> +}
> +
> +autotools_stage_all() {
> +       if [ "${INHIBIT_AUTO_STAGE}" = "1" ]
> +       then
> +               return
> +       fi
> +       rm -rf ${STAGE_TEMP}
> +       mkdir -p ${STAGE_TEMP}
> +       oe_runmake DESTDIR="${STAGE_TEMP}" install
> +       rm -rf ${STAGE_TEMP}/${mandir} || true
> +       rm -rf ${STAGE_TEMP}/${infodir} || true
> +       sysroot_stage_dirs ${STAGE_TEMP} ${STAGE_TEMP_PREFIX}
> +       rm -rf ${STAGE_TEMP}
> +}
> --
> 1.7.2.3
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>




More information about the Openembedded-devel mailing list