diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-06-15 14:56:37 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-06-15 14:56:37 +0300 |
commit | 034aef9c8d3d2aa1306e84b30123556a45fe500b (patch) | |
tree | 254626ee2501c6b02714b275648e25b62666df0b /commandrunner.py | |
parent | 575ef27f3757b9e2a7837c81af9a2cc797385097 (diff) | |
download | meson-034aef9c8d3d2aa1306e84b30123556a45fe500b.zip meson-034aef9c8d3d2aa1306e84b30123556a45fe500b.tar.gz meson-034aef9c8d3d2aa1306e84b30123556a45fe500b.tar.bz2 |
Add in this file that I forgot.
Diffstat (limited to 'commandrunner.py')
-rw-r--r-- | commandrunner.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/commandrunner.py b/commandrunner.py new file mode 100644 index 0000000..cc312b8 --- /dev/null +++ b/commandrunner.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +# Copyright 2014 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. + +"""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) + +if __name__ == '__main__': + if len(sys.argv) < 5: + print(sys.argv[0], '<source dir> <build dir> <subdir> <command> [arguments]') + src_dir = sys.argv[1] + build_dir = sys.argv[2] + subdir = sys.argv[3] + command = sys.argv[4] + arguments = sys.argv[5:] + sys.exit(run_command(src_dir, build_dir, subdir, command, arguments).returncode) |