diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-01-18 21:22:24 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-01-18 21:22:24 +0200 |
commit | a5528249ad353384e3c860c7207ef3eedbdcc6b7 (patch) | |
tree | 5f2a3fa61e5351231f6ffe8ca6b70d4f811093d7 /mesonbuild/scripts/commandrunner.py | |
parent | 2d1aa395e86848ca948d30d83cc5357777e5b490 (diff) | |
parent | f7e1d256ad78521052a41fe8f850793fa6cd4f01 (diff) | |
download | meson-a5528249ad353384e3c860c7207ef3eedbdcc6b7.zip meson-a5528249ad353384e3c860c7207ef3eedbdcc6b7.tar.gz meson-a5528249ad353384e3c860c7207ef3eedbdcc6b7.tar.bz2 |
Merge branch 'distutils'.
Diffstat (limited to 'mesonbuild/scripts/commandrunner.py')
-rw-r--r-- | mesonbuild/scripts/commandrunner.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/mesonbuild/scripts/commandrunner.py b/mesonbuild/scripts/commandrunner.py new file mode 100644 index 0000000..1c37f5c --- /dev/null +++ b/mesonbuild/scripts/commandrunner.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +# Copyright 2014 The Meson development team + +# 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. + +"""This program is a wrapper to run external commands. It determines +what to run, sets up the environment and executes the command.""" + +import sys, os, subprocess, shutil + +def run_command(source_dir, build_dir, subdir, command, arguments): + env = {'MESON_SOURCE_ROOT' : source_dir, + 'MESON_BUILD_ROOT' : build_dir, + 'MESON_SUBDIR' : subdir + } + cwd = os.path.join(source_dir, subdir) + child_env = os.environ.copy() + child_env.update(env) + + # Is the command an executable in path? + exe = shutil.which(command) + if exe is not None: + command_array = [exe] + arguments + return subprocess.Popen(command_array, env=child_env, cwd=cwd) + # No? Maybe it is a script in the source tree. + fullpath = os.path.join(source_dir, subdir, command) + command_array = [fullpath] + arguments + try: + return subprocess.Popen(command_array,env=child_env, cwd=cwd) + except FileNotFoundError: + print('Could not execute command "%s".' % command) + sys.exit(1) + +def run(args): + if len(args) < 4: + print('commandrunner.py <source dir> <build dir> <subdir> <command> [arguments]') + return 1 + src_dir = args[0] + build_dir = args[1] + subdir = args[2] + command = args[3] + arguments = args[4:] + pc = run_command(src_dir, build_dir, subdir, command, arguments) + pc.wait() + return pc.returncode + +if __name__ == '__main__': + sys.exit(run(sys.argv[1:])) |