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
9 from lcfg2.common import ConfigNodeError
11 from shared.export import ExportJsonFile
12 from shared.export import ExportHeaderFile
13 from shared.export import ExportMakefileRules
14 from shared.export import restore_config_value
15 from shared.scopes import ConfigScope
16 from shared.build_gen import BuildScriptGenerator
17 from shared.shconfig import shconfig
20 def __init__(self, options):
21 self.__lbuilder = BuildEnvironment()
22 self.__lconfig = ConfigEnvironment()
25 scope = ConfigScope(self.__lconfig)
26 self.__lbuilder.register_scope(scope)
28 scope = ScopeProvider("src")
29 scope.file_subscope("c")
30 scope.file_subscope("h")
31 self.__lbuilder.register_scope(scope)
33 scope = ScopeProvider("flag")
36 self.__lbuilder.register_scope(scope)
38 self.__json = ExportJsonFile(self.__lconfig)
39 self.__make = ExportMakefileRules(self.__lconfig)
40 self.__headr = ExportHeaderFile(self.__lconfig)
41 self.__build = BuildScriptGenerator(self.__lbuilder)
44 file = self.__opt.lconfig
45 NodeBuilder.build(self.__lconfig, file)
47 file = self.__opt.lbuild
48 self.__lbuilder.load(file)
50 self.__lconfig.refresh()
51 self.__lbuilder.update()
54 save = self.__opt.save
55 if not Path(save).exists():
58 restore_config_value(self.__lconfig, save)
62 save = self.__opt.save
63 self.__json.export(save)
67 outdir = Path(self.__opt.export_dir)
68 if not outdir.exists():
71 if self.__opt.gen_build:
72 self.__build.generate(outdir / "build.mkinc")
74 if self.__opt.gen_config:
75 self.__make.export(outdir / "config.mkinc")
76 self.__headr.export(outdir / "config.h")
78 def visual_config(self):
79 if not shconfig(self.__lconfig):
80 print("configuration process aborted")
84 parser = ArgumentParser()
85 parser.add_argument("--lconfig", default="LConfig")
86 parser.add_argument("--lbuild", default="LBuild")
87 parser.add_argument("--save", default=".config.json")
88 parser.add_argument("--gen-build", action="store_true", default=False)
89 parser.add_argument("--gen-config", action="store_true", default=False)
90 parser.add_argument("export_dir")
92 opts = parser.parse_args()
93 builder = LunaBuild(opts)
98 except ConfigNodeError as e:
102 builder.visual_config()
108 if __name__ == "__main__":