Browse Source

-Many fixes to windows build system with Mingw on Windows. Fixes #2690

Juan Linietsky 9 years ago
parent
commit
caddcca4f4
4 changed files with 51 additions and 37 deletions
  1. 5 0
      SConstruct
  2. 1 1
      drivers/SCsub
  3. 44 1
      methods.py
  4. 1 35
      platform/windows/detect.py

+ 5 - 0
SConstruct

@@ -1,5 +1,6 @@
 EnsureSConsVersion(0,14);
 
+
 import string
 import os
 import os.path
@@ -77,6 +78,9 @@ env_base.android_permission_chunk=""
 env_base.android_appattributes_chunk=""
 env_base.disabled_modules=[]
 
+env_base.split_drivers=False
+
+
 
 env_base.__class__.android_add_maven_repository=methods.android_add_maven_repository
 env_base.__class__.android_add_dependency=methods.android_add_dependency
@@ -90,6 +94,7 @@ env_base.__class__.android_add_to_attributes = methods.android_add_to_attributes
 env_base.__class__.disable_module = methods.disable_module
 
 env_base.__class__.add_source_files = methods.add_source_files
+env_base.__class__.use_windows_spawn_fix = methods.use_windows_spawn_fix
 
 env_base["x86_opt_gcc"]=False
 env_base["x86_opt_vc"]=False

+ 1 - 1
drivers/SCsub

@@ -63,7 +63,7 @@ import string
 if env['vsproj']=="yes":
 	env.AddToVSProject(env.drivers_sources)
 
-if (False): #split drivers, this used to be needed for windows until separate builders for windows were created
+if (env.split_drivers): #split drivers, this used to be needed for windows until separate builders for windows were created
 
 	for f in env.drivers_sources:
 		fname = ""

+ 44 - 1
methods.py

@@ -1309,7 +1309,50 @@ def android_add_to_attributes(self,file):
 
 def disable_module(self):
 	self.disabled_modules.append(self.current_module)
-	
+
+def use_windows_spawn_fix(self):
+
+    if (os.name!="nt"):
+	return #not needed, only for windows
+
+    self.split_drivers=True
+
+    import subprocess
+
+    def mySubProcess(cmdline,env):
+	    #print "SPAWNED : " + cmdline
+	    startupinfo = subprocess.STARTUPINFO()
+	    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+	    proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+		    stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False, env = env)
+	    data, err = proc.communicate()
+	    rv = proc.wait()
+	    if rv:
+		    print "====="
+		    print err
+		    print "====="
+	    return rv
+
+    def mySpawn(sh, escape, cmd, args, env):
+
+	    newargs = ' '.join(args[1:])
+	    cmdline = cmd + " " + newargs
+
+	    rv=0
+	    if len(cmdline) > 32000 and cmd.endswith("ar") :
+		    cmdline = cmd + " " + args[1] + " " + args[2] + " "
+		    for i in range(3,len(args)) :
+			    rv = mySubProcess( cmdline + args[i], env )
+			    if rv :
+				    break
+	    else:
+		    rv = mySubProcess( cmdline, env )
+
+	    return rv
+
+    self['SPAWN'] = mySpawn
+
+
 def save_active_platforms(apnames,ap):
 
 	for x in ap:

+ 1 - 35
platform/windows/detect.py

@@ -267,41 +267,7 @@ def configure(env):
 
 		# Workaround for MinGW. See:
 		# http://www.scons.org/wiki/LongCmdLinesOnWin32
-		if (os.name=="nt"):
-			import subprocess
-			
-			def mySubProcess(cmdline,env):
-				#print "SPAWNED : " + cmdline
-				startupinfo = subprocess.STARTUPINFO()
-				startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
-				proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-					stderr=subprocess.PIPE, startupinfo=startupinfo, shell = False, env = env)
-				data, err = proc.communicate()
-				rv = proc.wait()
-				if rv:
-					print "====="
-					print err
-					print "====="
-				return rv
-				
-			def mySpawn(sh, escape, cmd, args, env):
-								
-				newargs = ' '.join(args[1:])
-				cmdline = cmd + " " + newargs
-				
-				rv=0
-				if len(cmdline) > 32000 and cmd.endswith("ar") :
-					cmdline = cmd + " " + args[1] + " " + args[2] + " "
-					for i in range(3,len(args)) :
-						rv = mySubProcess( cmdline + args[i], env )
-						if rv :
-							break	
-				else:				
-					rv = mySubProcess( cmdline, env )
-					
-				return rv
-				
-			env['SPAWN'] = mySpawn
+		env.use_windows_spawn_fix()
 
 		#build using mingw
 		if (os.name=="nt"):