aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2016-09-26 02:30:26 -0400
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2016-09-29 04:44:01 -0400
commitf2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5 (patch)
tree45e580b3dfe7e628ab2123081d3b39979593e0f8
parent51341ce17758858b4578bb6c370f5ded6360ce43 (diff)
downloadmeson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.zip
meson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.tar.gz
meson-f2fed5052ddb7233df4ad49c0e83f6c8cad0cdf5.tar.bz2
Allow passing files to compile/link/run queries.
-rw-r--r--mesonbuild/compilers.py11
-rw-r--r--mesonbuild/interpreter.py18
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.')