aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-07-27 16:06:39 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-07-27 16:06:39 +0300
commitbdd1485987ac39eacbc8c04376467a8bcc1c3b73 (patch)
tree54c94752aad916dce28649e86646f74d645f32e0
parent427cfbf569113aeab6b98b96c8e9c3cf2532e8ae (diff)
downloadmeson-bdd1485987ac39eacbc8c04376467a8bcc1c3b73.zip
meson-bdd1485987ac39eacbc8c04376467a8bcc1c3b73.tar.gz
meson-bdd1485987ac39eacbc8c04376467a8bcc1c3b73.tar.bz2
Run build tests properly.
-rw-r--r--environment.py35
-rw-r--r--interpreter.py2
-rw-r--r--test cases/common/39 tryrun/meson.build4
3 files changed, 23 insertions, 18 deletions
diff --git a/environment.py b/environment.py
index 309a1e3..03fa21b 100644
--- a/environment.py
+++ b/environment.py
@@ -152,22 +152,13 @@ class CCompiler():
pass
return p.returncode == 0
- def sizeof(self, element, prefix):
- templ = '''#include<stdio.h>
-%s
-
-int main(int argc, char **argv) {
- printf("%%ld\\n", (long)(sizeof(%s)));
- return 0;
-};
-'''
+ def run(self, code):
(fd, srcname) = tempfile.mkstemp(suffix='.'+self.default_suffix)
- exename = srcname + '.exe' # Is guaranteed to be executable on every platform.
os.close(fd)
ofile = open(srcname, 'w')
- code = templ % (prefix, element)
ofile.write(code)
ofile.close()
+ exename = srcname + '.exe' # Is guaranteed to be executable on every platform.
commands = self.get_exelist()
commands.append(srcname)
commands += self.get_output_flags(exename)
@@ -175,13 +166,27 @@ int main(int argc, char **argv) {
p.communicate()
os.remove(srcname)
if p.returncode != 0:
- raise EnvironmentException('Could not compile sizeof test.')
+ return RunResult(False)
pe = subprocess.Popen(exename, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- so = pe.communicate()[0]
+ (so, se) = pe.communicate()
os.remove(exename)
- if pe.returncode != 0:
+ return RunResult(True, pe.returncode, so.decode(), se.decode())
+
+ def sizeof(self, element, prefix):
+ templ = '''#include<stdio.h>
+%s
+
+int main(int argc, char **argv) {
+ printf("%%ld\\n", (long)(sizeof(%s)));
+ return 0;
+};
+'''
+ res = self.run(templ % (prefix, element))
+ if not res.compiled:
+ raise EnvironmentException('Could not compile sizeof test.')
+ if res.returncode != 0:
raise EnvironmentException('Could not run sizeof test binary.')
- return int(so.decode())
+ return int(res.stdout)
class CPPCompiler(CCompiler):
def __init__(self, exelist):
diff --git a/interpreter.py b/interpreter.py
index 834f7f8..ebd29e5 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -660,7 +660,7 @@ class CompilerHolder(InterpreterObject):
code = code.get_value()
if not isinstance(code, str):
raise InterpreterException('First argument is not a string.')
- result = environment.RunResult(True, 0, 'stdout', 'stderr')
+ result = self.compiler.run(code)
return TryRunResultHolder(result)
def get_id_method(self, args, kwargs):
diff --git a/test cases/common/39 tryrun/meson.build b/test cases/common/39 tryrun/meson.build
index 7f4cdad..212f9fa 100644
--- a/test cases/common/39 tryrun/meson.build
+++ b/test cases/common/39 tryrun/meson.build
@@ -23,9 +23,9 @@ err = cc.run(error_code)
noc = cc.run(no_compile_code)
if noc.compiled()
- message('Compilation fail test failed.')
+ error('Compilation fail test failed.')
else
- error('Fail detected.')
+ message('Fail detected properly.')
endif
if ok.compiled()