aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-12-16 19:35:34 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-12-16 19:35:34 +0200
commit83c12edde9b37f46680209123cf301442706a7e7 (patch)
treeacf22ad23ecca33f842893fc161193220ef96a48 /mesonbuild
parentc208e81e1a47b54a1efb536e164b06275ddd7cd9 (diff)
downloadmeson-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.py7
-rw-r--r--mesonbuild/interpreter.py12
-rw-r--r--mesonbuild/msetup.py23
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'