my_spawn.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import os
  2. def exists(env):
  3. return os.name == "nt"
  4. # Workaround for MinGW. See:
  5. # http://www.scons.org/wiki/LongCmdLinesOnWin32
  6. def configure(env):
  7. import subprocess
  8. def mySubProcess(cmdline, env):
  9. # print "SPAWNED : " + cmdline
  10. startupinfo = subprocess.STARTUPINFO()
  11. startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
  12. proc = subprocess.Popen(
  13. cmdline,
  14. stdin=subprocess.PIPE,
  15. stdout=subprocess.PIPE,
  16. stderr=subprocess.PIPE,
  17. startupinfo=startupinfo,
  18. shell=False,
  19. env=env,
  20. )
  21. data, err = proc.communicate()
  22. rv = proc.wait()
  23. if rv:
  24. print("=====")
  25. print(err.decode("utf-8"))
  26. print("=====")
  27. return rv
  28. def mySpawn(sh, escape, cmd, args, env):
  29. newargs = " ".join(args[1:])
  30. cmdline = cmd + " " + newargs
  31. rv = 0
  32. if len(cmdline) > 32000 and cmd.endswith("ar"):
  33. cmdline = cmd + " " + args[1] + " " + args[2] + " "
  34. for i in range(3, len(args)):
  35. rv = mySubProcess(cmdline + args[i], env)
  36. if rv:
  37. break
  38. else:
  39. rv = mySubProcess(cmdline, env)
  40. return rv
  41. env["SPAWN"] = mySpawn
  42. env.Replace(ARFLAGS=["q"])