summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-09-21 11:55:44 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-10-04 15:03:53 +0100
commit0b4198eeac06d40861256496169a2e6bb275916c (patch)
tree304eeac137a7caa676d1d7c5e6019dff23337e1e /meta
parentaedb8d58ea6cdeb08a87e3ed7802e401ab04a67d (diff)
downloadpoky-0b4198eeac06d40861256496169a2e6bb275916c.tar.gz
externalsrc: Fix a source date epoch race in reproducible builds
When reproducible builds are enabled and externalsrc is in use, the source date epoch function is added. The conditions on the conditional code removing the unpack task need to match the deltask function, else the source date epoch function can end up running twice and the functions can race with each other causing build failures or corruption. (From OE-Core rev: e82095c02881410035ca23dc12692f074d8ed39b) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r--meta/classes/externalsrc.bbclass19
1 files changed, 9 insertions, 10 deletions
diff --git a/meta/classes/externalsrc.bbclass b/meta/classes/externalsrc.bbclass
index 7f1a760eec..ad93b2d2ab 100644
--- a/meta/classes/externalsrc.bbclass
+++ b/meta/classes/externalsrc.bbclass
@@ -109,16 +109,15 @@ python () {
109 if local_srcuri and task in fetch_tasks: 109 if local_srcuri and task in fetch_tasks:
110 continue 110 continue
111 bb.build.deltask(task, d) 111 bb.build.deltask(task, d)
112 112 if bb.data.inherits_class('reproducible_build', d) and task == 'do_unpack':
113 if bb.data.inherits_class('reproducible_build', d) and 'do_unpack' in d.getVar("SRCTREECOVEREDTASKS").split(): 113 # The reproducible_build's create_source_date_epoch_stamp function must
114 # The reproducible_build's create_source_date_epoch_stamp function must 114 # be run after the source is available and before the
115 # be run after the source is available and before the 115 # do_deploy_source_date_epoch task. In the normal case, it's attached
116 # do_deploy_source_date_epoch task. In the normal case, it's attached 116 # to do_unpack as a postfuncs, but since we removed do_unpack (above)
117 # to do_unpack as a postfuncs, but since we removed do_unpack (above) 117 # we need to move the function elsewhere. The easiest thing to do is
118 # we need to move the function elsewhere. The easiest thing to do is 118 # move it into the prefuncs of the do_deploy_source_date_epoch task.
119 # move it into the prefuncs of the do_deploy_source_date_epoch task. 119 # This is safe, as externalsrc runs with the source already unpacked.
120 # This is safe, as externalsrc runs with the source already unpacked. 120 d.prependVarFlag('do_deploy_source_date_epoch', 'prefuncs', 'create_source_date_epoch_stamp ')
121 d.prependVarFlag('do_deploy_source_date_epoch', 'prefuncs', 'create_source_date_epoch_stamp ')
122 121
123 d.prependVarFlag('do_compile', 'prefuncs', "externalsrc_compile_prefunc ") 122 d.prependVarFlag('do_compile', 'prefuncs', "externalsrc_compile_prefunc ")
124 d.prependVarFlag('do_configure', 'prefuncs', "externalsrc_configure_prefunc ") 123 d.prependVarFlag('do_configure', 'prefuncs', "externalsrc_configure_prefunc ")