@@ -280,7 +280,7 @@ def setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_c
logger.plain('New bitbake configuration from upstream is the same as the current one, no need to update it.')
shutil.rmtree(bitbake_confdir)
os.rename(backup_bitbake_confdir, bitbake_confdir)
- return
+ return init_script
logger.plain('Upstream bitbake configuration changes were found:')
logger.plain(conf_diff)
@@ -295,7 +295,7 @@ def setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_c
logger.plain(f'Leaving the upstream configuration in {upstream_bitbake_confdir}')
os.rename(bitbake_confdir, upstream_bitbake_confdir)
os.rename(backup_bitbake_confdir, bitbake_confdir)
- return
+ return init_script
logger.plain('Applying upstream bitbake configuration changes')
logger.plain(f'Leaving the previous configuration in {backup_bitbake_confdir}')
@@ -324,6 +324,8 @@ The bitbake configuration files (local.conf, bblayers.conf and more) can be foun
logger.plain("{}\n".format(fragment_note))
logger.plain("The bitbake configuration files (local.conf, bblayers.conf and more) can be found in\n {}/conf\n".format(bitbake_builddir))
+ return init_script
+
def get_registry_config(registry_path, id):
for root, dirs, files in os.walk(registry_path):
for f in files:
@@ -340,8 +342,9 @@ def update_build(config, confdir, setupdir, layerdir, d, update_bb_conf="prompt"
sources_fixed_revisions = checkout_layers(layer_config, layerdir, d)
bitbake_config = config["bitbake-config"]
thisdir = os.path.dirname(config["path"]) if config["type"] == 'local' else None
- setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_conf)
+ init_script = setup_bitbake_build(bitbake_config, layerdir, setupdir, thisdir, update_bb_conf)
write_sources_fixed_revisions(confdir, sources_fixed_revisions)
+ return init_script
def int_input(allowed_values, prompt=''):
n = None
@@ -511,6 +514,14 @@ def obtain_overrides(args):
return overrides
+def verify_and_prepare_environment(init_script):
+ """
+ Source the build environment init-build-env script.
+
+ This verifies the setup is working.
+ Additionally it may initialize the environment with e.g. a .vscode/settings.json if needed.
+ """
+ bb.process.run(['sh', '-c', '. {}'.format(init_script)])
def init_config(top_dir, settings, args):
create_siteconf(top_dir, args.non_interactive, settings)
@@ -580,9 +591,12 @@ def init_config(top_dir, settings, args):
bb.event.register("bb.build.TaskProgress", handle_task_progress, data=d)
write_upstream_config(confdir, upstream_config)
- update_build(upstream_config, confdir, setupdir, layerdir, d, update_bb_conf="yes")
+ init_script = update_build(upstream_config, confdir, setupdir, layerdir, d, update_bb_conf="yes")
commit_config(confdir)
+ # Source the build environment to verify setup and prepare for VSCode if needed
+ verify_and_prepare_environment(init_script)
+
bb.event.remove("bb.build.TaskProgress", None)
def get_diff(file1, file2):
@@ -649,16 +663,18 @@ def build_status(top_dir, settings, args, d, update=False):
logger.plain('\nConfiguration in {} has changed:\n{}'.format(setupdir, config_diff))
if update:
commit_config(confdir)
- update_build(new_upstream_config, confdir, setupdir, layerdir, d,
+ init_script = update_build(new_upstream_config, confdir, setupdir, layerdir, d,
update_bb_conf=args.update_bb_conf)
+ verify_and_prepare_environment(init_script)
else:
bb.process.run('git -C {} restore config-upstream.json'.format(confdir))
return
if are_layers_changed(current_upstream_config["data"]["sources"], layerdir, d):
if update:
- update_build(current_upstream_config, confdir, setupdir, layerdir,
+ init_script = update_build(current_upstream_config, confdir, setupdir, layerdir,
d, update_bb_conf=args.update_bb_conf)
+ verify_and_prepare_environment(init_script)
return
logger.plain("\nConfiguration in {} has not changed.".format(setupdir))