summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/interpreter/compiler.py10
-rw-r--r--test cases/common/28 try compile/meson.build17
2 files changed, 20 insertions, 7 deletions
diff --git a/mesonbuild/interpreter/compiler.py b/mesonbuild/interpreter/compiler.py
index c9ea8803c..52737c4e0 100644
--- a/mesonbuild/interpreter/compiler.py
+++ b/mesonbuild/interpreter/compiler.py
@@ -448,9 +448,12 @@ class CompilerHolder(ObjectHolder['Compiler']):
def compiles_method(self, args: T.Tuple['mesonlib.FileOrString'], kwargs: 'CompileKW') -> bool:
code = args[0]
if isinstance(code, mesonlib.File):
+ if code.is_built:
+ FeatureNew.single_use('compiler.compiles with file created at setup time', '1.2.0', self.subproject,
+ 'It was broken and either errored or returned false.', self.current_node)
self.interpreter.add_build_def_file(code)
code = mesonlib.File.from_absolute_file(
- code.rel_to_builddir(self.environment.source_dir))
+ code.absolute_path(self.environment.source_dir, self.environment.build_dir))
testname = kwargs['name']
extra_args = functools.partial(self._determine_args, kwargs['no_builtin_args'], kwargs['include_directories'], kwargs['args'])
deps, msg = self._determine_dependencies(kwargs['dependencies'], endl=None)
@@ -472,9 +475,12 @@ class CompilerHolder(ObjectHolder['Compiler']):
code = args[0]
compiler = None
if isinstance(code, mesonlib.File):
+ if code.is_built:
+ FeatureNew.single_use('compiler.links with file created at setup time', '1.2.0', self.subproject,
+ 'It was broken and either errored or returned false.', self.current_node)
self.interpreter.add_build_def_file(code)
code = mesonlib.File.from_absolute_file(
- code.rel_to_builddir(self.environment.source_dir))
+ code.absolute_path(self.environment.source_dir, self.environment.build_dir))
suffix = code.suffix
if suffix not in self.compiler.file_suffixes:
for_machine = self.compiler.for_machine
diff --git a/test cases/common/28 try compile/meson.build b/test cases/common/28 try compile/meson.build
index cb41e1d5a..3480d1d89 100644
--- a/test cases/common/28 try compile/meson.build
+++ b/test cases/common/28 try compile/meson.build
@@ -8,20 +8,27 @@ breakcode = '''#include<nonexisting.h>
void func(void) { printf("This won't work.\n"); }
'''
-foreach compiler : [meson.get_compiler('c'), meson.get_compiler('cpp')]
- if compiler.compiles(code, name : 'should succeed') == false
+foreach lang : ['c', 'cpp']
+ compiler = meson.get_compiler(lang)
+
+ if compiler.compiles(code, name : 'code should succeed') == false
+ error('Compiler ' + compiler.get_id() + ' is fail.')
+ endif
+
+ if compiler.compiles(files('valid.c'), name : 'file should succeed') == false
error('Compiler ' + compiler.get_id() + ' is fail.')
endif
- if compiler.compiles(files('valid.c'), name : 'should succeed') == false
+ copied = configure_file(input: 'valid.c', output: lang + '-valid-copy.c', copy: true)
+ if compiler.compiles(copied, name : 'built file should succeed') == false
error('Compiler ' + compiler.get_id() + ' is fail.')
endif
- if compiler.compiles(breakcode, name : 'should fail')
+ if compiler.compiles(breakcode, name : 'code should fail')
error('Compiler ' + compiler.get_id() + ' returned true on broken code.')
endif
- if compiler.compiles(files('invalid.c'), name : 'should fail')
+ if compiler.compiles(files('invalid.c'), name : 'file should fail')
error('Compiler ' + compiler.get_id() + ' returned true on broken code.')
endif
endforeach