diff options
Diffstat (limited to 'classes/autotools.bbclass')
| -rw-r--r-- | classes/autotools.bbclass | 175 |
1 files changed, 78 insertions, 97 deletions
diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 20f371a987..b2de2b13f7 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -1,11 +1,7 @@ -inherit base - # use autotools_stage_all for native packages AUTOTOOLS_NATIVE_STAGE_INSTALL = "1" -def autotools_dep_prepend(d): - import bb; - +def autotools_deps(d): if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1): return '' @@ -20,48 +16,70 @@ def autotools_dep_prepend(d): deps += 'libtool-native ' if not bb.data.inherits_class('native', d) \ and not bb.data.inherits_class('cross', d) \ + and not bb.data.inherits_class('sdk', d) \ and not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d, 1): deps += 'libtool-cross ' return deps + 'gnu-config-native ' EXTRA_OEMAKE = "" -DEPENDS_prepend = "${@autotools_dep_prepend(d)}" + +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): + def inherits(d, *classes): + if any(bb.data.inherits_class(cls, d) for cls in classes): + return True + + if 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): - import bb if not bb.data.inherits_class('native', d): return " cross_compiling=yes" return "" # 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}" + oe_runconf () { if [ -x ${S}/configure ] ; then - cfgcmd="${S}/configure \ - --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} \ - ${EXTRA_OECONF} \ - $@" - oenote "Running $cfgcmd..." - $cfgcmd || oefatal "oe_runconf failed" + ${S}/configure ${CONFIGUREOPTS} ${EXTRA_OECONF} "$@" else oefatal "no configure script found" fi @@ -114,21 +132,29 @@ autotools_do_configure() { else CONFIGURE_AC=configure.ac fi - if grep "^AM_GLIB_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then + 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 oenote Executing glib-gettextize --force --copy echo "no" | glib-gettextize --force --copy fi + else if grep "^[[:space:]]*AM_GNU_GETTEXT" $CONFIGURE_AC >/dev/null; then + if [ -e ${STAGING_DATADIR}/gettext/config.rpath ]; then + cp ${STAGING_DATADIR}/gettext/config.rpath ${S}/ + else + oenote ${STAGING_DATADIR}/gettext/config.rpath not found. gettext is not installed. + fi fi - if grep "^[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then - oenote Executing intltoolize --copy --force --automake - intltoolize --copy --force --automake + fi - oenote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths mkdir -p m4 + oenote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed." + if grep "^[[:space:]]*[AI][CT]_PROG_INTLTOOL" $CONFIGURE_AC >/dev/null; then + oenote Executing intltoolize --copy --force --automake + intltoolize --copy --force --automake + fi cd $olddir fi ;; @@ -144,21 +170,21 @@ autotools_do_install() { oe_runmake 'DESTDIR=${D}' install } -do_install_append() { - for i in `find ${D} -name "*.la"` ; do \ - sed -i -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${libdir}/\1,g' $i - sed -i -e s:${CROSS_DIR}/${HOST_SYS}::g $i - sed -i -e s:${CROSS_DIR}::g $i - sed -i -e s:${STAGING_LIBDIR}:${libdir}:g $i - sed -i -e s:${STAGING_DIR_HOST}::g $i - sed -i -e s:${STAGING_DIR}::g $i - sed -i -e s:${S}::g $i - sed -i -e s:${T}::g $i - sed -i -e s:${D}::g $i - done +PACKAGE_PREPROCESS_FUNCS += "autotools_prepackage_lamangler" + +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" ] @@ -172,14 +198,11 @@ autotools_stage_includes() { } autotools_stage_dir() { - from="$1" - to="$2" - # This will remove empty directories so we can ignore them - rmdir "$from" 2> /dev/null || true - if [ -d "$from" ]; then - mkdir -p "$to" - cp -fpPR "$from"/* "$to" - fi + sysroot_stage_dir $1 ${STAGE_TEMP_PREFIX}$2 +} + +autotools_stage_libdir() { + sysroot_stage_libdir $1 ${STAGE_TEMP_PREFIX}$2 } autotools_stage_all() { @@ -190,51 +213,9 @@ autotools_stage_all() { rm -rf ${STAGE_TEMP} mkdir -p ${STAGE_TEMP} oe_runmake DESTDIR="${STAGE_TEMP}" install - autotools_stage_dir ${STAGE_TEMP}/${includedir} ${STAGING_INCDIR} - if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then - autotools_stage_dir ${STAGE_TEMP}/${bindir} ${STAGING_DIR_HOST}${layout_bindir} - autotools_stage_dir ${STAGE_TEMP}/${sbindir} ${STAGING_DIR_HOST}${layout_sbindir} - autotools_stage_dir ${STAGE_TEMP}/${base_bindir} ${STAGING_DIR_HOST}${layout_base_bindir} - autotools_stage_dir ${STAGE_TEMP}/${base_sbindir} ${STAGING_DIR_HOST}${layout_base_sbindir} - autotools_stage_dir ${STAGE_TEMP}/${libexecdir} ${STAGING_DIR_HOST}${layout_libexecdir} - if [ "${prefix}/lib" != "${libdir}" ]; then - # python puts its files in here, make sure they are staged as well - autotools_stage_dir ${STAGE_TEMP}/${prefix}/lib ${STAGING_DIR_HOST}${layout_prefix}/lib - fi - fi - if [ -d ${STAGE_TEMP}/${libdir} ] - then - olddir=`pwd` - cd ${STAGE_TEMP}/${libdir} - las=$(find . -name \*.la -type f) - cd $olddir - echo "Found la files: $las" - for i in $las - do - sed -e 's/^installed=yes$/installed=no/' \ - -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*.la\),${STAGING_LIBDIR}/\1,g' \ - -e '/^dependency_libs=/s,${WORKDIR}[[:alnum:]/\._+-]*/\([[:alnum:]\._+-]*\),${STAGING_LIBDIR},g' \ - -e "/^dependency_libs=/s,\([[:space:]']\)${libdir},\1${STAGING_LIBDIR},g" \ - -i ${STAGE_TEMP}/${libdir}/$i - done - autotools_stage_dir ${STAGE_TEMP}/${libdir} ${STAGING_LIBDIR} - fi - # Ok, this is nasty. pkgconfig.bbclass is usually used to install .pc files, - # however some packages rely on the presence of .pc files to enable/disable - # their configurataions in which case we better should not install everything - # unconditionally, but rather depend on the actual results of make install. - # The good news though: a) there are not many packages doing this and - # b) packaged staging will fix that anyways. :M: - if [ "${AUTOTOOLS_STAGE_PKGCONFIG}" = "1" ] - then - if [ -e ${STAGE_TEMP}/${libdir}/pkgconfig/ ] ; then - echo "cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/" - cp -f ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/ - fi - fi rm -rf ${STAGE_TEMP}/${mandir} || true rm -rf ${STAGE_TEMP}/${infodir} || true - autotools_stage_dir ${STAGE_TEMP}/${datadir} ${STAGING_DATADIR} + sysroot_stage_dirs ${STAGE_TEMP} ${STAGE_TEMP_PREFIX} rm -rf ${STAGE_TEMP} } |
