diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2016-09-26 02:30:26 -0400 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2016-09-29 04:44:01 -0400 |
commit | f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5 (patch) | |
tree | 45e580b3dfe7e628ab2123081d3b39979593e0f8 | |
parent | 51341ce17758858b4578bb6c370f5ded6360ce43 (diff) | |
download | meson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.zip meson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.tar.gz meson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.tar.bz2 |
Allow passing files to compile/link/run queries.
-rw-r--r-- | mesonbuild/compilers.py | 11 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 18 |
2 files changed, 22 insertions, 7 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py index e3ffba6..ec75b76 100644 --- a/mesonbuild/compilers.py +++ b/mesonbuild/compilers.py @@ -614,10 +614,13 @@ int main () {{ {1}; }}''' try: with tempfile.TemporaryDirectory() as tmpdirname: - srcname = os.path.join(tmpdirname, - 'testfile.' + self.default_suffix) - with open(srcname, 'w') as ofile: - ofile.write(code) + if isinstance(code, str): + srcname = os.path.join(tmpdirname, + 'testfile.' + self.default_suffix) + with open(srcname, 'w') as ofile: + ofile.write(code) + elif isinstance(code, mesonlib.File): + srcname = code.fname # Extension only matters if running results; '.exe' is # guaranteed to be executable on every platform. diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 385e07a..522450b 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -698,8 +698,12 @@ class CompilerHolder(InterpreterObject): def run_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('Run method takes exactly one positional argument.') - check_stringlist(args) code = args[0] + if isinstance(code, mesonlib.File): + code = mesonlib.File.from_absolute_file( + code.rel_to_builddir(self.environment.source_dir)) + elif not isinstance(code, str): + raise InvalidArguments('Argument must be string or file.') testname = kwargs.get('name', '') if not isinstance(testname, str): raise InterpreterException('Testname argument must be a string.') @@ -819,8 +823,12 @@ class CompilerHolder(InterpreterObject): def compiles_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('compiles method takes exactly one argument.') - check_stringlist(args) code = args[0] + if isinstance(code, mesonlib.File): + code = mesonlib.File.from_absolute_file( + code.rel_to_builddir(self.environment.source_dir)) + elif not isinstance(code, str): + raise InvalidArguments('Argument must be string or file.') testname = kwargs.get('name', '') if not isinstance(testname, str): raise InterpreterException('Testname argument must be a string.') @@ -838,8 +846,12 @@ class CompilerHolder(InterpreterObject): def links_method(self, args, kwargs): if len(args) != 1: raise InterpreterException('links method takes exactly one argument.') - check_stringlist(args) code = args[0] + if isinstance(code, mesonlib.File): + code = mesonlib.File.from_absolute_file( + code.rel_to_builddir(self.environment.source_dir)) + elif not isinstance(code, str): + raise InvalidArguments('Argument must be string or file.') testname = kwargs.get('name', '') if not isinstance(testname, str): raise InterpreterException('Testname argument must be a string.') |