summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass')
-rw-r--r--bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass219
1 files changed, 219 insertions, 0 deletions
diff --git a/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass b/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass
new file mode 100644
index 0000000000..e174c02dd6
--- /dev/null
+++ b/bitbake/lib/bb/tests/runqueue-tests/classes/base.bbclass
@@ -0,0 +1,219 @@
1SLOWTASKS ??= ""
2SSTATEVALID ??= ""
3
4def stamptask(d):
5 import time
6
7 thistask = d.expand("${PN}:${BB_CURRENTTASK}")
8 if thistask in d.getVar("SLOWTASKS").split():
9 bb.note("Slowing task %s" % thistask)
10 time.sleep(0.5)
11
12 with open(d.expand("${TOPDIR}/task.log"), "a+") as f:
13 f.write(thistask + "\n")
14
15python do_fetch() {
16 stamptask(d)
17}
18python do_unpack() {
19 stamptask(d)
20}
21python do_patch() {
22 stamptask(d)
23}
24python do_populate_lic() {
25 stamptask(d)
26}
27python do_prepare_recipe_sysroot() {
28 stamptask(d)
29}
30python do_configure() {
31 stamptask(d)
32}
33python do_compile() {
34 stamptask(d)
35}
36python do_install() {
37 stamptask(d)
38}
39python do_populate_sysroot() {
40 stamptask(d)
41}
42python do_package() {
43 stamptask(d)
44}
45python do_package_write_ipk() {
46 stamptask(d)
47}
48python do_package_write_rpm() {
49 stamptask(d)
50}
51python do_packagedata() {
52 stamptask(d)
53}
54python do_package_qa() {
55 stamptask(d)
56}
57python do_build() {
58 stamptask(d)
59}
60do_prepare_recipe_sysroot[deptask] = "do_populate_sysroot"
61do_package[deptask] += "do_packagedata"
62do_build[recrdeptask] += "do_deploy"
63do_build[recrdeptask] += "do_package_write_ipk"
64do_build[recrdeptask] += "do_package_write_rpm"
65do_package_qa[rdeptask] = "do_packagedata"
66do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy"
67
68DEBIANRDEP = "do_packagedata"
69oo_package_write_ipk[rdeptask] = "${DEBIANRDEP}"
70do_package_write_rpm[rdeptask] = "${DEBIANRDEP}"
71
72addtask fetch
73addtask unpack after do_fetch
74addtask patch after do_unpack
75addtask prepare_recipe_sysroot after do_patch
76addtask configure after do_prepare_recipe_sysroot
77addtask compile after do_configure
78addtask install after do_compile
79addtask populate_sysroot after do_install
80addtask package after do_install
81addtask package_write_ipk after do_packagedata do_package
82addtask package_write_rpm after do_packagedata do_package
83addtask packagedata after do_package
84addtask package_qa after do_package
85addtask build after do_package_qa do_package_write_rpm do_package_write_ipk do_populate_sysroot
86
87python do_package_setscene() {
88 stamptask(d)
89}
90python do_package_qa_setscene() {
91 stamptask(d)
92}
93python do_package_write_ipk_setscene() {
94 stamptask(d)
95}
96python do_package_write_rpm_setscene() {
97 stamptask(d)
98}
99python do_packagedata_setscene() {
100 stamptask(d)
101}
102python do_populate_lic_setscene() {
103 stamptask(d)
104}
105python do_populate_sysroot_setscene() {
106 stamptask(d)
107}
108
109addtask package_setscene
110addtask package_qa_setscene
111addtask package_write_ipk_setscene
112addtask package_write_rpm_setscene
113addtask packagedata_setscene
114addtask populate_lic_setscene
115addtask populate_sysroot_setscene
116
117BB_SETSCENE_DEPVALID = "setscene_depvalid"
118
119def setscene_depvalid(task, taskdependees, notneeded, d, log=None):
120 # taskdependees is a dict of tasks which depend on task, each being a 3 item list of [PN, TASKNAME, FILENAME]
121 # task is included in taskdependees too
122 # Return - False - We need this dependency
123 # - True - We can skip this dependency
124 import re
125
126 def logit(msg, log):
127 if log is not None:
128 log.append(msg)
129 else:
130 bb.debug(2, msg)
131
132 logit("Considering setscene task: %s" % (str(taskdependees[task])), log)
133
134 def isNativeCross(x):
135 return x.endswith("-native") or "-cross-" in x or "-crosssdk" in x or x.endswith("-cross")
136
137 # We only need to trigger populate_lic through direct dependencies
138 if taskdependees[task][1] == "do_populate_lic":
139 return True
140
141 # We only need to trigger packagedata through direct dependencies
142 # but need to preserve packagedata on packagedata links
143 if taskdependees[task][1] == "do_packagedata":
144 for dep in taskdependees:
145 if taskdependees[dep][1] == "do_packagedata":
146 return False
147 return True
148
149 for dep in taskdependees:
150 logit(" considering dependency: %s" % (str(taskdependees[dep])), log)
151 if task == dep:
152 continue
153 if dep in notneeded:
154 continue
155 # do_package_write_* and do_package doesn't need do_package
156 if taskdependees[task][1] == "do_package" and taskdependees[dep][1] in ['do_package', 'do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package_qa']:
157 continue
158 # do_package_write_* need do_populate_sysroot as they're mainly postinstall dependencies
159 if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm']:
160 return False
161 # do_package/packagedata/package_qa don't need do_populate_sysroot
162 if taskdependees[task][1] == "do_populate_sysroot" and taskdependees[dep][1] in ['do_package', 'do_packagedata', 'do_package_qa']:
163 continue
164 # Native/Cross packages don't exist and are noexec anyway
165 if isNativeCross(taskdependees[dep][0]) and taskdependees[dep][1] in ['do_package_write_ipk', 'do_package_write_rpm', 'do_packagedata', 'do_package', 'do_package_qa']:
166 continue
167
168 # This is due to the [depends] in useradd.bbclass complicating matters
169 # The logic *is* reversed here due to the way hard setscene dependencies are injected
170 if (taskdependees[task][1] == 'do_package' or taskdependees[task][1] == 'do_populate_sysroot') and taskdependees[dep][0].endswith(('shadow-native', 'shadow-sysroot', 'base-passwd', 'pseudo-native')) and taskdependees[dep][1] == 'do_populate_sysroot':
171 continue
172
173 # Consider sysroot depending on sysroot tasks
174 if taskdependees[task][1] == 'do_populate_sysroot' and taskdependees[dep][1] == 'do_populate_sysroot':
175 # Native/Cross populate_sysroot need their dependencies
176 if isNativeCross(taskdependees[task][0]) and isNativeCross(taskdependees[dep][0]):
177 return False
178 # Target populate_sysroot depended on by cross tools need to be installed
179 if isNativeCross(taskdependees[dep][0]):
180 return False
181 # Native/cross tools depended upon by target sysroot are not needed
182 # Add an exception for shadow-native as required by useradd.bbclass
183 if isNativeCross(taskdependees[task][0]) and taskdependees[task][0] != 'shadow-native':
184 continue
185 # Target populate_sysroot need their dependencies
186 return False
187
188
189 if taskdependees[dep][1] == "do_populate_lic":
190 continue
191
192 # Safe fallthrough default
193 logit(" Default setscene dependency fall through due to dependency: %s" % (str(taskdependees[dep])), log)
194 return False
195 return True
196
197BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
198
199def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d, siginfo=False, *, sq_unihash=None):
200
201 ret = []
202 missed = []
203
204 valid = d.getVar("SSTATEVALID").split()
205
206 for task in range(len(sq_fn)):
207 n = os.path.basename(sq_fn[task]).rsplit(".", 1)[0] + ":" + sq_task[task]
208 if n in valid:
209 bb.note("SState: Found valid sstate for %s" % n)
210 ret.append(task)
211 else:
212 missed.append(task)
213 bb.note("SState: Found no valid sstate for %s" % n)
214
215 if hasattr(bb.parse.siggen, "checkhashes"):
216 bb.parse.siggen.checkhashes(missed, ret, sq_fn, sq_task, sq_hash, sq_hashfn, d)
217
218 return ret
219