123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #
- # Copyright OpenEmbedded Contributors
- #
- # SPDX-License-Identifier: GPL-2.0-only
- #
- import logging
- import os
- import sys
- from bblayers.common import LayerPlugin
- logger = logging.getLogger('bitbake-layers')
- sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
- import oe.buildcfg
- def plugin_init(plugins):
- return BuildConfPlugin()
- class BuildConfPlugin(LayerPlugin):
- notes_fixme = """FIXME: Please place here the detailed instructions for using this build configuration.
- They will be shown to the users when they set up their builds via TEMPLATECONF.
- """
- summary_fixme = """FIXME: Please place here the short summary of what this build configuration is for.
- It will be shown to the users when they set up their builds via TEMPLATECONF.
- """
- def _save_conf(self, templatename, templatepath, oecorepath, relpaths_to_oecore):
- confdir = os.path.join(os.environ["BBPATH"], "conf")
- destdir = os.path.join(templatepath, "conf", "templates", templatename)
- os.makedirs(destdir, exist_ok=True)
- with open(os.path.join(confdir, "local.conf")) as src:
- with open(os.path.join(destdir, "local.conf.sample"), 'w') as dest:
- dest.write(src.read())
- with open(os.path.join(confdir, "bblayers.conf")) as src:
- with open(os.path.join(destdir, "bblayers.conf.sample"), 'w') as dest:
- bblayers_data = src.read()
- for (abspath, relpath) in relpaths_to_oecore:
- bblayers_data = bblayers_data.replace(abspath, "##OEROOT##/" + relpath)
- dest.write(bblayers_data)
- with open(os.path.join(destdir, "conf-summary.txt"), 'w') as dest:
- dest.write(self.summary_fixme)
- with open(os.path.join(destdir, "conf-notes.txt"), 'w') as dest:
- dest.write(self.notes_fixme)
- logger.info("""Configuration template placed into {}
- Please review the files in there, and particularly provide a configuration summary in {}
- and notes in {}
- You can try out the configuration with
- TEMPLATECONF={} . {}/oe-init-build-env build-try-{}"""
- .format(destdir, os.path.join(destdir, "conf-summary.txt"), os.path.join(destdir, "conf-notes.txt"), destdir, oecorepath, templatename))
- def do_save_build_conf(self, args):
- """ Save the currently active build configuration (conf/local.conf, conf/bblayers.conf) as a template into a layer.\n This template can later be used for setting up builds via TEMPLATECONF. """
- layers = oe.buildcfg.get_layer_revisions(self.tinfoil.config_data)
- targetlayer = None
- oecore = None
- for l in layers:
- if os.path.abspath(l[0]) == os.path.abspath(args.layerpath):
- targetlayer = l[0]
- if l[1] == 'meta':
- oecore = os.path.dirname(l[0])
- if not targetlayer:
- logger.error("Layer {} not in one of the currently enabled layers:\n{}".format(args.layerpath, "\n".join([l[0] for l in layers])))
- elif not oecore:
- logger.error("Openembedded-core not in one of the currently enabled layers:\n{}".format("\n".join([l[0] for l in layers])))
- else:
- relpaths_to_oecore = [(l[0], os.path.relpath(l[0], start=oecore)) for l in layers]
- self._save_conf(args.templatename, targetlayer, oecore, relpaths_to_oecore)
- def register_commands(self, sp):
- parser_build_conf = self.add_command(sp, 'save-build-conf', self.do_save_build_conf, parserecipes=False)
- parser_build_conf.add_argument('layerpath',
- help='The path to the layer where the configuration template should be saved.')
- parser_build_conf.add_argument('templatename',
- help='The name of the configuration template.')
|