diff options
-rw-r--r-- | meta/classes/populate_sdk_ext.bbclass | 7 | ||||
-rw-r--r-- | meta/classes/testsdk.bbclass | 12 | ||||
-rw-r--r-- | meta/files/ext-sdk-prepare.py | 52 |
3 files changed, 16 insertions, 55 deletions
diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass index b9d9543409..df39ff60f1 100644 --- a/meta/classes/populate_sdk_ext.bbclass +++ b/meta/classes/populate_sdk_ext.bbclass | |||
@@ -223,10 +223,13 @@ python copy_buildsystem () { | |||
223 | # warning. | 223 | # warning. |
224 | f.write('SIGGEN_LOCKEDSIGS_SSTATE_EXISTS_CHECK = "none"\n\n') | 224 | f.write('SIGGEN_LOCKEDSIGS_SSTATE_EXISTS_CHECK = "none"\n\n') |
225 | 225 | ||
226 | # Error if the sigs in the locked-signature file don't match | 226 | # Warn if the sigs in the locked-signature file don't match |
227 | # the sig computed from the metadata. | 227 | # the sig computed from the metadata. |
228 | f.write('SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "warn"\n\n') | 228 | f.write('SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "warn"\n\n') |
229 | 229 | ||
230 | # Set up whitelist for run on install | ||
231 | f.write('BB_SETSCENE_ENFORCE_WHITELIST = "%:* *:do_shared_workdir *:do_rm_work"\n\n') | ||
232 | |||
230 | # Hide the config information from bitbake output (since it's fixed within the SDK) | 233 | # Hide the config information from bitbake output (since it's fixed within the SDK) |
231 | f.write('BUILDCFG_HEADER = ""\n') | 234 | f.write('BUILDCFG_HEADER = ""\n') |
232 | 235 | ||
@@ -424,7 +427,7 @@ sdk_ext_postinst() { | |||
424 | # current working directory when first ran, nor will it set $1 when | 427 | # current working directory when first ran, nor will it set $1 when |
425 | # sourcing a script. That is why this has to look so ugly. | 428 | # sourcing a script. That is why this has to look so ugly. |
426 | LOGFILE="$target_sdk_dir/preparing_build_system.log" | 429 | LOGFILE="$target_sdk_dir/preparing_build_system.log" |
427 | sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE && python $target_sdk_dir/ext-sdk-prepare.py '${SDK_INSTALL_TARGETS}' >> $LOGFILE 2>&1" || { echo "ERROR: SDK preparation failed: see $LOGFILE"; cat "$LOGFILE"; echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; } | 430 | sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE && python $target_sdk_dir/ext-sdk-prepare.py '${SDK_INSTALL_TARGETS}' >> $LOGFILE 2>&1" || { echo "ERROR: SDK preparation failed: see $LOGFILE for a slightly more detailed log"; echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; } |
428 | rm $target_sdk_dir/ext-sdk-prepare.py | 431 | rm $target_sdk_dir/ext-sdk-prepare.py |
429 | fi | 432 | fi |
430 | echo done | 433 | echo done |
diff --git a/meta/classes/testsdk.bbclass b/meta/classes/testsdk.bbclass index 18f7678d37..0b8716edb5 100644 --- a/meta/classes/testsdk.bbclass +++ b/meta/classes/testsdk.bbclass | |||
@@ -113,10 +113,18 @@ def testsdkext_main(d): | |||
113 | testdir = d.expand("${WORKDIR}/testsdkext/") | 113 | testdir = d.expand("${WORKDIR}/testsdkext/") |
114 | bb.utils.remove(testdir, True) | 114 | bb.utils.remove(testdir, True) |
115 | bb.utils.mkdirhier(testdir) | 115 | bb.utils.mkdirhier(testdir) |
116 | sdkdir = os.path.join(testdir, 'tc') | ||
116 | try: | 117 | try: |
117 | subprocess.check_output("%s -y -d %s/tc" % (tcname, testdir), shell=True) | 118 | subprocess.check_output("%s -y -d %s" % (tcname, sdkdir), shell=True) |
118 | except subprocess.CalledProcessError as e: | 119 | except subprocess.CalledProcessError as e: |
119 | bb.fatal("Couldn't install the SDK EXT:\n%s" % e.output.decode("utf-8")) | 120 | msg = "Couldn't install the extensible SDK:\n%s" % e.output.decode("utf-8") |
121 | logfn = os.path.join(sdkdir, 'preparing_build_system.log') | ||
122 | if os.path.exists(logfn): | ||
123 | msg += '\n\nContents of preparing_build_system.log:\n' | ||
124 | with open(logfn, 'r') as f: | ||
125 | for line in f: | ||
126 | msg += line | ||
127 | bb.fatal(msg) | ||
120 | 128 | ||
121 | try: | 129 | try: |
122 | bb.plain("Running SDK Compatibility tests ...") | 130 | bb.plain("Running SDK Compatibility tests ...") |
diff --git a/meta/files/ext-sdk-prepare.py b/meta/files/ext-sdk-prepare.py index bf0d03336b..3b33c0f9e9 100644 --- a/meta/files/ext-sdk-prepare.py +++ b/meta/files/ext-sdk-prepare.py | |||
@@ -27,22 +27,6 @@ def exec_watch(cmd, **options): | |||
27 | 27 | ||
28 | return process.returncode, buf | 28 | return process.returncode, buf |
29 | 29 | ||
30 | def check_unexpected(lines, recipes): | ||
31 | """Check for unexpected output lines from dry run""" | ||
32 | unexpected = [] | ||
33 | for line in lines.splitlines(): | ||
34 | if 'Running task' in line: | ||
35 | for recipe in recipes: | ||
36 | if recipe in line: | ||
37 | break | ||
38 | else: | ||
39 | line = line.split('Running', 1)[-1] | ||
40 | if 'do_rm_work' not in line: | ||
41 | unexpected.append(line.rstrip()) | ||
42 | elif 'Running setscene' in line: | ||
43 | unexpected.append(line.rstrip()) | ||
44 | return unexpected | ||
45 | |||
46 | def main(): | 30 | def main(): |
47 | if len(sys.argv) < 2: | 31 | if len(sys.argv) < 2: |
48 | sdk_targets = [] | 32 | sdk_targets = [] |
@@ -55,44 +39,10 @@ def main(): | |||
55 | 39 | ||
56 | print('Preparing SDK for %s...' % ', '.join(sdk_targets)) | 40 | print('Preparing SDK for %s...' % ', '.join(sdk_targets)) |
57 | 41 | ||
58 | ret, out = exec_watch('bitbake %s --setscene-only' % ' '.join(sdk_targets)) | 42 | ret, out = exec_watch('BB_SETSCENE_ENFORCE=1 bitbake %s' % ' '.join(sdk_targets)) |
59 | if ret: | 43 | if ret: |
60 | return ret | 44 | return ret |
61 | 45 | ||
62 | targetlist = [] | ||
63 | for target in sdk_targets: | ||
64 | if ':' in target: | ||
65 | target = target.split(':')[0] | ||
66 | if not target in targetlist: | ||
67 | targetlist.append(target) | ||
68 | |||
69 | recipes = [] | ||
70 | for target in targetlist: | ||
71 | try: | ||
72 | out = subprocess.check_output(('bitbake -e %s' % target).split(), stderr=subprocess.STDOUT) | ||
73 | for line in out.splitlines(): | ||
74 | if line.startswith('FILE='): | ||
75 | splitval = line.rstrip().split('=') | ||
76 | if len(splitval) > 1: | ||
77 | recipes.append(splitval[1].strip('"')) | ||
78 | break | ||
79 | except subprocess.CalledProcessError as e: | ||
80 | print('ERROR: Failed to get recipe for target %s:\n%s' % (target, e.output)) | ||
81 | return 1 | ||
82 | |||
83 | try: | ||
84 | out = subprocess.check_output('bitbake %s -n' % ' '.join(sdk_targets), stderr=subprocess.STDOUT, shell=True) | ||
85 | unexpected = check_unexpected(out, recipes) | ||
86 | except subprocess.CalledProcessError as e: | ||
87 | print('ERROR: Failed to execute dry-run:\n%s' % e.output) | ||
88 | return 1 | ||
89 | |||
90 | if unexpected: | ||
91 | print('ERROR: Unexpected tasks or setscene left over to be executed:') | ||
92 | for line in unexpected: | ||
93 | print(' ' + line) | ||
94 | return 1 | ||
95 | |||
96 | if __name__ == "__main__": | 46 | if __name__ == "__main__": |
97 | try: | 47 | try: |
98 | ret = main() | 48 | ret = main() |