summaryrefslogtreecommitdiff
path: root/run_cross_test.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-08-24 00:30:13 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-08-24 00:30:13 +0300
commit6536354cc31a8a9aee45affaedae7c2919e4204e (patch)
tree7123a0f115b58f0cb4189ffaf3df9ccb9cf9b5df /run_cross_test.py
parent4b9d873b0317a5b91c2e2a938463804c7d8a87b1 (diff)
downloadmeson-6536354cc31a8a9aee45affaedae7c2919e4204e.tar.gz
Updated symbolextractor to work with cross builds.
Diffstat (limited to 'run_cross_test.py')
-rwxr-xr-xrun_cross_test.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/run_cross_test.py b/run_cross_test.py
new file mode 100755
index 000000000..e96e622ec
--- /dev/null
+++ b/run_cross_test.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+
+# Copyright 2013 Jussi Pakkanen
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+'''Runs the basic test suite through a cross compiler.
+Not part of the main test suite because of two reasons:
+
+1) setup of the cross build is platform specific
+2) it can be slow (e.g. when invoking test apps via wine)
+
+Eventually migrate to something fancier.'''
+
+from glob import glob
+import os, subprocess, shutil, sys
+import environment
+
+from run_tests import gather_tests
+
+test_build_dir = 'work area'
+install_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], 'install dir')
+meson_command = './meson.py'
+
+extra_flags = ['--cross-file', 'cross/ubuntu-mingw.txt']
+ninja_command = environment.detect_ninja()
+if ninja_command is None:
+ raise RuntimeError('Could not find Ninja executable.')
+compile_commands = [ninja_command]
+test_commands = [ninja_command, 'test']
+install_commands = [ninja_command, 'install']
+
+def run_test(testdir, should_succeed=True):
+ shutil.rmtree(test_build_dir)
+ shutil.rmtree(install_dir)
+ os.mkdir(test_build_dir)
+ os.mkdir(install_dir)
+ print('Running test: ' + testdir)
+ gen_command = [sys.executable, meson_command, '--prefix', install_dir, testdir, test_build_dir] + extra_flags
+ p = subprocess.Popen(gen_command)
+ p.wait()
+ if not should_succeed:
+ if p.returncode != 0:
+ return
+ raise RuntimeError('Test that should fail succeeded.')
+ if p.returncode != 0:
+ raise RuntimeError('Generating the build system failed.')
+ pc = subprocess.Popen(compile_commands, cwd=test_build_dir)
+ pc.wait()
+ if pc.returncode != 0:
+ raise RuntimeError('Compiling source code failed.')
+ pt = subprocess.Popen(test_commands, cwd=test_build_dir)
+ pt.wait()
+ if pt.returncode != 0:
+ raise RuntimeError('Running unit tests failed.')
+ pi = subprocess.Popen(install_commands, cwd=test_build_dir)
+ pi.wait()
+ if pi.returncode != 0:
+ raise RuntimeError('Running install failed.')
+
+def run_tests():
+ commontests = gather_tests('test cases/common')
+ try:
+ os.mkdir(test_build_dir)
+ except OSError:
+ pass
+ try:
+ os.mkdir(install_dir)
+ except OSError:
+ pass
+ print('\nRunning cross compilation tests.\n')
+ [run_test(t) for t in commontests]
+
+if __name__ == '__main__':
+ script_dir = os.path.split(__file__)[0]
+ if script_dir != '':
+ os.chdir(script_dir)
+ run_tests()