commit bd2223c86294e3de9356082b6c7acd8a96d5d196 Author: Bernhard Reutner-Fischer Date: Tue Aug 3 15:18:45 2010 +0200 base.bbclass: depend unpacking on native unpackers Automatically depend do_unpack on the corresponding native unpacker. If your package's SRC_URIs do not contain unambiguous extensions or are misnamed (like .exe for ZIP'ed files) then add e.g.: do_unpack[depends] += " unzip-native:do_populate_sysroot" Signed-off-by: Bernhard Reutner-Fischer diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass index 2c27d0f..3742164 100644 --- a/classes/autotools.bbclass +++ b/classes/autotools.bbclass @@ -1,8 +1,14 @@ # use autotools_stage_all for native packages AUTOTOOLS_NATIVE_STAGE_INSTALL = "1" -def autotools_deps(d): - if bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS', d, 1): +def autotools_deps(d, virtclass=None): + if virtclass: + virtclass_str = "_virtclass-%s" % (virtclass) + else: + virtclass_str = "" + if ((virtclass and bb.data.inherits_class(virtclass, d)) \ + or (virtclass is None)) \ + and bb.data.getVar('INHIBIT_AUTOTOOLS_DEPS' + virtclass_str, d, 1): return '' pn = bb.data.getVar('PN', d, 1) @@ -17,7 +23,7 @@ def autotools_deps(d): 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): + and not bb.data.getVar('INHIBIT_DEFAULT_DEPS' + virtclass_str, d, 1): deps += 'libtool-cross ' return deps + 'gnu-config-native ' @@ -25,8 +31,8 @@ def autotools_deps(d): EXTRA_OEMAKE = "" DEPENDS_prepend = "${@autotools_deps(d)}" -DEPENDS_virtclass-native_prepend = "${@autotools_deps(d)}" -DEPENDS_virtclass-nativesdk_prepend = "${@autotools_deps(d)}" +DEPENDS_virtclass-native_prepend = "${@autotools_deps(d, 'native')}" +DEPENDS_virtclass-nativesdk_prepend = "${@autotools_deps(d, 'nativesdk')}" inherit siteinfo @@ -97,6 +103,7 @@ oe_runconf () { } autotools_do_configure() { + [ "x${INHIBIT_AUTORECONF}" = "x" ] && case ${PN} in autoconf*) ;; diff --git a/classes/base.bbclass b/classes/base.bbclass index 8708fa9..0efd60f 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -54,7 +54,11 @@ oe_runmake() { ${MAKE} ${EXTRA_OEMAKE} "$@" || die "oe_runmake failed" } -def base_deps(d): +def base_deps(d, virtclass=None): + if virtclass: + virtclass_str = "_virtclass-%s" % (virtclass) + else: + virtclass_str = "" # # Ideally this will check a flag so we will operate properly in # the case where host == build == target, for now we don't work in @@ -68,7 +72,7 @@ def base_deps(d): # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not # we need that built is the responsibility of the patch function / class, not # the application. - if not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d): + if not bb.data.getVar('INHIBIT_DEFAULT_DEPS' + virtclass_str, d): if (bb.data.getVar('HOST_SYS', d, 1) != bb.data.getVar('BUILD_SYS', d, 1)): deps += " virtual/${TARGET_PREFIX}gcc virtual/libc " @@ -81,8 +85,8 @@ def base_deps(d): return deps DEPENDS_prepend="${@base_deps(d)} " -DEPENDS_virtclass-native_prepend="${@base_deps(d)} " -DEPENDS_virtclass-nativesdk_prepend="${@base_deps(d)} " +DEPENDS_virtclass-native_prepend="${@base_deps(d, 'native')} " +DEPENDS_virtclass-nativesdk_prepend="${@base_deps(d, 'nativesdk')} " SCENEFUNCS += "base_scenefunction" @@ -296,19 +300,18 @@ do_build[func] = "1" python () { import exceptions + import re source_mirror_fetch = bb.data.getVar('SOURCE_MIRROR_FETCH', d, 0) if not source_mirror_fetch: need_host = bb.data.getVar('COMPATIBLE_HOST', d, 1) if need_host: - import re this_host = bb.data.getVar('HOST_SYS', d, 1) if not re.match(need_host, this_host): raise bb.parse.SkipPackage("incompatible with host %s" % this_host) need_machine = bb.data.getVar('COMPATIBLE_MACHINE', d, 1) if need_machine: - import re this_machine = bb.data.getVar('MACHINE', d, 1) if this_machine and not re.match(need_machine, this_machine): this_soc_family = bb.data.getVar('SOC_FAMILY', d, 1) @@ -317,7 +320,6 @@ python () { need_target = bb.data.getVar('COMPATIBLE_TARGET_SYS', d, 1) if need_target: - import re this_target = bb.data.getVar('TARGET_SYS', d, 1) if this_target and not re.match(need_target, this_target): raise bb.parse.SkipPackage("incompatible with target system %s" % this_target) @@ -347,19 +349,13 @@ python () { depends = depends + " mercurial-native:do_populate_sysroot" bb.data.setVarFlag('do_fetch', 'depends', depends, d) - # unzip-native should already be staged before unpacking ZIP recipes - need_unzip = bb.data.getVar('NEED_UNZIP_FOR_UNPACK', d, 1) - src_uri = bb.data.getVar('SRC_URI', d, 1) - - if ".zip" in src_uri or need_unzip == "1": - depends = bb.data.getVarFlag('do_unpack', 'depends', d) or "" - depends = depends + " unzip-native:do_populate_sysroot" - bb.data.setVarFlag('do_unpack', 'depends', depends, d) - - if ".lz" in src_uri: - depends = bb.data.getVarFlag('do_unpack', 'depends', d) or "" - depends = depends + " lzip-native:do_populate_sysroot" - bb.data.setVarFlag('do_unpack', 'depends', depends, d) + # Make sure that native unpackers are staged before trying to unpack + for (ext, tool) in [('xz','xz'),('zip','unzip'),('lz','lzip')]: + rex = re.compile('\.' + ext + '($|;|\s)') + if rex.search(srcuri): + depends = bb.data.getVarFlag('do_unpack', 'depends', d) or "" + depends += ' ' + tool + '-native:do_populate_sysroot' + bb.data.setVarFlag('do_unpack', 'depends', depends, d) # 'multimachine' handling mach_arch = bb.data.getVar('MACHINE_ARCH', d, 1) diff --git a/classes/native.bbclass b/classes/native.bbclass index 2e52bfc..6f3a48d 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -89,8 +89,7 @@ PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" PKG_CONFIG_SYSROOT_DIR = "" ORIG_DEPENDS := "${DEPENDS}" - -DEPENDS_virtclass-native ?= "${ORIG_DEPENDS}" +DEPENDS_virtclass-native ?= "${@base_conditional('INHIBIT_DEFAULT_DEPS_virtclass-native', '1', '', '${ORIG_DEPENDS}', d)}" def native_virtclass_add_override(d): if "native" in (bb.data.getVar('BBCLASSEXTEND', d, True) or ""): @@ -118,7 +117,6 @@ python __anonymous () { if dep.endswith("-cross"): newdeps.append(dep.replace("-cross", "-native")) elif not dep.endswith("-native"): - newdeps.append(dep + "-native") else: newdeps.append(dep) @@ -128,8 +126,8 @@ python __anonymous () { if prov.find(pn) != -1: continue if not prov.endswith("-native"): - provides = provides.replace(prov, prov + "-native") bb.data.setVar("PROVIDES", provides, d) + bb.data.setVar("INHIBIT_AUTORECONF", bb.data.getVar("INHIBIT_AUTORECONF_virtclass-native", d, True), d) } diff --git a/recipes/xz/xz_4.999.9beta.bb b/recipes/xz/xz_4.999.9beta.bb index 8733023..fe49412 100644 --- a/recipes/xz/xz_4.999.9beta.bb +++ b/recipes/xz/xz_4.999.9beta.bb @@ -1,5 +1,8 @@ +INHIBIT_AUTOTOOLS_DEPS_virtclass-native = "1" +INHIBIT_DEFAULT_DEPS_virtclass-native = "1" +INHIBIT_AUTORECONF_virtclass-native = "1" require xz.inc -PR = "${INC_PR}.0" +PR = "${INC_PR}.1" SRC_URI = "http://tukaani.org/xz/xz-${PV}.tar.bz2;name=xz" SRC_URI[xz.md5sum] = "cc4044fcc073b8bcf3164d1d0df82161" SRC_URI[xz.sha256sum] = "330312c4397608d8b7be362cc7edbfeafa6101614bc2164d816ea767656aa15c"