diff options
| -rw-r--r-- | meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb | 18 | ||||
| -rw-r--r-- | meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb | 2 | ||||
| -rw-r--r-- | meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc | 16 | ||||
| -rw-r--r-- | meta/classes-global/base.bbclass | 33 | ||||
| -rw-r--r-- | meta/classes-global/package.bbclass | 12 | ||||
| -rw-r--r-- | meta/classes/externalsrc.bbclass | 4 | ||||
| -rw-r--r-- | meta/conf/bitbake.conf | 5 | ||||
| -rw-r--r-- | meta/lib/oeqa/selftest/cases/fetch.py | 2 |
8 files changed, 45 insertions, 47 deletions
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb index 602e895199..5146129666 100644 --- a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb +++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline-fail.bb | |||
| @@ -1,16 +1,4 @@ | |||
| 1 | SUMMARY = "Test recipe for fetching git submodules" | 1 | require gitunpackoffline.inc |
| 2 | HOMEPAGE = "https://git.yoctoproject.org/git/matchbox-panel-2" | ||
| 3 | LICENSE = "GPL-2.0-or-later" | ||
| 4 | LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" | ||
| 5 | 2 | ||
| 6 | INHIBIT_DEFAULT_DEPS = "1" | 3 | # Clear the base.bbclass magic srcrev call |
| 7 | 4 | fetcher_hashes_dummyfunc[vardepvalue] = "" | |
| 8 | TAGVALUE = "2.10" | ||
| 9 | |||
| 10 | # Deliberately have a tag which has to be resolved but ensure do_unpack doesn't access the network again. | ||
| 11 | SRC_URI = "git://git.yoctoproject.org/git/matchbox-panel-2;branch=master;protocol=https" | ||
| 12 | SRC_URI:append:gitunpack-enable-recipe = ";tag=${TAGVALUE}" | ||
| 13 | SRCREV = "f82ca3f42510fb3ef10f598b393eb373a2c34ca7" | ||
| 14 | SRCREV:gitunpack-enable-recipe = "" | ||
| 15 | |||
| 16 | S = "${WORKDIR}/git" | ||
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb index 597c89b199..b051b5da5a 100644 --- a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb +++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.bb | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | require gitunpackoffline-fail.bb | 1 | require gitunpackoffline.inc |
| 2 | 2 | ||
| 3 | TAGVALUE = "2.11" | 3 | TAGVALUE = "2.11" |
| 4 | 4 | ||
diff --git a/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc new file mode 100644 index 0000000000..602e895199 --- /dev/null +++ b/meta-selftest/recipes-test/gitunpackoffline/gitunpackoffline.inc | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | SUMMARY = "Test recipe for fetching git submodules" | ||
| 2 | HOMEPAGE = "https://git.yoctoproject.org/git/matchbox-panel-2" | ||
| 3 | LICENSE = "GPL-2.0-or-later" | ||
| 4 | LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" | ||
| 5 | |||
| 6 | INHIBIT_DEFAULT_DEPS = "1" | ||
| 7 | |||
| 8 | TAGVALUE = "2.10" | ||
| 9 | |||
| 10 | # Deliberately have a tag which has to be resolved but ensure do_unpack doesn't access the network again. | ||
| 11 | SRC_URI = "git://git.yoctoproject.org/git/matchbox-panel-2;branch=master;protocol=https" | ||
| 12 | SRC_URI:append:gitunpack-enable-recipe = ";tag=${TAGVALUE}" | ||
| 13 | SRCREV = "f82ca3f42510fb3ef10f598b393eb373a2c34ca7" | ||
| 14 | SRCREV:gitunpack-enable-recipe = "" | ||
| 15 | |||
| 16 | S = "${WORKDIR}/git" | ||
diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass index cbda8d12f0..7c774d250f 100644 --- a/meta/classes-global/base.bbclass +++ b/meta/classes-global/base.bbclass | |||
| @@ -126,11 +126,18 @@ def setup_hosttools_dir(dest, toolsvar, d, fatal=True): | |||
| 126 | if notfound and fatal: | 126 | if notfound and fatal: |
| 127 | bb.fatal("The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed:\n %s" % " ".join(notfound)) | 127 | bb.fatal("The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed:\n %s" % " ".join(notfound)) |
| 128 | 128 | ||
| 129 | # We can't use vardepvalue against do_fetch directly since that would overwrite | ||
| 130 | # the other task dependencies so we use an indirect function. | ||
| 131 | python fetcher_hashes_dummyfunc() { | ||
| 132 | return | ||
| 133 | } | ||
| 134 | fetcher_hashes_dummyfunc[vardepvalue] = "${@bb.fetch.get_hashvalue(d)}" | ||
| 135 | |||
| 129 | addtask fetch | 136 | addtask fetch |
| 130 | do_fetch[dirs] = "${DL_DIR}" | 137 | do_fetch[dirs] = "${DL_DIR}" |
| 131 | do_fetch[file-checksums] = "${@bb.fetch.get_checksum_file_list(d)}" | 138 | do_fetch[file-checksums] = "${@bb.fetch.get_checksum_file_list(d)}" |
| 132 | do_fetch[file-checksums] += " ${@get_lic_checksum_file_list(d)}" | 139 | do_fetch[file-checksums] += " ${@get_lic_checksum_file_list(d)}" |
| 133 | do_fetch[vardeps] += "SRCREV" | 140 | do_fetch[prefuncs] += "fetcher_hashes_dummyfunc" |
| 134 | do_fetch[network] = "1" | 141 | do_fetch[network] = "1" |
| 135 | python base_do_fetch() { | 142 | python base_do_fetch() { |
| 136 | 143 | ||
| @@ -606,7 +613,6 @@ python () { | |||
| 606 | bb.debug(1, "Skipping recipe %s because of incompatible license(s): %s" % (pn, ' '.join(incompatible_lic))) | 613 | bb.debug(1, "Skipping recipe %s because of incompatible license(s): %s" % (pn, ' '.join(incompatible_lic))) |
| 607 | raise bb.parse.SkipRecipe("it has incompatible license(s): %s" % ' '.join(incompatible_lic)) | 614 | raise bb.parse.SkipRecipe("it has incompatible license(s): %s" % ' '.join(incompatible_lic)) |
| 608 | 615 | ||
| 609 | needsrcrev = False | ||
| 610 | srcuri = d.getVar('SRC_URI') | 616 | srcuri = d.getVar('SRC_URI') |
| 611 | for uri_string in srcuri.split(): | 617 | for uri_string in srcuri.split(): |
| 612 | uri = bb.fetch.URI(uri_string) | 618 | uri = bb.fetch.URI(uri_string) |
| @@ -619,24 +625,17 @@ python () { | |||
| 619 | 625 | ||
| 620 | # Svn packages should DEPEND on subversion-native | 626 | # Svn packages should DEPEND on subversion-native |
| 621 | if uri.scheme == "svn": | 627 | if uri.scheme == "svn": |
| 622 | needsrcrev = True | ||
| 623 | d.appendVarFlag('do_fetch', 'depends', ' subversion-native:do_populate_sysroot') | 628 | d.appendVarFlag('do_fetch', 'depends', ' subversion-native:do_populate_sysroot') |
| 624 | 629 | ||
| 625 | # Git packages should DEPEND on git-native | 630 | # Git packages should DEPEND on git-native |
| 626 | elif uri.scheme in ("git", "gitsm"): | 631 | elif uri.scheme in ("git", "gitsm"): |
| 627 | needsrcrev = True | ||
| 628 | d.appendVarFlag('do_fetch', 'depends', ' git-native:do_populate_sysroot') | 632 | d.appendVarFlag('do_fetch', 'depends', ' git-native:do_populate_sysroot') |
| 629 | 633 | ||
| 630 | # Mercurial packages should DEPEND on mercurial-native | 634 | # Mercurial packages should DEPEND on mercurial-native |
| 631 | elif uri.scheme == "hg": | 635 | elif uri.scheme == "hg": |
| 632 | needsrcrev = True | ||
| 633 | d.appendVar("EXTRANATIVEPATH", ' python3-native ') | 636 | d.appendVar("EXTRANATIVEPATH", ' python3-native ') |
| 634 | d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot') | 637 | d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot') |
| 635 | 638 | ||
| 636 | # Perforce packages support SRCREV = "${AUTOREV}" | ||
| 637 | elif uri.scheme == "p4": | ||
| 638 | needsrcrev = True | ||
| 639 | |||
| 640 | # OSC packages should DEPEND on osc-native | 639 | # OSC packages should DEPEND on osc-native |
| 641 | elif uri.scheme == "osc": | 640 | elif uri.scheme == "osc": |
| 642 | d.appendVarFlag('do_fetch', 'depends', ' osc-native:do_populate_sysroot') | 641 | d.appendVarFlag('do_fetch', 'depends', ' osc-native:do_populate_sysroot') |
| @@ -645,7 +644,6 @@ python () { | |||
| 645 | d.appendVarFlag('do_fetch', 'depends', ' nodejs-native:do_populate_sysroot') | 644 | d.appendVarFlag('do_fetch', 'depends', ' nodejs-native:do_populate_sysroot') |
| 646 | 645 | ||
| 647 | elif uri.scheme == "repo": | 646 | elif uri.scheme == "repo": |
| 648 | needsrcrev = True | ||
| 649 | d.appendVarFlag('do_fetch', 'depends', ' repo-native:do_populate_sysroot') | 647 | d.appendVarFlag('do_fetch', 'depends', ' repo-native:do_populate_sysroot') |
| 650 | 648 | ||
| 651 | # *.lz4 should DEPEND on lz4-native for unpacking | 649 | # *.lz4 should DEPEND on lz4-native for unpacking |
| @@ -676,21 +674,6 @@ python () { | |||
| 676 | elif path.endswith('.deb'): | 674 | elif path.endswith('.deb'): |
| 677 | d.appendVarFlag('do_unpack', 'depends', ' xz-native:do_populate_sysroot') | 675 | d.appendVarFlag('do_unpack', 'depends', ' xz-native:do_populate_sysroot') |
| 678 | 676 | ||
| 679 | if needsrcrev: | ||
| 680 | d.setVar("SRCPV", "${@bb.fetch2.get_srcrev(d)}") | ||
| 681 | |||
| 682 | # Gather all named SRCREVs to add to the sstate hash calculation | ||
| 683 | # This anonymous python snippet is called multiple times so we | ||
| 684 | # need to be careful to not double up the appends here and cause | ||
| 685 | # the base hash to mismatch the task hash | ||
| 686 | for uri in srcuri.split(): | ||
| 687 | parm = bb.fetch.decodeurl(uri)[5] | ||
| 688 | uri_names = parm.get("name", "").split(",") | ||
| 689 | for uri_name in filter(None, uri_names): | ||
| 690 | srcrev_name = "SRCREV_{}".format(uri_name) | ||
| 691 | if srcrev_name not in (d.getVarFlag("do_fetch", "vardeps") or "").split(): | ||
| 692 | d.appendVarFlag("do_fetch", "vardeps", " {}".format(srcrev_name)) | ||
| 693 | |||
| 694 | set_packagetriplet(d) | 677 | set_packagetriplet(d) |
| 695 | 678 | ||
| 696 | # 'multimachine' handling | 679 | # 'multimachine' handling |
diff --git a/meta/classes-global/package.bbclass b/meta/classes-global/package.bbclass index e8055a9cdc..0338a5c690 100644 --- a/meta/classes-global/package.bbclass +++ b/meta/classes-global/package.bbclass | |||
| @@ -315,13 +315,21 @@ python package_get_auto_pr() { | |||
| 315 | # Package functions suitable for inclusion in PACKAGEFUNCS | 315 | # Package functions suitable for inclusion in PACKAGEFUNCS |
| 316 | # | 316 | # |
| 317 | 317 | ||
| 318 | python package_convert_pr_autoinc() { | 318 | python package_setup_pkgv() { |
| 319 | pkgv = d.getVar("PKGV") | 319 | pkgv = d.getVar("PKGV") |
| 320 | # Expand SRCPV into PKGV if not present | ||
| 321 | srcpv = bb.fetch.get_pkgv_string(d) | ||
| 322 | if srcpv and "+" in pkgv: | ||
| 323 | d.appendVar("PKGV", srcpv) | ||
| 324 | pkgv = d.getVar("PKGV") | ||
| 320 | 325 | ||
| 321 | # Adjust pkgv as necessary... | 326 | # Adjust pkgv as necessary... |
| 322 | if 'AUTOINC' in pkgv: | 327 | if 'AUTOINC' in pkgv: |
| 323 | d.setVar("PKGV", pkgv.replace("AUTOINC", "${PRSERV_PV_AUTOINC}")) | 328 | d.setVar("PKGV", pkgv.replace("AUTOINC", "${PRSERV_PV_AUTOINC}")) |
| 329 | } | ||
| 324 | 330 | ||
| 331 | |||
| 332 | python package_convert_pr_autoinc() { | ||
| 325 | # Change PRSERV_PV_AUTOINC and EXTENDPRAUTO usage to special values | 333 | # Change PRSERV_PV_AUTOINC and EXTENDPRAUTO usage to special values |
| 326 | d.setVar('PRSERV_PV_AUTOINC', '@PRSERV_PV_AUTOINC@') | 334 | d.setVar('PRSERV_PV_AUTOINC', '@PRSERV_PV_AUTOINC@') |
| 327 | d.setVar('EXTENDPRAUTO', '@EXTENDPRAUTO@') | 335 | d.setVar('EXTENDPRAUTO', '@EXTENDPRAUTO@') |
| @@ -494,6 +502,7 @@ python do_package () { | |||
| 494 | oe.qa.handle_error("var-undefined", msg, d) | 502 | oe.qa.handle_error("var-undefined", msg, d) |
| 495 | return | 503 | return |
| 496 | 504 | ||
| 505 | bb.build.exec_func("package_setup_pkgv", d) | ||
| 497 | bb.build.exec_func("package_convert_pr_autoinc", d) | 506 | bb.build.exec_func("package_convert_pr_autoinc", d) |
| 498 | 507 | ||
| 499 | # Check for conflict between renamed packages and existing ones | 508 | # Check for conflict between renamed packages and existing ones |
| @@ -577,6 +586,7 @@ addtask do_package_setscene | |||
| 577 | # Copy from PKGDESTWORK to tempdirectory as tempdirectory can be cleaned at both | 586 | # Copy from PKGDESTWORK to tempdirectory as tempdirectory can be cleaned at both |
| 578 | # do_package_setscene and do_packagedata_setscene leading to races | 587 | # do_package_setscene and do_packagedata_setscene leading to races |
| 579 | python do_packagedata () { | 588 | python do_packagedata () { |
| 589 | bb.build.exec_func("package_setup_pkgv", d) | ||
| 580 | bb.build.exec_func("package_get_auto_pr", d) | 590 | bb.build.exec_func("package_get_auto_pr", d) |
| 581 | 591 | ||
| 582 | src = d.expand("${PKGDESTWORK}") | 592 | src = d.expand("${PKGDESTWORK}") |
diff --git a/meta/classes/externalsrc.bbclass b/meta/classes/externalsrc.bbclass index aedd78a03a..322734f7ac 100644 --- a/meta/classes/externalsrc.bbclass +++ b/meta/classes/externalsrc.bbclass | |||
| @@ -63,6 +63,7 @@ python () { | |||
| 63 | else: | 63 | else: |
| 64 | d.setVar('B', '${WORKDIR}/${BPN}-${PV}') | 64 | d.setVar('B', '${WORKDIR}/${BPN}-${PV}') |
| 65 | 65 | ||
| 66 | bb.fetch.get_hashvalue(d) | ||
| 66 | local_srcuri = [] | 67 | local_srcuri = [] |
| 67 | fetch = bb.fetch2.Fetch((d.getVar('SRC_URI') or '').split(), d) | 68 | fetch = bb.fetch2.Fetch((d.getVar('SRC_URI') or '').split(), d) |
| 68 | for url in fetch.urls: | 69 | for url in fetch.urls: |
| @@ -126,6 +127,9 @@ python () { | |||
| 126 | d.setVarFlag('do_compile', 'file-checksums', '${@srctree_hash_files(d)}') | 127 | d.setVarFlag('do_compile', 'file-checksums', '${@srctree_hash_files(d)}') |
| 127 | d.setVarFlag('do_configure', 'file-checksums', '${@srctree_configure_hash_files(d)}') | 128 | d.setVarFlag('do_configure', 'file-checksums', '${@srctree_configure_hash_files(d)}') |
| 128 | 129 | ||
| 130 | d.appendVarFlag('do_compile', 'prefuncs', ' fetcher_hashes_dummyfunc') | ||
| 131 | d.appendVarFlag('do_configure', 'prefuncs', ' fetcher_hashes_dummyfunc') | ||
| 132 | |||
| 129 | # We don't want the workdir to go away | 133 | # We don't want the workdir to go away |
| 130 | d.appendVar('RM_WORK_EXCLUDE', ' ' + d.getVar('PN')) | 134 | d.appendVar('RM_WORK_EXCLUDE', ' ' + d.getVar('PN')) |
| 131 | 135 | ||
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index 599bbc4ba8..c7ada2c49e 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf | |||
| @@ -735,10 +735,7 @@ SRC_URI[vardepsexclude] += "\ | |||
| 735 | SRCDATE = "${DATE}" | 735 | SRCDATE = "${DATE}" |
| 736 | SRCREV ??= "INVALID" | 736 | SRCREV ??= "INVALID" |
| 737 | AUTOREV = "${@bb.fetch2.get_autorev(d)}" | 737 | AUTOREV = "${@bb.fetch2.get_autorev(d)}" |
| 738 | AUTOREV[vardepvalue] = "${SRCPV}" | 738 | SRCPV = "" |
| 739 | # Set Dynamically in base.bbclass | ||
| 740 | # SRCPV = "${@bb.fetch2.get_srcrev(d)}" | ||
| 741 | SRCPV[vardepvalue] = "${SRCPV}" | ||
| 742 | 739 | ||
| 743 | SRC_URI = "" | 740 | SRC_URI = "" |
| 744 | 741 | ||
diff --git a/meta/lib/oeqa/selftest/cases/fetch.py b/meta/lib/oeqa/selftest/cases/fetch.py index c9107022c8..44099176fc 100644 --- a/meta/lib/oeqa/selftest/cases/fetch.py +++ b/meta/lib/oeqa/selftest/cases/fetch.py | |||
| @@ -103,7 +103,7 @@ class Dependencies(OESelftestTestCase): | |||
| 103 | 103 | ||
| 104 | r = """ | 104 | r = """ |
| 105 | LICENSE="CLOSED" | 105 | LICENSE="CLOSED" |
| 106 | SRC_URI="git://example.com/repo;branch=master" | 106 | SRC_URI="git://example.com/repo;branch=master;rev=ffffffffffffffffffffffffffffffffffffffff" |
| 107 | """ | 107 | """ |
| 108 | f = self.write_recipe(textwrap.dedent(r), tempdir) | 108 | f = self.write_recipe(textwrap.dedent(r), tempdir) |
| 109 | d = tinfoil.parse_recipe_file(f) | 109 | d = tinfoil.parse_recipe_file(f) |
