integrate C/LDFLAGS into LunaBuild flow
[lunaix-os.git] / lunaix-os / scripts / build-tools / lbuild / common.py
1 from lib.utils import join_path
2 import os
3
4 class BuildEnvironment:
5     def __init__(self, workspace_dir, generator) -> None:
6         self.__config_provider = None
7         self.__sources = []
8         self.__headers = []
9         self.__inc_dir = []
10         self.__ws_dir = workspace_dir
11         self.__ext_object = {}
12         self.__ext_function = {}
13         self.__generator = generator
14
15     def set_config_provider(self, provider):
16         self.__config_provider = provider
17     
18     def config_provider(self):
19         return self.__config_provider
20     
21     def add_sources(self, sources):
22         self.__sources += sources
23
24     def add_headers(self, sources):
25         for h in sources:
26             if not os.path.isdir(h):
27                 self.__headers.append(h)
28             else:
29                 self.__inc_dir.append(h)
30
31     def to_wspath(self, file):
32         path = join_path(self.__ws_dir, file)
33         return os.path.relpath(path, self.__ws_dir)
34     
35     def export(self):
36         self.__generator.generate(self)
37
38     def get_object(self, key, _default=None):
39         return _default if key not in self.__ext_object else self.__ext_object[key]
40
41     def set_object(self, key, object):
42         self.__ext_object[key] = object
43
44     def srcs(self):
45         return list(self.__sources)
46     
47     def headers(self):
48         return list(self.__headers)
49     
50     def includes(self):
51         return list(self.__inc_dir)
52     
53     def add_external_func(self, function):
54         name = function.__name__
55         invk = lambda *args, **kwargs: function(self, *args, **kwargs)
56         self.__ext_function[name] = invk
57
58     def external_func_table(self):
59         return self.__ext_function