aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ciimage/Dockerfile2
-rw-r--r--docs/markdown/snippets/altered-logging.md5
-rw-r--r--mesonbuild/backend/ninjabackend.py29
-rw-r--r--mesonbuild/build.py4
-rw-r--r--mesonbuild/dependencies/boost.py2
-rw-r--r--mesonbuild/interpreter.py9
-rw-r--r--mesonbuild/mconf.py5
-rw-r--r--mesonbuild/mesonmain.py14
-rw-r--r--mesonbuild/mlog.py29
-rw-r--r--mesonbuild/rewriter.py6
-rw-r--r--test cases/frameworks/14 doxygen/include/comedian.h2
-rw-r--r--test cases/frameworks/14 doxygen/include/spede.h7
-rw-r--r--test cases/frameworks/14 doxygen/meson.build6
-rw-r--r--test cases/frameworks/14 doxygen/src/spede.cpp2
14 files changed, 85 insertions, 37 deletions
diff --git a/ciimage/Dockerfile b/ciimage/Dockerfile
index 05e679e..72788c3 100644
--- a/ciimage/Dockerfile
+++ b/ciimage/Dockerfile
@@ -14,3 +14,5 @@ RUN apt-get -y update && apt-get -y upgrade \
&& apt-get -y install libwmf-dev \
&& apt-get -y install qt4-linguist-tools qttools5-dev-tools \
&& python3 -m pip install hotdoc codecov
+
+ENV LANG='C.UTF-8'
diff --git a/docs/markdown/snippets/altered-logging.md b/docs/markdown/snippets/altered-logging.md
new file mode 100644
index 0000000..4ff9bb0
--- /dev/null
+++ b/docs/markdown/snippets/altered-logging.md
@@ -0,0 +1,5 @@
+## Log output slightly changed
+
+The format of some human-readable diagnostic messages has changed in
+minor ways. In case you are parsing these messages, you may need to
+adjust your code.
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 376d32c..c13720f 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -655,11 +655,30 @@ int dummy;
# Alias that runs the target defined above
self.create_target_alias('meson-coverage-html', outfile)
elem = NinjaBuildElement(self.all_outputs, os.path.join(htmloutdir, 'index.html'), 'CUSTOM_COMMAND', '')
- command = [lcov_exe, '--directory', self.environment.get_build_dir(),
- '--capture', '--output-file', covinfo, '--no-checksum',
- '&&', genhtml_exe, '--prefix', self.environment.get_build_dir(),
- '--output-directory', htmloutdir, '--title', 'Code coverage',
- '--legend', '--show-details', covinfo]
+
+ subproject_dir = self.build.get_subproject_dir()
+ command = [lcov_exe,
+ '--directory', self.environment.get_build_dir(),
+ '--capture',
+ '--output-file', covinfo,
+ '--no-checksum',
+ '&&', lcov_exe,
+ '--extract',
+ covinfo,
+ os.path.join(self.environment.get_source_dir(), '*'),
+ '--output-file', covinfo,
+ '&&', lcov_exe,
+ '--remove',
+ covinfo,
+ os.path.join(self.environment.get_source_dir(), subproject_dir, '*'),
+ '--output-file', covinfo,
+ '&&', genhtml_exe,
+ '--prefix', self.environment.get_build_dir(),
+ '--output-directory', htmloutdir,
+ '--title', 'Code coverage',
+ '--legend',
+ '--show-details',
+ covinfo]
elem.add_item('COMMAND', command)
elem.add_item('DESC', 'Generating HTML coverage report.')
elem.write(outfile)
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index d162e60..f4a5e2c 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -114,6 +114,7 @@ class Build:
self.static_linker = None
self.static_cross_linker = None
self.subprojects = {}
+ self.subproject_dir = ''
self.install_scripts = []
self.postconf_scripts = []
self.install_dirs = []
@@ -139,6 +140,9 @@ class Build:
def get_project(self):
return self.projects['']
+ def get_subproject_dir(self):
+ return self.subproject_dir
+
def get_targets(self):
return self.targets
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index 03cc7b8..a17fb58 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -167,7 +167,7 @@ class BoostDependency(ExternalDependency):
invalid_modules = [x for x in invalid_modules if x not in remove]
if invalid_modules:
- mlog.log(mlog.red('ERROR:'), 'Invalid Boost modules: ' + ', '.join(invalid_modules))
+ mlog.error('Invalid Boost modules: ' + ', '.join(invalid_modules))
return True
else:
return False
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 90000d5..1819db4 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1771,6 +1771,12 @@ external dependencies (including libraries) must go to "dependencies".''')
try:
resolved = r.resolve(dirname)
except RuntimeError as e:
+ # if the reason subproject execution failed was because
+ # the directory doesn't exist, try to give some helpful
+ # advice if it's a nested subproject that needs
+ # promotion...
+ self.print_nested_info(dirname)
+
msg = 'Subproject directory {!r} does not exist and cannot be downloaded:\n{}'
raise InterpreterException(msg.format(os.path.join(self.subproject_dir, dirname), e))
subdir = os.path.join(self.subproject_dir, resolved)
@@ -1945,6 +1951,8 @@ to directly access options of other subprojects.''')
raise InterpreterException('Subproject_dir must not contain a ".." segment.')
self.subproject_dir = spdirname
+ self.build.subproject_dir = self.subproject_dir
+
if 'meson_version' in kwargs:
cv = coredata.version
pv = kwargs['meson_version']
@@ -2328,7 +2336,6 @@ to directly access options of other subprojects.''')
# we won't actually read all the build files.
return fallback_dep
if not dep:
- self.print_nested_info(name)
assert(exception is not None)
raise exception
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index db109b7..b409615 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -249,9 +249,8 @@ def run(args):
if save:
c.save()
except ConfException as e:
- print('Meson configurator encountered an error:\n')
- print(e)
- return 1
+ print('Meson configurator encountered an error:')
+ raise e
return 0
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index 69b4e31..9c4498c 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -304,7 +304,7 @@ def run(original_args, mainfile=None):
try:
return mconf.run(remaining_args)
except MesonException as e:
- mlog.log(mlog.red('\nError configuring project:'), e)
+ mlog.exception(e)
sys.exit(1)
elif cmd_name == 'wrap':
return wraptool.run(remaining_args)
@@ -324,8 +324,8 @@ def run(original_args, mainfile=None):
try:
sys.exit(run_script_command(args[1:]))
except MesonException as e:
- mlog.log(mlog.red('\nError in {} helper script:'.format(script)))
- mlog.log(e)
+ mlog.error('\nError in {} helper script:'.format(script))
+ mlog.exception(e)
sys.exit(1)
args = args[2:]
handshake = True
@@ -368,13 +368,7 @@ def run(original_args, mainfile=None):
app.generate()
except Exception as e:
if isinstance(e, MesonException):
- mlog.log()
- if hasattr(e, 'file') and hasattr(e, 'lineno') and hasattr(e, 'colno'):
- mlog.log('%s:%d:%d:' % (e.file, e.lineno, e.colno), mlog.red('ERROR: '), end='')
- else:
- mlog.log(mlog.red('ERROR: '), end='')
- # Error message
- mlog.log(e)
+ mlog.exception(e)
# Path to log file
mlog.shutdown()
logfile = os.path.join(app.build_dir, environment.Environment.log_dir, mlog.log_fname)
diff --git a/mesonbuild/mlog.py b/mesonbuild/mlog.py
index 3c34b85..347cede 100644
--- a/mesonbuild/mlog.py
+++ b/mesonbuild/mlog.py
@@ -102,19 +102,38 @@ def log(*args, **kwargs):
arr = process_markup(args, True)
force_print(*arr, **kwargs)
-def warning(*args, **kwargs):
+def _log_error(severity, *args, **kwargs):
from . import environment
-
- args = (yellow('WARNING:'),) + args
+ if severity == 'warning':
+ args = (yellow('WARNING:'),) + args
+ elif severity == 'error':
+ args = (red('ERROR:'),) + args
+ else:
+ assert False, 'Invalid severity ' + severity
if 'location' in kwargs:
location = kwargs['location']
del kwargs['location']
- location = '{}:{}:'.format(os.path.join(location.subdir, environment.build_filename), location.lineno)
- args = (location,) + args
+ location_str = '{}:{}:'.format(os.path.join(location.subdir,
+ environment.build_filename),
+ location.lineno)
+ args = (location_str,) + args
log(*args, **kwargs)
+def error(*args, **kwargs):
+ return _log_error('error', *args, **kwargs)
+
+def warning(*args, **kwargs):
+ return _log_error('warning', *args, **kwargs)
+
+def exception(e):
+ log()
+ if hasattr(e, 'file') and hasattr(e, 'lineno') and hasattr(e, 'colno'):
+ log('%s:%d:%d:' % (e.file, e.lineno, e.colno), red('ERROR: '), e)
+ else:
+ log(red('ERROR:'), e)
+
# Format a list for logging purposes as a string. It separates
# all but the last item with commas, and the last with 'and'.
def format_list(list):
diff --git a/mesonbuild/rewriter.py b/mesonbuild/rewriter.py
index 0191c30..fad7ba0 100644
--- a/mesonbuild/rewriter.py
+++ b/mesonbuild/rewriter.py
@@ -54,11 +54,7 @@ def run(args):
sys.exit('Unknown command: ' + options.commands[0])
except Exception as e:
if isinstance(e, MesonException):
- if hasattr(e, 'file') and hasattr(e, 'lineno') and hasattr(e, 'colno'):
- mlog.log(mlog.red('\nMeson encountered an error in file %s, line %d, column %d:' % (e.file, e.lineno, e.colno)))
- else:
- mlog.log(mlog.red('\nMeson encountered an error:'))
- mlog.log(e)
+ mlog.exception(e)
else:
traceback.print_exc()
return 1
diff --git a/test cases/frameworks/14 doxygen/include/comedian.h b/test cases/frameworks/14 doxygen/include/comedian.h
index 97b5086..d62b283 100644
--- a/test cases/frameworks/14 doxygen/include/comedian.h
+++ b/test cases/frameworks/14 doxygen/include/comedian.h
@@ -11,7 +11,7 @@ namespace Comedy {
* Do the thing people want to happen.
*/
virtual void tell_joke() = 0;
- virtual ~Comedian();
+ virtual ~Comedian(){};
};
}
diff --git a/test cases/frameworks/14 doxygen/include/spede.h b/test cases/frameworks/14 doxygen/include/spede.h
index 8175465..380708a 100644
--- a/test cases/frameworks/14 doxygen/include/spede.h
+++ b/test cases/frameworks/14 doxygen/include/spede.h
@@ -29,10 +29,7 @@ namespace Comedy {
throw std::runtime_error("Not implemented");
}
+ private:
+ int num_movies; ///< How many movies has he done.
};
-
-
-private:
-
- int num_movies; ///< How many movies has he done.
}
diff --git a/test cases/frameworks/14 doxygen/meson.build b/test cases/frameworks/14 doxygen/meson.build
index 55df316..023aa0e 100644
--- a/test cases/frameworks/14 doxygen/meson.build
+++ b/test cases/frameworks/14 doxygen/meson.build
@@ -1,5 +1,11 @@
project('doxygen test', 'cpp', version : '0.1.0')
+spede_inc = include_directories('include')
+
+spede_src = [ 'src/spede.cpp' ]
+
+spede_lib = library('spede', spede_src, include_directories: spede_inc)
+
doxygen = find_program('doxygen', required : false)
if not doxygen.found()
error('MESON_SKIP_TEST doxygen not found.')
diff --git a/test cases/frameworks/14 doxygen/src/spede.cpp b/test cases/frameworks/14 doxygen/src/spede.cpp
index 31c8fb2..d382902 100644
--- a/test cases/frameworks/14 doxygen/src/spede.cpp
+++ b/test cases/frameworks/14 doxygen/src/spede.cpp
@@ -42,7 +42,7 @@ int gesticulate(int force) {
Spede::Spede() : num_movies(100) {
}
-Spede::slap_forehead() {
+void Spede::slap_forehead() {
gesticulate(42);
}