aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2021-02-16 18:56:01 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2021-02-16 18:56:01 +0200
commit04587bfaf1b3e098e2725d42ad1df15ffa79ea42 (patch)
tree4d3ebbb1fc689e954b527e65076e0908c9e5e329
parent3ed30cea6ed754fa9f519f15d8e322b8fcc2126b (diff)
downloadmeson-regrfix.zip
meson-regrfix.tar.gz
meson-regrfix.tar.bz2
Non-working fix and test. Closes #8361.regrfix
-rw-r--r--mesonbuild/environment.py13
-rwxr-xr-xrun_unittests.py8
-rw-r--r--test cases/unit/90 multiple envvars/meson.build4
-rw-r--r--test cases/unit/90 multiple envvars/prog.c18
-rw-r--r--test cases/unit/90 multiple envvars/prog.cpp18
5 files changed, 59 insertions, 2 deletions
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index b12728b..7bcdfea 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -823,11 +823,20 @@ class Environment:
for lang in compilers.compilers.LANGUAGES_USING_CPPFLAGS:
key = key.evolve(lang=lang)
v = mesonlib.listify(self.options.get(key, []))
- self.options.setdefault(key, v + p_list)
+ if self.is_cross_build():
+ # Only "build." options come from environment variables.
+ if key.machine is MachineChoice.BUILD:
+ self.options.setdefault(key, v + p_list)
+ else:
+ self.options[key] = v + p_list
else:
key = OptionKey.from_string(keyname).evolve(machine=for_machine)
v = mesonlib.listify(self.options.get(key, []))
- self.options.setdefault(key, v + p_list)
+ if self.is_cross_build():
+ if key.machine is MachineChoice.BUILD:
+ self.options.setdefault(key, v + p_list)
+ else:
+ self.options[key] = v + p_list
def _set_default_binaries_from_env(self) -> None:
"""Set default binaries from the environment.
diff --git a/run_unittests.py b/run_unittests.py
index 8083342..b43bd99 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -5476,6 +5476,14 @@ class AllPlatformTests(BasePlatformTests):
projinfo = self.introspect('--projectinfo')
self.assertEqual(projinfo['version'], '1.0.0')
+ def test_cflags_cppflags(self):
+ envs = {'CPPFLAGS': '-DCPPFLAG',
+ 'CFLAGS': '-DCFLAG',
+ 'CXXFLAGS': '-DCXXFLAG'}
+ srcdir = os.path.join(self.unit_test_dir, '90 multiple envvars')
+ self.init(srcdir, override_envvars=envs)
+ self.build()
+
class FailureTests(BasePlatformTests):
'''
diff --git a/test cases/unit/90 multiple envvars/meson.build b/test cases/unit/90 multiple envvars/meson.build
new file mode 100644
index 0000000..ac57611
--- /dev/null
+++ b/test cases/unit/90 multiple envvars/meson.build
@@ -0,0 +1,4 @@
+project('multienv', 'c', 'cpp')
+
+executable('cexe', 'prog.c')
+executable('cppexe', 'prog.cpp')
diff --git a/test cases/unit/90 multiple envvars/prog.c b/test cases/unit/90 multiple envvars/prog.c
new file mode 100644
index 0000000..38d3c12
--- /dev/null
+++ b/test cases/unit/90 multiple envvars/prog.c
@@ -0,0 +1,18 @@
+#include<stdio.h>
+
+#ifndef CPPFLAG
+#error CPPFLAG not set
+#endif
+
+#ifndef CFLAG
+#error CFLAGS not set
+#endif
+
+#ifdef CXXFLAG
+#error CXXFLAG is set
+#endif
+
+int main(int argc, char **argv) {
+ printf("%d %s\n", argc, argv[0]);
+ return 0;
+}
diff --git a/test cases/unit/90 multiple envvars/prog.cpp b/test cases/unit/90 multiple envvars/prog.cpp
new file mode 100644
index 0000000..61ccf3a
--- /dev/null
+++ b/test cases/unit/90 multiple envvars/prog.cpp
@@ -0,0 +1,18 @@
+#include<cstdio>
+
+#ifndef CPPFLAG
+#error CPPFLAG not set
+#endif
+
+#ifdef CFLAG
+#error CFLAG is set
+#endif
+
+#ifndef CXXFLAG
+#error CXXFLAG not set
+#endif
+
+int main(int argc, char **argv) {
+ printf("%d %s\n", argc, argv[0]);
+ return 0;
+}