aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-03-25 20:26:02 +0300
committerGitHub <noreply@github.com>2018-03-25 20:26:02 +0300
commitf6f07840388db4aa5800ac4b69211c8b2cb87a70 (patch)
tree61b4217ad03893063fb1ecdd32eb8230aa642185
parent979eaa804aaced2823f446242eaecd043d33521a (diff)
parentea6e9298fa585244112e4519513690c52959039e (diff)
downloadmeson-f6f07840388db4aa5800ac4b69211c8b2cb87a70.zip
meson-f6f07840388db4aa5800ac4b69211c8b2cb87a70.tar.gz
meson-f6f07840388db4aa5800ac4b69211c8b2cb87a70.tar.bz2
Merge pull request #2976 from dzabraev/fix-reversed-order
Fix bug include_directories(['p1','p2']) add -Ip2 -Ip1 (reversed order)
-rw-r--r--mesonbuild/backend/ninjabackend.py5
-rw-r--r--mesonbuild/backend/vs2010backend.py3
-rw-r--r--test cases/common/138 include order/inc1/hdr.h1
-rw-r--r--test cases/common/138 include order/inc2/hdr.h1
-rw-r--r--test cases/common/138 include order/meson.build4
-rw-r--r--test cases/common/138 include order/ordertest.c11
6 files changed, 23 insertions, 2 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 39e4ce9..bfac4c7 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2169,7 +2169,10 @@ rule FORTRAN_DEP_HACK
# Hence, we must reverse the list so that the order is preserved.
for i in reversed(target.get_include_dirs()):
basedir = i.get_curdir()
- for d in i.get_incdirs():
+ # We should iterate include dirs in reversed orders because
+ # -Ipath will add to begin of array. And without reverse
+ # flags will be added in reversed order.
+ for d in reversed(i.get_incdirs()):
# Avoid superfluous '/.' at the end of paths when d is '.'
if d not in ('', '.'):
expdir = os.path.join(basedir, d)
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 28e6722..5e972f2 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -769,7 +769,8 @@ class Vs2010Backend(backends.Backend):
# These are per-target, but we still add them as per-file because we
# need them to be looked in first.
for d in reversed(target.get_include_dirs()):
- for i in d.get_incdirs():
+ # reversed is used to keep order of includes
+ for i in reversed(d.get_incdirs()):
curdir = os.path.join(d.get_curdir(), i)
args.append('-I' + self.relpath(curdir, target.subdir)) # build dir
args.append('-I' + os.path.join(proj_to_src_root, curdir)) # src dir
diff --git a/test cases/common/138 include order/inc1/hdr.h b/test cases/common/138 include order/inc1/hdr.h
new file mode 100644
index 0000000..9d755a8
--- /dev/null
+++ b/test cases/common/138 include order/inc1/hdr.h
@@ -0,0 +1 @@
+#define SOME_DEFINE 42
diff --git a/test cases/common/138 include order/inc2/hdr.h b/test cases/common/138 include order/inc2/hdr.h
new file mode 100644
index 0000000..2ebcaca
--- /dev/null
+++ b/test cases/common/138 include order/inc2/hdr.h
@@ -0,0 +1 @@
+#undef SOME_DEFINE
diff --git a/test cases/common/138 include order/meson.build b/test cases/common/138 include order/meson.build
index c370bb1..9f275b8 100644
--- a/test cases/common/138 include order/meson.build
+++ b/test cases/common/138 include order/meson.build
@@ -30,3 +30,7 @@ f = executable('somefxe', 'sub4/main.c',
test('eh', e)
test('oh', f)
+
+# Test that the order in include_directories() is maintained
+incs = include_directories('inc1', 'inc2')
+executable('ordertest', 'ordertest.c', include_directories: incs)
diff --git a/test cases/common/138 include order/ordertest.c b/test cases/common/138 include order/ordertest.c
new file mode 100644
index 0000000..0d9173f
--- /dev/null
+++ b/test cases/common/138 include order/ordertest.c
@@ -0,0 +1,11 @@
+#include "hdr.h"
+
+#if !defined(SOME_DEFINE) || SOME_DEFINE != 42
+#error "Should have picked up hdr.h from inc1/hdr.h"
+#endif
+
+int
+main (int c, char ** argv)
+{
+ return 0;
+}