diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-16 19:35:34 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-12-16 19:35:34 +0200 |
commit | 83c12edde9b37f46680209123cf301442706a7e7 (patch) | |
tree | acf22ad23ecca33f842893fc161193220ef96a48 /mesonbuild | |
parent | c208e81e1a47b54a1efb536e164b06275ddd7cd9 (diff) | |
download | meson-endmessage.zip meson-endmessage.tar.gz meson-endmessage.tar.bz2 |
Add end_message to print status messages on successfull exit.endmessage
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/build.py | 7 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 12 | ||||
-rw-r--r-- | mesonbuild/msetup.py | 23 |
3 files changed, 42 insertions, 0 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 1fcbc04..29d4e16 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -141,6 +141,7 @@ class Build: self.test_setup_default_name = None self.find_overrides = {} self.searched_programs = set() # The list of all programs that have been searched for. + self.end_messages = {} def copy(self): other = Build(self.environment) @@ -220,6 +221,12 @@ class Build: return link_args.get(compiler.get_language(), []) + def add_end_message(self, subproject, message): + assert(isinstance(message, list)) + if subproject not in self.end_messages: + self.end_messages[subproject] = [] + self.end_messages[subproject].append(message) + class IncludeDirs: def __init__(self, curdir, dirs, is_system, extra_build_dirs=None): self.curdir = curdir diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 4f09c0f..822d844 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -1982,6 +1982,7 @@ class Interpreter(InterpreterBase): 'declare_dependency': self.func_declare_dependency, 'dependency': self.func_dependency, 'disabler': self.func_disabler, + 'end_message': self.func_end_message, 'environment': self.func_environment, 'error': self.func_error, 'executable': self.func_executable, @@ -2606,6 +2607,17 @@ external dependencies (including libraries) must go to "dependencies".''') argstr = self.get_message_string_arg(node) mlog.log(mlog.bold('Message:'), argstr) + @stringArgs + @noKwargs + @FeatureNew('end_message', '0.50.0') + def func_end_message(self, node, args, kwargs): + if len(args) == 0 or len(args) > 2: + raise InvalidArguments('End_message takes exacly one or two arguments.') + if '\n' in ' '.join(args): + raise InvalidArguments('The argument strings may not contain linefeeds.') + self.build.add_end_message(self.subproject, args) + pass + @FeatureNew('warning', '0.44.0') @noKwargs def func_warning(self, node, args, kwargs): diff --git a/mesonbuild/msetup.py b/mesonbuild/msetup.py index f9a5e1c..c594a39 100644 --- a/mesonbuild/msetup.py +++ b/mesonbuild/msetup.py @@ -139,6 +139,28 @@ class MesonApp: (env.coredata.pkgconf_envvar, curvar)) env.coredata.pkgconf_envvar = curvar + def print_messagelist(self, project_name, messages): + max_length = max([len(x[0]) for x in messages]) + mlog.log(mlog.bold('\n' + project_name + '\n')) + for m in messages: + if len(m) == 1: + mlog.log(m[0]) + else: + padding = ' '*(max_length - len(m[0]) + 2) + mlog.log(m[0] + padding, mlog.bold(m[1])) + + def print_end_messages(self, end_messages): + if len(end_messages) == 0: + return + mlog.log(mlog.bold('\nProject status messages')) + all_projects = end_messages.keys() + for p in sorted(all_projects): + if p == '': + continue + self.print_messagelist(p, end_messages[p]) + if '' in end_messages: + self.print_messagelist('Main project', end_messages['']) + def generate(self): env = environment.Environment(self.source_dir, self.build_dir, self.options) mlog.initialize(env.get_log_dir(), self.options.fatal_warnings) @@ -202,6 +224,7 @@ class MesonApp: coredata.write_cmd_line_file(self.build_dir, self.options) else: coredata.update_cmd_line_file(self.build_dir, self.options) + self.print_end_messages(b.end_messages) except: if 'cdf' in locals(): old_cdf = cdf + '.prev' |