diff options
author | Kristian Amlie <kristian.amlie@northern.tech> | 2022-09-08 14:16:06 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2022-09-09 16:19:39 +0100 |
commit | 3670f3685e63345df0501f26acad2044e3544d7b (patch) | |
tree | 77f2715d25780e3a13a3a5196fa64ba145da5593 /meta/classes-recipe | |
parent | a86f9ec0d783cec327ea18d523eb5a12b2d71955 (diff) | |
download | poky-3670f3685e63345df0501f26acad2044e3544d7b.tar.gz |
externalsrc: Don't wipe out src dir when EXPORT_FUNCTIONS is used.
When 73fa855f6af5ef9c3 was introduced, the "cleandirs" variable flag
started applying to functions exported using EXPORT_FUNCTIONS.
The externalsrc class is supposed to remove cleandirs in order to
prevent wiping out an external src folder (home directory?), but
doesn't take the previous point into account. The result is that
cleandirs is still in effect.
To fix this, apply the cleandirs manipulation to all variables, not
just predefined ones. This is expensive, but since it executes inside
an `if externalsrc` clause, and EXTERNALSRC is usually only set for
specific single recipes, it won't affect most recipes.
Richard Purdie <richard.purdie@linuxfoundation.org> is the original
author of this patch. I just submitted it under my name for blame
purposes, and also we have been testing it a lot in my company.
This is the original discussion:
https://lists.openembedded.org/g/openembedded-core/topic/91374926
(From OE-Core rev: 74ad497a55007960a4869905878e3ccbd11e4369)
Signed-off-by: Kristian Amlie <kristian.amlie@northern.tech>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes-recipe')
-rw-r--r-- | meta/classes-recipe/externalsrc.bbclass | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/meta/classes-recipe/externalsrc.bbclass b/meta/classes-recipe/externalsrc.bbclass index 51dbe9ea5a..ce753fce76 100644 --- a/meta/classes-recipe/externalsrc.bbclass +++ b/meta/classes-recipe/externalsrc.bbclass | |||
@@ -91,16 +91,18 @@ python () { | |||
91 | # Since configure will likely touch ${S}, ensure only we lock so one task has access at a time | 91 | # Since configure will likely touch ${S}, ensure only we lock so one task has access at a time |
92 | d.appendVarFlag(task, "lockfiles", " ${S}/singletask.lock") | 92 | d.appendVarFlag(task, "lockfiles", " ${S}/singletask.lock") |
93 | 93 | ||
94 | for funcname in [task, "base_" + task, "kernel_" + task]: | 94 | for v in d.keys(): |
95 | cleandirs = d.getVarFlag(v, "cleandirs", False) | ||
96 | if cleandirs: | ||
95 | # We do not want our source to be wiped out, ever (kernel.bbclass does this for do_clean) | 97 | # We do not want our source to be wiped out, ever (kernel.bbclass does this for do_clean) |
96 | cleandirs = oe.recipeutils.split_var_value(d.getVarFlag(funcname, 'cleandirs', False) or '') | 98 | cleandirs = oe.recipeutils.split_var_value(cleandirs) |
97 | setvalue = False | 99 | setvalue = False |
98 | for cleandir in cleandirs[:]: | 100 | for cleandir in cleandirs[:]: |
99 | if oe.path.is_path_parent(externalsrc, d.expand(cleandir)): | 101 | if oe.path.is_path_parent(externalsrc, d.expand(cleandir)): |
100 | cleandirs.remove(cleandir) | 102 | cleandirs.remove(cleandir) |
101 | setvalue = True | 103 | setvalue = True |
102 | if setvalue: | 104 | if setvalue: |
103 | d.setVarFlag(funcname, 'cleandirs', ' '.join(cleandirs)) | 105 | d.setVarFlag(v, 'cleandirs', ' '.join(cleandirs)) |
104 | 106 | ||
105 | fetch_tasks = ['do_fetch', 'do_unpack'] | 107 | fetch_tasks = ['do_fetch', 'do_unpack'] |
106 | # If we deltask do_patch, there's no dependency to ensure do_unpack gets run, so add one | 108 | # If we deltask do_patch, there's no dependency to ensure do_unpack gets run, so add one |