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

Chris Larson kergoth at gmail.com
Wed Feb 16 22:07:40 UTC 2011


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>
---
 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





More information about the Openembedded-devel mailing list