2 from argparse import ArgumentParser
3 from pathlib import Path
5 from lbuild.build import BuildEnvironment
6 from lbuild.scope import ScopeProvider
7 from lcfg2.builder import NodeBuilder
8 from lcfg2.config import ConfigEnvironment
10 from shared.export import ExportJsonFile
11 from shared.export import ExportHeaderFile
12 from shared.export import ExportMakefileRules
13 from shared.export import restore_config_value
14 from shared.scopes import ConfigScope
15 from shared.build_gen import BuildScriptGenerator
16 from shared.shconfig import shconfig
19 def __init__(self, options):
20 self.__lbuilder = BuildEnvironment()
21 self.__lconfig = ConfigEnvironment()
24 scope = ConfigScope(self.__lconfig)
25 self.__lbuilder.register_scope(scope)
27 scope = ScopeProvider("src")
28 scope.file_subscope("c")
29 scope.file_subscope("h")
30 self.__lbuilder.register_scope(scope)
32 scope = ScopeProvider("flag")
35 self.__lbuilder.register_scope(scope)
37 self.__json = ExportJsonFile(self.__lconfig)
38 self.__make = ExportMakefileRules(self.__lconfig)
39 self.__headr = ExportHeaderFile(self.__lconfig)
40 self.__build = BuildScriptGenerator(self.__lbuilder)
43 file = self.__opt.lconfig
44 NodeBuilder.build(self.__lconfig, file)
46 file = self.__opt.lbuild
47 self.__lbuilder.load(file)
49 self.__lconfig.refresh()
50 self.__lbuilder.update()
53 save = self.__opt.save
54 if not Path(save).exists():
57 restore_config_value(self.__lconfig, save)
61 save = self.__opt.save
62 self.__json.export(save)
66 outdir = Path(self.__opt.export_dir)
67 if not outdir.exists():
70 if self.__opt.gen_build:
71 self.__build.generate(outdir / "build.mkinc")
73 if self.__opt.gen_config:
74 self.__make.export(outdir / "config.mkinc")
75 self.__headr.export(outdir / "config.h")
77 def visual_config(self):
78 if not shconfig(self.__lconfig):
79 print("configuration process aborted")
83 parser = ArgumentParser()
84 parser.add_argument("--lconfig", default="LConfig")
85 parser.add_argument("--lbuild", default="LBuild")
86 parser.add_argument("--save", default=".config.json")
87 parser.add_argument("--gen-build", action="store_true", default=False)
88 parser.add_argument("--gen-config", action="store_true", default=False)
89 parser.add_argument("export_dir")
91 opts = parser.parse_args()
92 builder = LunaBuild(opts)
97 builder.visual_config()
103 if __name__ == "__main__":