aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Schneider <nioncode+git@gmail.com>2019-01-01 11:50:16 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2019-01-02 22:17:36 +0200
commitf1b32aa4bbf7091719b83e64febc1a9f2f4ed67d (patch)
tree020255d4f1ffc763208f4d4005fa2e8141bc6c63
parent211a60dc99814766a8bb26cd15e795bbae545656 (diff)
downloadmeson-f1b32aa4bbf7091719b83e64febc1a9f2f4ed67d.zip
meson-f1b32aa4bbf7091719b83e64febc1a9f2f4ed67d.tar.gz
meson-f1b32aa4bbf7091719b83e64febc1a9f2f4ed67d.tar.bz2
vs: respect 'b_pch' option
Fixes #4681.
-rw-r--r--mesonbuild/backend/vs2010backend.py29
-rw-r--r--test cases/failing build/3 pch disabled/c/meson.build2
-rw-r--r--test cases/failing build/3 pch disabled/c/pch/prog.h1
-rw-r--r--test cases/failing build/3 pch disabled/c/pch/prog_pch.c5
-rw-r--r--test cases/failing build/3 pch disabled/c/prog.c10
-rw-r--r--test cases/failing build/3 pch disabled/meson.build5
6 files changed, 38 insertions, 14 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 8ac88ce..939f7b4 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -982,7 +982,6 @@ class Vs2010Backend(backends.Backend):
target_defines.append('%(PreprocessorDefinitions)')
ET.SubElement(clconf, 'PreprocessorDefinitions').text = ';'.join(target_defines)
ET.SubElement(clconf, 'FunctionLevelLinking').text = 'true'
- pch_node = ET.SubElement(clconf, 'PrecompiledHeader')
# Warning level
warning_level = self.get_option_for_target('warning_level', target)
ET.SubElement(clconf, 'WarningLevel').text = 'Level' + str(1 + int(warning_level))
@@ -990,19 +989,21 @@ class Vs2010Backend(backends.Backend):
ET.SubElement(clconf, 'TreatWarningAsError').text = 'true'
# Note: SuppressStartupBanner is /NOLOGO and is 'true' by default
pch_sources = {}
- for lang in ['c', 'cpp']:
- pch = target.get_pch(lang)
- if not pch:
- continue
- pch_node.text = 'Use'
- if compiler.id == 'msvc':
- if len(pch) != 2:
- raise MesonException('MSVC requires one header and one source to produce precompiled headers.')
- pch_sources[lang] = [pch[0], pch[1], lang]
- else:
- # I don't know whether its relevant but let's handle other compilers
- # used with a vs backend
- pch_sources[lang] = [pch[0], None, lang]
+ if self.environment.coredata.base_options.get('b_pch', False):
+ pch_node = ET.SubElement(clconf, 'PrecompiledHeader')
+ for lang in ['c', 'cpp']:
+ pch = target.get_pch(lang)
+ if not pch:
+ continue
+ pch_node.text = 'Use'
+ if compiler.id == 'msvc':
+ if len(pch) != 2:
+ raise MesonException('MSVC requires one header and one source to produce precompiled headers.')
+ pch_sources[lang] = [pch[0], pch[1], lang]
+ else:
+ # I don't know whether its relevant but let's handle other compilers
+ # used with a vs backend
+ pch_sources[lang] = [pch[0], None, lang]
if len(pch_sources) == 1:
# If there is only 1 language with precompiled headers, we can use it for the entire project, which
# is cleaner than specifying it for each source file.
diff --git a/test cases/failing build/3 pch disabled/c/meson.build b/test cases/failing build/3 pch disabled/c/meson.build
new file mode 100644
index 0000000..1739126
--- /dev/null
+++ b/test cases/failing build/3 pch disabled/c/meson.build
@@ -0,0 +1,2 @@
+exe = executable('prog', 'prog.c',
+c_pch : ['pch/prog_pch.c', 'pch/prog.h'])
diff --git a/test cases/failing build/3 pch disabled/c/pch/prog.h b/test cases/failing build/3 pch disabled/c/pch/prog.h
new file mode 100644
index 0000000..354499a
--- /dev/null
+++ b/test cases/failing build/3 pch disabled/c/pch/prog.h
@@ -0,0 +1 @@
+#include<stdio.h>
diff --git a/test cases/failing build/3 pch disabled/c/pch/prog_pch.c b/test cases/failing build/3 pch disabled/c/pch/prog_pch.c
new file mode 100644
index 0000000..4960505
--- /dev/null
+++ b/test cases/failing build/3 pch disabled/c/pch/prog_pch.c
@@ -0,0 +1,5 @@
+#if !defined(_MSC_VER)
+#error "This file is only for use with MSVC."
+#endif
+
+#include "prog.h"
diff --git a/test cases/failing build/3 pch disabled/c/prog.c b/test cases/failing build/3 pch disabled/c/prog.c
new file mode 100644
index 0000000..0ce3d0a
--- /dev/null
+++ b/test cases/failing build/3 pch disabled/c/prog.c
@@ -0,0 +1,10 @@
+// No includes here, they need to come from the PCH
+
+void func() {
+ fprintf(stdout, "This is a function that fails if stdio is not #included.\n");
+}
+
+int main(int argc, char **argv) {
+ return 0;
+}
+
diff --git a/test cases/failing build/3 pch disabled/meson.build b/test cases/failing build/3 pch disabled/meson.build
new file mode 100644
index 0000000..0a8fa67
--- /dev/null
+++ b/test cases/failing build/3 pch disabled/meson.build
@@ -0,0 +1,5 @@
+# Disable PCH usage to make sure backends respect this setting.
+# Since the .c file requires PCH usage (it does not include necessary
+# headers itself), the build should fail.
+project('pch test', 'c', default_options: ['b_pch=false'])
+subdir('c')