summaryrefslogtreecommitdiff
path: root/build/generator/util/executable.py
diff options
context:
space:
mode:
Diffstat (limited to 'build/generator/util/executable.py')
-rw-r--r--build/generator/util/executable.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/build/generator/util/executable.py b/build/generator/util/executable.py
new file mode 100644
index 0000000..f04f6d2
--- /dev/null
+++ b/build/generator/util/executable.py
@@ -0,0 +1,67 @@
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+#
+#
+#
+# executable.py -- Utilities for dealing with external executables
+#
+
+import os
+import subprocess
+
+def exists(file):
+ """Is this an executable file?"""
+ return os.path.isfile(file) and os.access(file, os.X_OK)
+
+def find(file, dirs=None):
+ """Search for an executable in a given list of directories.
+ If no directories are given, search according to the PATH
+ environment variable."""
+ if not dirs:
+ dirs = os.environ["PATH"].split(os.pathsep)
+ for path in dirs:
+ if is_executable(os.path.join(path, file)):
+ return os.path.join(path, file)
+ elif is_executable(os.path.join(path, "%s.exe" % file)):
+ return os.path.join(path, "%s.exe" % file)
+ return None
+
+def output(cmd, strip=None):
+ """Run a command and collect all output"""
+ # Check that cmd is in PATH (otherwise we'd get a generic OSError later)
+ import distutils.spawn
+ if isinstance(cmd, str):
+ cmdname = cmd
+ elif isinstance(cmd, list):
+ cmdname = cmd[0]
+ if distutils.spawn.find_executable(cmdname) is None:
+ return None
+
+ # Run it
+ (output, empty_stderr) = subprocess.Popen(cmd, stdout=subprocess.PIPE, \
+ stderr=subprocess.STDOUT).communicate()
+ if strip:
+ return output.strip()
+ else:
+ return output
+
+def run(cmd):
+ """Run a command"""
+ exit_code = os.system(cmd)
+ assert(not exit_code)