blob: 2d84d5d352c233ba155b84d68cc6161ea52c2ad3 [file] [log] [blame]
#!/usr/bin/python
# Copyright (c) 2012 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipes for NativeClient toolchain packages.
The real entry plumbing is in toolchain_main.py.
"""
from __future__ import print_function
import os
import StringIO
import subprocess
import sys
import tempfile
class Process(object):
def __init__(self, args, cwd=None, shell=False, env=None, pipe=True):
print('IN CWD=%s' % str(cwd))
self.args = args
self.cwd = cwd or os.getcwd()
self.shell = shell
self.env = env
print('CWD=' + self.cwd)
try:
if not pipe:
self.proc = subprocess.Popen(self.args,
shell=self.shell,
cwd=self.cwd,
env=self.env)
else:
self.proc = subprocess.Popen(self.args,
shell=self.shell,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=self.cwd,
env=self.env)
except:
print('Failed to run:\n\t%s> %s' % (self.cwd, ' '.join(self.args)))
raise
def Run(self, outfile=None, verbose=True):
if self.proc:
out, err = self.proc.communicate()
if outfile:
if verbose:
outfile.write(' '.join(self.args) + '\n')
if out:
outfile.write(out)
if err:
outfile.write(err)
return self.proc.returncode
return -1
def Start(args, cwd=None, shell=False, env=None):
return Process(args, cwd, sell, env)
def Run(args, cwd=None, shell=False, env=None, outfile=None, verbose=True):
return Process(args, cwd, shell, env, outfile).Run(outfile, verbose)
def WaitForAll(procs, outfile=None):
for proc in procs:
proc.Run(outfile)