aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.mailmap4
-rw-r--r--data/macros.meson48
-rw-r--r--mesonbuild/backend/ninjabackend.py11
-rw-r--r--mesonbuild/compilers.py4
-rw-r--r--mesonbuild/mintro.py13
-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
8 files changed, 73 insertions, 29 deletions
diff --git a/.mailmap b/.mailmap
index 017ffa0..8298afb 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,6 +1,10 @@
+Alexandre Foley <Alexandre.foley@usherbrooke.ca> AlexandreFoley <alexandre.foley@usherbrooke.ca>
Igor Gnatenko <i.gnatenko.brain@gmail.com> Igor Gnatenko <ignatenko@redhat.com>
Jussi Pakkanen <jpakkane@gmail.com> Jussi Pakkanen <jpakkane@brash.local>
Jussi Pakkanen <jpakkane@gmail.com> jpakkane <jpakkane@gmail.com>
Nirbheek Chauhan <nirbheek@centricular.com> Nirbheek Chauhan <nirbheek.chauhan@gmail.com>
Nicolas Schneider <nioncode+git@gmail.com> Nicolas Schneider <nioncode+github@gmail.com>
+Patrick Griffis <tingping@tingping.se> TingPing <tingping@tingping.se>
+Thibault Saunier <thibault.saunier@osg.samsung.com> Thibault Saunier <saunierthibault@gmail.com>
+Thibault Saunier <thibault.saunier@osg.samsung.com> Saunier Thibault <saunierthibault@gmail.com>
Tim-Philipp Müller <tim@centricular.com> Tim-Philipp Müller <tim@centricular.net>
diff --git a/data/macros.meson b/data/macros.meson
index 97d8a23..6d9fd59 100644
--- a/data/macros.meson
+++ b/data/macros.meson
@@ -1,35 +1,31 @@
%__meson %{_bindir}/meson
-%__sourcedir .
-%__builddir %{_target_platform}
%meson \
- export CFLAGS="%{optflags}" \
- export CXXFLAGS="%{optflags}" \
- export FFLAGS="%{optflags} -I%{_fmoddir}" \
- export FCFLAGS="%{optflags} -I%{_fmoddir}" \
- export LDFLAGS="%{?__global_ldflags}" \
- mkdir -p %{__builddir} \
- pushd %{__builddir} \
- %{__meson} \\\
- --buildtype=plain \\\
- --prefix=%{_prefix} \\\
- --libdir=%{_libdir} \\\
- --libexecdir=%{_libexecdir} \\\
- --bindir=%{_bindir} \\\
- --includedir=%{_includedir} \\\
- --datadir=%{_datadir} \\\
- --mandir=%{_mandir} \\\
- --localedir=%{_datadir}/locale \\\
- --sysconfdir=%{_sysconfdir} \\\
- --localstatedir=%{_localstatedir} \\\
- $OLDPWD/%{__sourcedir} \
- popd
+ export CFLAGS="${CFLAGS:-%__global_cflags}" \
+ export CXXFLAGS="${CXXFLAGS:-%__global_cxxflags}" \
+ export FFLAGS="${FFLAGS:-%__global_fflags}" \
+ export FCFLAGS="${FCFLAGS:-%__global_fcflags}" \
+ export LDFLAGS="${LDFLAGS:-%__global_ldflags}" \
+ %{__meson} \\\
+ --buildtype=plain \\\
+ --prefix=%{_prefix} \\\
+ --libdir=%{_libdir} \\\
+ --libexecdir=%{_libexecdir} \\\
+ --bindir=%{_bindir} \\\
+ --includedir=%{_includedir} \\\
+ --datadir=%{_datadir} \\\
+ --mandir=%{_mandir} \\\
+ --localedir=%{_datadir}/locale \\\
+ --sysconfdir=%{_sysconfdir} \\\
+ --localstatedir=%{_localstatedir} \\\
+ %{_vpath_srcdir} %{_vpath_builddir} \\\
+ %{nil}
%meson_build \
- %ninja_build -C %{__builddir}
+ %ninja_build -C %{_vpath_builddir}
%meson_install \
- %ninja_install -C %{__builddir}
+ %ninja_install -C %{_vpath_builddir}
%meson_test \
- %ninja_test -C %{__builddir}
+ %ninja_test -C %{_vpath_builddir}
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index ec46933..332450f 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1784,7 +1784,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/mesonbuild/mintro.py b/mesonbuild/mintro.py
index f902d3d..3f1d209 100644
--- a/mesonbuild/mintro.py
+++ b/mesonbuild/mintro.py
@@ -27,6 +27,8 @@ import sys, os
parser = argparse.ArgumentParser()
parser.add_argument('--targets', action='store_true', dest='list_targets', default=False,
help='List top level targets.')
+parser.add_argument('--installed', action='store_true', dest='list_installed', default=False,
+ help='List all installed files and directories.')
parser.add_argument('--target-files', action='store', dest='target_files', default=None,
help='List source files for a given target.')
parser.add_argument('--buildsystem-files', action='store_true', dest='buildsystem_files', default=False,
@@ -56,6 +58,15 @@ def determine_installed_path(target, installdata):
outname = os.path.join(installdata.prefix, outdir, os.path.split(fname)[-1])
return outname
+
+def list_installed(installdata):
+ res = {}
+ for path, installpath in installdata.data:
+ res[path] = os.path.join(installdata.prefix, installpath)
+
+ print(json.dumps(res))
+
+
def list_targets(coredata, builddata, installdata):
tlist = []
for (idname, target) in builddata.get_targets().items():
@@ -219,6 +230,8 @@ def run(args):
installdata = pickle.load(f)
if options.list_targets:
list_targets(coredata, builddata, installdata)
+ elif options.list_installed:
+ list_installed(installdata)
elif options.target_files is not None:
list_target_files(options.target_files, coredata, builddata)
elif options.buildsystem_files:
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;
+}