Merge pull request #283 from grissiom/win32spawn
Scons: fix the Win32Spawn
This commit is contained in:
commit
69621ff5cc
|
@ -12,24 +12,43 @@ Env = None
|
||||||
|
|
||||||
class Win32Spawn:
|
class Win32Spawn:
|
||||||
def spawn(self, sh, escape, cmd, args, env):
|
def spawn(self, sh, escape, cmd, args, env):
|
||||||
|
# deal with the cmd build-in commands which cannot be used in
|
||||||
|
# subprocess.Popen
|
||||||
|
if cmd == 'del':
|
||||||
|
for f in args[1:]:
|
||||||
|
try:
|
||||||
|
os.remove(f)
|
||||||
|
except Exception as e:
|
||||||
|
print 'Error removing file: %s' % e
|
||||||
|
return -1
|
||||||
|
return 0
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
newargs = string.join(args[1:], ' ')
|
newargs = string.join(args[1:], ' ')
|
||||||
cmdline = cmd + " " + newargs
|
cmdline = cmd + " " + newargs
|
||||||
startupinfo = subprocess.STARTUPINFO()
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||||
|
|
||||||
proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
|
# Make sure the env is constructed by strings
|
||||||
stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False)
|
_e = {k: str(v) for k, v in env.items()}
|
||||||
data, err = proc.communicate()
|
|
||||||
rv = proc.wait()
|
|
||||||
if data:
|
|
||||||
print data
|
|
||||||
if err:
|
|
||||||
print err
|
|
||||||
|
|
||||||
if rv:
|
# Windows(tm) CreateProcess does not use the env passed to it to find
|
||||||
return rv
|
# the executables. So we have to modify our own PATH to make Popen
|
||||||
return 0
|
# work.
|
||||||
|
old_path = os.environ['PATH']
|
||||||
|
os.environ['PATH'] = _e['PATH']
|
||||||
|
|
||||||
|
try:
|
||||||
|
proc = subprocess.Popen(cmdline, env=_e,
|
||||||
|
startupinfo=startupinfo, shell=False)
|
||||||
|
except Exception as e:
|
||||||
|
print 'Error in Popen: %s' % e
|
||||||
|
return -1
|
||||||
|
finally:
|
||||||
|
os.environ['PATH'] = old_path
|
||||||
|
|
||||||
|
return proc.wait()
|
||||||
|
|
||||||
def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = []):
|
def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = []):
|
||||||
import SCons.cpp
|
import SCons.cpp
|
||||||
|
@ -59,11 +78,11 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
|
||||||
env['LIBDIRPREFIX'] = '--userlibpath '
|
env['LIBDIRPREFIX'] = '--userlibpath '
|
||||||
|
|
||||||
# patch for win32 spawn
|
# patch for win32 spawn
|
||||||
if env['PLATFORM'] == 'win32' and rtconfig.PLATFORM == 'gcc':
|
if env['PLATFORM'] == 'win32':
|
||||||
win32_spawn = Win32Spawn()
|
win32_spawn = Win32Spawn()
|
||||||
win32_spawn.env = env
|
win32_spawn.env = env
|
||||||
env['SPAWN'] = win32_spawn.spawn
|
env['SPAWN'] = win32_spawn.spawn
|
||||||
|
|
||||||
if env['PLATFORM'] == 'win32':
|
if env['PLATFORM'] == 'win32':
|
||||||
os.environ['PATH'] = rtconfig.EXEC_PATH + ";" + os.environ['PATH']
|
os.environ['PATH'] = rtconfig.EXEC_PATH + ";" + os.environ['PATH']
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue