diff --git a/meta/lib/bbconfigbuild/configfragments.py b/meta/lib/bbconfigbuild/configfragments.py index fce3301bac..34c6a3b4bc 100644 --- a/meta/lib/bbconfigbuild/configfragments.py +++ b/meta/lib/bbconfigbuild/configfragments.py @@ -104,8 +104,11 @@ class ConfigFragmentsPlugin(LayerPlugin): return True return False + def fragment_prefix(self, fragmentname): + return fragmentname.split("/",1)[0] + def builtin_fragment_exists(self, fragmentname): - fragment_prefix = fragmentname.split("/",1)[0] + fragment_prefix = self.fragment_prefix(fragmentname) fragment_prefix_defs = set([f.split(':')[0] for f in self.tinfoil.config_data.getVar('OE_FRAGMENTS_BUILTIN').split()]) return fragment_prefix in fragment_prefix_defs @@ -128,6 +131,8 @@ class ConfigFragmentsPlugin(LayerPlugin): if f in enabled_fragments: print("Fragment {} already included in {}".format(f, args.confpath)) else: + # first filter out all built-in fragments with the same prefix as the one that is being enabled + enabled_fragments = [fragment for fragment in enabled_fragments if not(self.builtin_fragment_exists(fragment) and self.fragment_prefix(fragment) == self.fragment_prefix(f))] enabled_fragments.append(f) return " ".join(enabled_fragments), None, 0, True diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py index d82c5aaf37..7eb176aa04 100644 --- a/meta/lib/oeqa/selftest/cases/bblayers.py +++ b/meta/lib/oeqa/selftest/cases/bblayers.py @@ -281,11 +281,11 @@ class BitbakeConfigBuild(OESelftestTestCase): 2. Verify that SELFTEST_BUILTIN_FRAGMENT_VARIABLE is set after setting the fragment. 3. Verify that SELFTEST_BUILTIN_FRAGMENT_VARIABLE is set after setting - the fragment with another value that overrides the first one. - 4. Verify that SELFTEST_BUILTIN_FRAGMENT_VARIABLE is set to the previous - value after removing the second assignment (from step 3). + the fragment with another value that replaces the first one. + 4. Repeat steps 2 and 3 to verify that going back and forth between values + works. 5. Verify that SELFTEST_BUILTIN_FRAGMENT_VARIABLE is not set after - removing the original assignment. + removing the final assignment. """ self.assertEqual(get_bb_var('SELFTEST_BUILTIN_FRAGMENT_VARIABLE'), None) @@ -295,10 +295,13 @@ class BitbakeConfigBuild(OESelftestTestCase): runCmd('bitbake-config-build enable-fragment selftest-fragment/someothervalue') self.assertEqual(get_bb_var('SELFTEST_BUILTIN_FRAGMENT_VARIABLE'), 'someothervalue') - runCmd('bitbake-config-build disable-fragment selftest-fragment/someothervalue') + runCmd('bitbake-config-build enable-fragment selftest-fragment/somevalue') self.assertEqual(get_bb_var('SELFTEST_BUILTIN_FRAGMENT_VARIABLE'), 'somevalue') - runCmd('bitbake-config-build disable-fragment selftest-fragment/somevalue') + runCmd('bitbake-config-build enable-fragment selftest-fragment/someothervalue') + self.assertEqual(get_bb_var('SELFTEST_BUILTIN_FRAGMENT_VARIABLE'), 'someothervalue') + + runCmd('bitbake-config-build disable-fragment selftest-fragment/someothervalue') self.assertEqual(get_bb_var('SELFTEST_BUILTIN_FRAGMENT_VARIABLE'), None) def test_show_fragment(self):