[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