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

Khem Raj raj.khem at gmail.com
Wed Feb 16 22:18:41 UTC 2011


On (16/02/11 15:07), Chris Larson wrote:
> From: Chris Larson <chris_larson at mentor.com>
> 
> Split up most of autotools.bbclass into:
> 
> - classes/autotools/configure.inc
> - classes/autotools/bootstrap.inc
> - classes/autotools/staging.inc
> 
> Signed-off-by: Chris Larson <chris_larson at mentor.com>

Acked-by: Khem Raj <raj.khem at gmail.com>

> ---
>  classes/autotools.bbclass       |  243 ++++-----------------------------------
>  classes/autotools/bootstrap.inc |   70 +++++++++++
>  classes/autotools/configure.inc |   91 +++++++++++++++
>  classes/autotools/staging.inc   |   36 ++++++
>  4 files changed, 222 insertions(+), 218 deletions(-)
>  create mode 100644 classes/autotools/bootstrap.inc
>  create mode 100644 classes/autotools/configure.inc
>  create mode 100644 classes/autotools/staging.inc
> 
> diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass
> index a88a4d1..60925e9 100644
> --- a/classes/autotools.bbclass
> +++ b/classes/autotools.bbclass
> @@ -1,237 +1,44 @@
> -# use autotools_stage_all for native packages
> -AUTOTOOLS_NATIVE_STAGE_INSTALL = "1"
> +require classes/autotools/staging.inc
> +require classes/autotools/bootstrap.inc
> +require classes/autotools/configure.inc
>  
>  def autotools_deps(d):
> -	if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1):
> -		return ''
> +    if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1):
> +        return ''
>  
> -	pn = bb.data.getVar('PN', d, 1)
> -	deps = ''
> +    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 in ['autoconf-native', 'automake-native', 'help2man-native']:
> +        return deps
>  
> -	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 '
> +    deps += 'autoconf-native automake-native help2man-native '
>  
> -	return deps + 'gnu-config-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 '
>  
> -EXTRA_OEMAKE = ""
> +    return deps + 'gnu-config-native '
>  
>  DEPENDS_prepend = "${@autotools_deps(d)}"
>  DEPENDS_virtclass-native_prepend = "${@autotools_deps(d)}"
>  DEPENDS_virtclass-nativesdk_prepend = "${@autotools_deps(d)}"
>  
> -inherit siteinfo
> +autotools_do_configure () {
> +    autotools_do_bootstrap
>  
> -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
> +    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}
> +    oe_runmake 'DESTDIR=${D}' install
>  }
>  
>  EXPORT_FUNCTIONS do_configure do_install
> -
> diff --git a/classes/autotools/bootstrap.inc b/classes/autotools/bootstrap.inc
> new file mode 100644
> index 0000000..4e71568
> --- /dev/null
> +++ b/classes/autotools/bootstrap.inc
> @@ -0,0 +1,70 @@
> +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_bootstrap() {
> +    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
> +}
> diff --git a/classes/autotools/configure.inc b/classes/autotools/configure.inc
> new file mode 100644
> index 0000000..02cd918
> --- /dev/null
> +++ b/classes/autotools/configure.inc
> @@ -0,0 +1,91 @@
> +# use autotools_stage_all for native packages
> +AUTOTOOLS_NATIVE_STAGE_INSTALL = "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
> +}
> +
> +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
> +}
> diff --git a/classes/autotools/staging.inc b/classes/autotools/staging.inc
> new file mode 100644
> index 0000000..b91f4a6
> --- /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

-- 
-Khem




More information about the Openembedded-devel mailing list