aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-12-11 21:51:38 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-12-13 14:19:34 +0200
commitb01d2c35b7003071fc64c6d2e7d07b7652a8b386 (patch)
tree674816b79fd79d9b57384481c98408700db38d48
parentde83e94b5a9ce0f540814cee40ef3746b6ebb824 (diff)
downloadmeson-b01d2c35b7003071fc64c6d2e7d07b7652a8b386.zip
meson-b01d2c35b7003071fc64c6d2e7d07b7652a8b386.tar.gz
meson-b01d2c35b7003071fc64c6d2e7d07b7652a8b386.tar.bz2
Only add build dir inlude directives if the corresponding dir exists. Closes #1185.
-rw-r--r--mesonbuild/backend/ninjabackend.py11
-rw-r--r--mesonbuild/compilers.py4
-rw-r--r--test cases/common/130 no buildincdir/include/header.h3
-rw-r--r--test cases/common/130 no buildincdir/meson.build14
-rw-r--r--test cases/common/130 no buildincdir/prog.c5
5 files changed, 34 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 3562cf8..acbf4a4 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1778,7 +1778,16 @@ rule FORTRAN_DEP_HACK
for d in i.get_incdirs():
expdir = os.path.join(basedir, d)
srctreedir = os.path.join(self.build_to_src, expdir)
- bargs = compiler.get_include_args(expdir, i.is_system)
+ # There may be include dirs where a build directory has not been
+ # created for some source dir. For example if someone does this:
+ #
+ # inc = include_directories('foo/bar/baz')
+ #
+ # But never subdir()s into the actual dir.
+ if os.path.isdir(os.path.join(self.environment.get_build_dir(), expdir)):
+ bargs = compiler.get_include_args(expdir, i.is_system)
+ else:
+ bargs = []
sargs = compiler.get_include_args(srctreedir, i.is_system)
commands += bargs
commands += sargs
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 93245f3..dcb4b69 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -1975,7 +1975,7 @@ class VisualStudioCCompiler(CCompiler):
# msvc does not have a concept of system header dirs.
return ['-I' + path]
- # Visual Studio is special. It ignores arguments it does not
+ # Visual Studio is special. It ignores some arguments it does not
# understand and you can't tell it to error out on those.
# http://stackoverflow.com/questions/15259720/how-can-i-make-the-microsoft-c-compiler-treat-unknown-flags-as-errors-rather-t
def has_multi_arguments(self, args, env):
@@ -1994,7 +1994,7 @@ class VisualStudioCCompiler(CCompiler):
mlog.debug('Code:\n', code)
p, stdo, stde = Popen_safe(commands, cwd=os.path.split(srcname)[0])
if p.returncode != 0:
- raise MesonException('Compiling test app failed.')
+ return False
return not(warning_text in stde or warning_text in stdo)
def get_compile_debugfile_args(self, rel_obj, pch=False):
diff --git a/test cases/common/130 no buildincdir/include/header.h b/test cases/common/130 no buildincdir/include/header.h
new file mode 100644
index 0000000..add1850
--- /dev/null
+++ b/test cases/common/130 no buildincdir/include/header.h
@@ -0,0 +1,3 @@
+#pragma once
+
+int foobar();
diff --git a/test cases/common/130 no buildincdir/meson.build b/test cases/common/130 no buildincdir/meson.build
new file mode 100644
index 0000000..ac69e8e
--- /dev/null
+++ b/test cases/common/130 no buildincdir/meson.build
@@ -0,0 +1,14 @@
+project('nobuilddir', 'c',
+ default_options : 'werror=true')
+
+cc = meson.get_compiler('c')
+
+incwarg = '-Wmissing-include-dirs'
+
+if cc.has_argument(incwarg)
+ executable('prog', 'prog.c',
+ c_args : incwarg,
+ include_directories : include_directories('include'))
+else
+ error('MESON_SKIP_TEST compiler does not support bad inc dir argument.')
+endif
diff --git a/test cases/common/130 no buildincdir/prog.c b/test cases/common/130 no buildincdir/prog.c
new file mode 100644
index 0000000..800f0d6
--- /dev/null
+++ b/test cases/common/130 no buildincdir/prog.c
@@ -0,0 +1,5 @@
+#include"header.h"
+
+int main(int argc, char **argv) {
+ return 0;
+}