clean up redundant lines
[lunaix-os.git] / lunaix-os / scripts / build-tools / luna_build.py
1 #!/usr/bin/env python 
2 from argparse           import ArgumentParser
3 from pathlib            import Path
4
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
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
17
18 class LunaBuild:
19     def __init__(self, options):
20         self.__lbuilder = BuildEnvironment()
21         self.__lconfig  = ConfigEnvironment()
22         self.__opt = options
23
24         scope = ConfigScope(self.__lconfig)
25         self.__lbuilder.register_scope(scope)
26
27         scope = ScopeProvider("src")
28         scope.file_subscope("c")
29         scope.file_subscope("h")
30         self.__lbuilder.register_scope(scope)
31
32         scope = ScopeProvider("flag")
33         scope.subscope("cc")
34         scope.subscope("ld")
35         self.__lbuilder.register_scope(scope)
36
37         self.__json  = ExportJsonFile(self.__lconfig)
38         self.__make  = ExportMakefileRules(self.__lconfig)
39         self.__headr = ExportHeaderFile(self.__lconfig)
40         self.__build = BuildScriptGenerator(self.__lbuilder)
41
42     def load(self):
43         file = self.__opt.lconfig
44         NodeBuilder.build(self.__lconfig, file)
45
46         file = self.__opt.lbuild
47         self.__lbuilder.load(file)
48
49         self.__lconfig.refresh()
50         self.__lbuilder.update()
51     
52     def restore(self):
53         save = self.__opt.save
54         if not Path(save).exists():
55             return False
56
57         restore_config_value(self.__lconfig, save)
58         return True
59
60     def save(self):
61         save = self.__opt.save
62         self.__json.export(save)
63         return True
64     
65     def generate(self):
66         outdir = Path(self.__opt.export_dir)
67         if not outdir.exists():
68             outdir.mkdir()
69
70         if self.__opt.gen_build:
71             self.__build.generate(outdir / "build.mkinc")
72
73         if self.__opt.gen_config:
74             self.__make.export(outdir / "config.mkinc")
75             self.__headr.export(outdir / "config.h")
76
77     def visual_config(self):
78         if not shconfig(self.__lconfig):
79             print("configuration process aborted")
80             exit(1)
81
82 def main():
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")
90
91     opts = parser.parse_args()
92     builder = LunaBuild(opts)
93
94     builder.load()
95     builder.restore()
96     
97     builder.visual_config()
98     
99     builder.save()
100     builder.generate()
101
102
103 if __name__ == "__main__":
104     main()