Thanks, I was completely sure in my head I had fixed this, but either I haven't, or it has been somehow lost.
Alex On Tue, 17 Oct 2023 at 16:06, Jose Quaresma <[email protected]> wrote: > > > > Alexander Kanavin <[email protected]> escreveu no dia terça, 17/10/2023 > à(s) 14:31: >> >> 'bitbake -S printdiff' is a useful diagnostic facility for finding out >> why sstate is not being reused, but until now it had no tests that would >> ensure it works. This commit adds three basic scenarios: >> >> 1. make a change in a really basic, common recipe that is at the very root >> of dependency trees (quilt-native), and ensure that change is correctly >> discovered when >> building an image. >> >> 2. make a change in gcc-source recipe, which is somewhat special >> (operates in work-shared), and ensure that gcc-runtime builds track >> that down as well. >> >> 3. make a change in base_do_configure() definition from base.bbclass, >> which is not recipe-specific, but affects many basic recipes, and ensure that >> is correctly reported as well. >> >> The test itself actually runs twice: >> - first against a fully populated build directory, where >> the printdiff code is guaranteed to find the correct previous >> stamp that can be compared with in a predictable manner. >> >> - then in an empty build directory where the printdiff code >> goes to look in the sstate cache, and so the existence of the >> previous signature can be tested, but not the difference with it >> (what the exact difference would be is unpredictable as the >> sstate cache is indeed shared between many builds). >> >> Signed-off-by: Alexander Kanavin <[email protected]> >> --- >> .../base-do-configure-modified.bbclass | 3 + >> .../gcc-source/gcc-source_%.bbappend | 2 + >> .../quilt-native/quilt-native_%.bbappend | 2 + >> meta/lib/oeqa/selftest/cases/sstatetests.py | 104 ++++++++++++++++++ >> 4 files changed, 111 insertions(+) >> create mode 100644 meta-selftest/classes/base-do-configure-modified.bbclass >> create mode 100644 >> meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend >> create mode 100644 >> meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend >> >> diff --git a/meta-selftest/classes/base-do-configure-modified.bbclass >> b/meta-selftest/classes/base-do-configure-modified.bbclass >> new file mode 100644 >> index 00000000000..3f96827a428 >> --- /dev/null >> +++ b/meta-selftest/classes/base-do-configure-modified.bbclass >> @@ -0,0 +1,3 @@ >> +base_do_configure:append () { >> + echo "this changes base_do_configure() definiton" >> +} >> diff --git a/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend >> b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend >> new file mode 100644 >> index 00000000000..205720982cb >> --- /dev/null >> +++ b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend >> @@ -0,0 +1,2 @@ >> +# This bbappend is used to alter the recipe using the test_recipe.inc file >> created by tests. >> +include test_recipe.inc >> diff --git a/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend >> b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend >> new file mode 100644 >> index 00000000000..205720982cb >> --- /dev/null >> +++ b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend >> @@ -0,0 +1,2 @@ >> +# This bbappend is used to alter the recipe using the test_recipe.inc file >> created by tests. >> +include test_recipe.inc >> diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py >> b/meta/lib/oeqa/selftest/cases/sstatetests.py >> index bdad9088d37..29e31f2ef9f 100644 >> --- a/meta/lib/oeqa/selftest/cases/sstatetests.py >> +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py >> @@ -773,3 +773,107 @@ addtask tmptask2 before do_tmptask1 >> latestfiles = sorted(filedates.keys(), key=lambda f: >> filedates[f])[-2:] >> bb.siggen.compare_sigfiles(latestfiles[-2], >> latestfiles[-1], recursecb) >> self.assertEqual(recursecb_count,1) >> + >> +class SStatePrintdiff(SStateBase): >> + def run_test_printdiff_changerecipe(self, target, change_recipe, >> change_bbtask, change_content, expected_sametmp_output, >> expected_difftmp_output): >> + self.write_config(""" >> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff" >> +""") >> + self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff") >> + bitbake(target) >> + bitbake("-S none {}".format(target)) >> + bitbake(change_bbtask) >> + self.write_recipeinc(change_recipe, change_content) >> + result_sametmp = bitbake("-S printdiff {}".format(target)) >> + >> + self.write_config(""" >> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2" >> +""") >> + self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2") >> + result_difftmp = bitbake("-S printdiff {}".format(target)) >> + >> + self.delete_recipeinc(change_recipe) >> + for item in expected_sametmp_output: >> + self.assertIn(item, result_sametmp.output) >> + for item in expected_difftmp_output: >> + self.assertIn(item, result_difftmp.output) >> + >> + def run_test_printdiff_changeconfig(self, target, change_content, >> expected_sametmp_output, expected_difftmp_output): >> + self.write_config(""" >> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff" >> +""") >> + self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff") >> + bitbake(target) >> + bitbake("-S none {}".format(target)) >> + self.append_config(change_content) >> + result_sametmp = bitbake("-S printdiff {}".format(target)) >> + >> + self.write_config(""" >> +TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2" >> +""") >> + self.append_config(change_content) >> + self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2") >> + result_difftmp = bitbake("-S printdiff {}".format(target)) >> + >> + for item in expected_sametmp_output: >> + self.assertIn(item, result_sametmp.output) >> + for item in expected_difftmp_output: >> + self.assertIn(item, result_difftmp.output) >> + >> + >> + # Check if printdiff walks the full dependency chain from the image >> target to where the change is in a specific recipe >> + def test_image_minimal_vs_quilt(self): >> + expected_output = ("Task quilt-native:do_install couldn't be used >> from the cache because:", >> +"We need hash", >> +"most recent matching task was") >> + expected_sametmp_output = expected_output + ("Variable do_install >> value changed",'+ echo "this changes the task signature"') >> + expected_difftmp_output = expected_output >> + >> + self.run_test_printdiff_changerecipe("core-image-minimal", >> "quilt-native", "-c do_install quilt-native", >> +""" >> +do_install:append() { >> + echo "this changes the task signature" >> +} >> +""", >> +expected_sametmp_output, expected_difftmp_output) >> + >> + # Check if changes to gcc-source (which uses tmp/work-shared) are >> correctly discovered >> + def test_gcc_runtime_vs_gcc_source(self): >> + expected_output = ("Task gcc-source-13.2.0:do_preconfigure couldn't >> be used from the cache because:", > > > We should avoid using the PV=13.2.0 explicitly imo otherwise it will need to > be updated with the recipe forever. > > The archiver selftest have a gcc-source-PV example > https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/selftest/cases/archiver.py#n141 > >> +"We need hash", >> +"most recent matching task was") >> + expected_sametmp_output = expected_output + ("Variable >> do_preconfigure value changed",'+ print("this changes the task >> signature")') >> + #FIXME: printdiff is supposed to find at least one preconfigure >> task signature in the sstate cache, but isn't able to >> + #expected_difftmp_output = expected_output >> + expected_difftmp_output = () >> + >> + self.run_test_printdiff_changerecipe("gcc-runtime", "gcc-source", >> "-c do_preconfigure gcc-source-13.2.0", > > > Same here > > Jose > >> >> +""" >> +python do_preconfigure:append() { >> + print("this changes the task signature") >> +} >> +""", >> +expected_sametmp_output, expected_difftmp_output) >> + >> + # Check if changing a really base task definiton is reported against >> multiple core recipes using it >> + def test_image_minimal_vs_base_do_configure(self): >> + expected_output = ("Task zstd-native:do_configure couldn't be used >> from the cache because:", >> +"Task texinfo-dummy-native:do_configure couldn't be used from the cache >> because:", >> +"Task ldconfig-native:do_configure couldn't be used from the cache >> because:", >> +"Task gettext-minimal-native:do_configure couldn't be used from the cache >> because:", >> +"Task tzcode-native:do_configure couldn't be used from the cache because:", >> +"Task makedevs-native:do_configure couldn't be used from the cache >> because:", >> +"Task pigz-native:do_configure couldn't be used from the cache because:", >> +"Task update-rc.d-native:do_configure couldn't be used from the cache >> because:", >> +"Task unzip-native:do_configure couldn't be used from the cache because:", >> +"Task gnu-config-native:do_configure couldn't be used from the cache >> because:", >> +"We need hash", >> +"most recent matching task was") >> + expected_sametmp_output = expected_output + ("Variable >> base_do_configure value changed",'+ echo "this changes >> base_do_configure() definiton"') >> + expected_difftmp_output = expected_output >> + >> + self.run_test_printdiff_changeconfig("core-image-minimal", >> +""" >> +INHERIT += "base-do-configure-modified" >> +""", >> +expected_sametmp_output, expected_difftmp_output) >> -- >> 2.39.2 >> >> >> >> > > > -- > Best regards, > > José Quaresma
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#189338): https://lists.openembedded.org/g/openembedded-core/message/189338 Mute This Topic: https://lists.openembedded.org/mt/102017475/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
