Fix #1059: Linking for mingw/x86_64 on MSYS2 fails, w/ ar execution speed up

Feiyun Wang 2023-03-31 23:58:54 +08:00
parent 61c3f8a440
commit 8d3dc7551d
1 changed files with 25 additions and 20 deletions

View File

@ -11,34 +11,39 @@ def configure(env):
import subprocess import subprocess
def mySubProcess(cmdline, env): def mySubProcess(cmdline, env):
# print("SPAWNED: " + cmdline) # print(cmdline)
proc = subprocess.run( proc = subprocess.run(args=cmdline, shell=True, env=env)
args=cmdline,
shell=True,
env=env,
)
rv = proc.returncode rv = proc.returncode
if rv: if rv:
print("=====") print("=====")
print(rv, "(", hex(rv), ")") print("subprocess.run().returncode=", rv, "(", hex(rv), ")")
print("len(cmdline)=", len(cmdline))
print("=====") print("=====")
return rv return rv
def mySpawn(sh, escape, cmd, args, env): def mySpawn(sh, escape, cmd, args, env):
if len(args) > 3 and cmd.endswith("ar"):
newargs = " ".join(args[1:]) # print("Long ar command is split.\nargc=", len(args))
cmdline = cmd + " " + newargs lead = len(" ".join(args[0:3]))
begin = 3
rv = 0 length = lead + 1 + len(args[begin])
if len(cmdline) > 32000 and cmd.endswith("ar"): rv = 0
cmdline = cmd + " " + args[1] + " " + args[2] + " " for i in range(4, len(args)):
for i in range(3, len(args)): length += 1 + len(args[i])
rv = mySubProcess(cmdline + args[i], env) if length >= 8 * 1024 - 32:
if rv: cmdline = " ".join(args[0:3] + args[begin:i])
break # print("objs=", i - begin, ", length=", len(cmdline))
rv = mySubProcess(cmdline, env)
if rv:
break
begin = i
length = lead + 1 + len(args[i])
if not rv:
cmdline = " ".join(args[0:3] + args[begin:])
# print("objs=", len(args) - begin, ", length=", len(cmdline))
rv = mySubProcess(cmdline, env)
else: else:
rv = mySubProcess(cmdline, env) rv = mySubProcess(args, env)
return rv return rv
env["SPAWN"] = mySpawn env["SPAWN"] = mySpawn