diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-06-07 23:39:59 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-06-07 23:43:16 +0300 |
commit | 365f529c75a6b55278db2ee5749d26a29a56fa83 (patch) | |
tree | 777f5a526a9f5753c912bcd73a1204715eab3698 /mesonconf.py | |
parent | f88779319d61e316bef8e5b3f9241cf2d80b3e6d (diff) | |
download | meson-365f529c75a6b55278db2ee5749d26a29a56fa83.zip meson-365f529c75a6b55278db2ee5749d26a29a56fa83.tar.gz meson-365f529c75a6b55278db2ee5749d26a29a56fa83.tar.bz2 |
Store build flags into coredata as it is persistent and needs to survive over Meson reconfigurations.
Diffstat (limited to 'mesonconf.py')
-rwxr-xr-x | mesonconf.py | 54 |
1 files changed, 42 insertions, 12 deletions
diff --git a/mesonconf.py b/mesonconf.py index c18906e..f4408ca 100755 --- a/mesonconf.py +++ b/mesonconf.py @@ -47,6 +47,9 @@ class Conf: def save(self): # Only called if something has changed so overwrite unconditionally. pickle.dump(self.coredata, open(self.coredata_file, 'wb')) + # We don't write the build file because any changes to it + # are erased when Meson is executed the nex time, i.e. the next + # time Ninja is run. def print_aligned(self, arr): if len(arr) == 0: @@ -115,9 +118,7 @@ class Conf: if os.path.isabs(v): raise ConfException('Locale dir %s must not be an absolute path.' % v) self.coredata.localedir = v - else: - if k not in self.coredata.user_options: - raise ConfException('Unknown option %s.' % k) + elif k in self.coredata.user_options: tgt = self.coredata.user_options[k] if isinstance(tgt, optinterpreter.UserBooleanOption): tgt.set_value(self.tobool(v)) @@ -131,6 +132,24 @@ class Conf: tgt.set_value(v) else: raise ConfException('Internal error, unknown option type.') + elif k.endswith('linkflags'): + lang = k[:-9] + if not lang in self.coredata.external_link_args: + raise ConfException('Unknown language %s in linkflags.' % lang) + # TODO, currently split on spaces, make it so that user + # can pass in an array string. + newvalue = v.split() + self.coredata.external_link_args[lang] = newvalue + elif k.endswith('flags'): + lang = k[:-5] + if not lang in self.coredata.external_args: + raise ConfException('Unknown language %s in compile flags' % lang) + # TODO same fix as above + newvalue = v.split() + self.coredata.external_args[lang] = newvalue + else: + raise ConfException('Unknown option %s.' % k) + def print_conf(self): print('Core properties\n') @@ -146,6 +165,14 @@ class Conf: carr.append(['unity', 'Unity build', self.coredata.unity]) self.print_aligned(carr) print('') + print('Compiler flags\n') + for (lang, flags) in self.coredata.external_args.items(): + print(lang + 'flags', str(flags)) + print('') + print('Linker flags\n') + for (lang, flags) in self.coredata.external_link_args.items(): + print(lang + 'linkflags', str(flags)) + print('') print('Directories\n') parr = [] parr.append(['installprefix', 'Install prefix', self.coredata.prefix]) @@ -157,15 +184,18 @@ class Conf: parr.append(['localedir', 'Locale file directory', self.coredata.localedir]) self.print_aligned(parr) print('') - print('Project options\n') - options = self.coredata.user_options - keys = list(options.keys()) - keys.sort() - optarr = [] - for key in keys: - opt = options[key] - optarr.append([key, opt.description, opt.value]) - self.print_aligned(optarr) + if len(self.coredata.user_options) == 0: + print('This project does not have any options') + else: + print('Project options\n') + options = self.coredata.user_options + keys = list(options.keys()) + keys.sort() + optarr = [] + for key in keys: + opt = options[key] + optarr.append([key, opt.description, opt.value]) + self.print_aligned(optarr) if __name__ == '__main__': (options, args) = parser.parse_args(sys.argv) |