From: Chris Larson <[email protected]> Split up most of autotools.bbclass into:
- classes/autotools/configure.inc - classes/autotools/bootstrap.inc - classes/autotools/staging.inc Signed-off-by: Chris Larson <[email protected]> --- 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 [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
