from integration.config_io import CHeaderConfigProvider
from integration.lbuild_bridge import LConfigProvider
from integration.render_ishell import InteractiveShell
+from integration.build_gen import MakefileBuildGen, install_lbuild_functions
+from integration.lunamenu import menuconfig, TerminalSizeCheckFailed
import lcfg.types as lcfg_type
import lcfg.builtins as builtin
env.register_builtin_func(builtin.parent)
env.register_builtin_func(builtin.default)
env.register_builtin_func(builtin.include)
+ env.register_builtin_func(builtin.env)
+ env.register_builtin_func(builtin.set_value)
env.type_factory().regitser(lcfg_type.PrimitiveType)
env.type_factory().regitser(lcfg_type.MultipleChoiceType)
return env
-def do_config(lcfg_env):
- shell = InteractiveShell(lcfg_env)
- if not shell.render_loop():
- print("Configuration aborted.")
- exit(-1)
+def do_config(opt, lcfg_env):
+ redo_config = not exists(opt.config_save) or opt.force
+ if not redo_config or opt.quiet:
+ return
- lcfg_env.export()
- lcfg_env.save()
+ try:
+ clean_quit = menuconfig(lcfg_env)
+ except TerminalSizeCheckFailed as e:
+ least = e.args[0]
+ current = e.args[1]
+ print(
+ f"Your terminal size: {current} is less than minimum requirement of {least}.\n"
+ "menuconfig will not function properly, switch to prompt based.\n")
+
+ shell = InteractiveShell(lcfg_env)
+ clean_quit = shell.render_loop()
+
+ if not clean_quit:
+ print("Configuration aborted. Nothing has been saved.")
+ exit(-1)
def do_buildfile_gen(opts, lcfg_env):
root_path = abspath(opts.root)
ws_path = dirname(root_path)
root_name = basename(root_path)
- env = BuildEnvironment(ws_path)
+ mkgen = MakefileBuildGen(opts.out_dir)
+ env = BuildEnvironment(ws_path, mkgen)
+
+ install_lbuild_functions(env)
cfg_provider = LConfigProvider(lcfg_env)
env.set_config_provider(cfg_provider)
print("failed to resolve root build file")
raise err
- env.export(opts.out_dir)
+ env.export()
def main():
parser = ArgumentParser()
parser.add_argument("--config", action="store_true", default=False)
+ parser.add_argument("--quiet", action="store_true", default=False)
parser.add_argument("--lconfig-file", default="LConfig")
+ parser.add_argument("--config-save", default=".config.json")
+ parser.add_argument("--force", action="store_true", default=False)
parser.add_argument("root", nargs="?", default="LBuild")
parser.add_argument("-o", "--out-dir", required=True)
mkdir(out_dir)
lcfg_env = prepare_lconfig_env(out_dir)
- lcfg_env.resolve_module(opts.lconfig_file)
- lcfg_env.update()
- lcfg_env.load()
-
+ require_config = exists(opts.lconfig_file)
+ try:
+ if require_config:
+ lcfg_env.resolve_module(opts.lconfig_file)
+ lcfg_env.update()
+ lcfg_env.load()
+ except Exception as e:
+ print(e)
+
if opts.config:
- do_config(lcfg_env)
- else:
- do_buildfile_gen(opts, lcfg_env)
+ if require_config:
+ do_config(opts, lcfg_env)
+ else:
+ print("No configuration file detected, skipping...")
+
+ lcfg_env.update()
+ lcfg_env.save(opts.config_save)
+ lcfg_env.export()
+
+ do_buildfile_gen(opts, lcfg_env)
if __name__ == "__main__":
main()
\ No newline at end of file