about summary refs log tree commit diff
path: root/scripts
diff options
context:
space:
mode:
authorSworddragon <sworddragon2@aol.com>2010-12-05 23:01:05 +0100
committeroy <Tom_Adams@web.de>2010-12-16 03:08:45 +0100
commit9852ec658cb668f9e9007e266381b47faeadb4c3 (patch)
tree6db806f6e007ce8a0a726b4fbbb7600024982d43 /scripts
parent6063b4c14dd26b84c91a8e8d62f3921b4789a80a (diff)
downloadzcatch-9852ec658cb668f9e9007e266381b47faeadb4c3.tar.gz
zcatch-9852ec658cb668f9e9007e266381b47faeadb4c3.zip
Updated build.py
Diffstat (limited to 'scripts')
-rw-r--r--scripts/build.py259
1 files changed, 180 insertions, 79 deletions
diff --git a/scripts/build.py b/scripts/build.py
index 2da77169..6c350072 100644
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -1,10 +1,49 @@
-import os, sys, shutil, httplib, zipfile
+import imp, optparse, os, re, shutil, sys, zipfile
+from optparse import OptionParser
+if sys.version_info[0] == 2:
+	import urllib
+	url_lib = urllib
+elif sys.version_info[0] == 3:
+	import urllib.request
+	url_lib = urllib.request
+match = re.search("(.*?)/[^/]*?$", sys.argv[0])
+if match != None:
+	os.chdir(os.getcwd() + "/" + match.group(1))
+
+url_bam = "http://github.com/matricks/bam/zipball/master"
+url_teeworlds = "http://github.com/oy/teeworlds/zipball/master"
+release_type = "server_release client_release"
+
+arguments = OptionParser()
+arguments.add_option("-b", "--url_bam", dest = "url_bam")
+arguments.add_option("-t", "--url_teeworlds", dest = "url_teeworlds")
+arguments.add_option("-r", "--release_type", dest = "release_type")
+(options, arguments) = arguments.parse_args()
+if options.url_bam == None:
+	options.url_bam = url_bam
+if options.url_teeworlds == None:
+	options.url_teeworlds = url_teeworlds
+if options.release_type == None:
+	options.release_type = release_type
+
+bam = options.url_bam[7:].split("/")
+version_bam = re.search(r"\d\.\d\.\d", bam[len(bam)-1])
+if version_bam:
+	version_bam = version_bam.group(0)
+else:
+	version_bam = "trunk"
+teeworlds = options.url_teeworlds[7:].split("/")
+version_teeworlds = re.search(r"\d\.\d\.\d", teeworlds[len(teeworlds)-1])
+if version_teeworlds:
+	version_teeworlds = version_teeworlds.group(0)
+else:
+	version_teeworlds = "trunk"
 
-name = "teeworlds"
-domain = "www.%s.com" % name
-version = sys.argv[1]
+bam_execution_path = ""
+if version_bam < "0.3.0":
+	bam_execution_path = "src%s" % os.sep
 
-bam_version = "bam-0.2.0"
+name = "teeworlds"
 
 flag_download = True
 flag_clean = True
@@ -16,138 +55,200 @@ else:
 	osname = os.popen("uname").readline().strip().lower()
 	if osname == "darwin":
 		osname = "osx"
-		
+
 	# get arch
 	machine = os.popen("uname -m").readline().strip().lower()
 	arch = "unknown"
-	
+
 	if machine[0] == "i" and machine[2:] == "86":
 		arch = "x86"
 	elif machine == "x86_64":
 		arch = "x86_64"
 	elif "power" in machine.lower():
 		arch = "ppc"
-		
-	platform = osname + "_" + arch
 
-print "%s-%s-%s" % (name,version, platform)
+	platform = osname + "_" + arch
 
-src_package = "%s-%s-src.zip" % (name, version)
+print("%s-%s-%s" % (name, version_teeworlds, platform))
 
-root_dir = os.getcwd() + "/work"
-src_dir = ""
+root_dir = os.getcwd() + os.sep
+work_dir = root_dir + "work"
 
-def fetch_file(server, url, local):
+def fetch_file(url):
 	try:
-		conn = httplib.HTTPConnection(server)
-		print "trying %s%s" % (server, url)
-		conn.request("GET", url)
-		response = conn.getresponse()
-		if response.status != 200:
-			return False
-		
-		f = file(local, "wb")
-		f.write(response.read())
-		f.close()
-		conn.close()
-		return True
+		print("trying %s" % url)
+		real_url = url_lib.urlopen(url).geturl()
+		local = real_url.split("/")
+		local = local[len(local)-1].split("?")
+		local = local[0]
+		url_lib.urlretrieve(real_url, local)
+		return local
 	except:
-		pass
-	return False
+		return False
 
 def unzip(filename, where):
-	z = zipfile.ZipFile(filename, "r")
+	try:
+		z = zipfile.ZipFile(filename, "r")
+	except:
+		return False
+	list = "\n"
 	for name in z.namelist():
+		list += "%s\n" % name
 		try: os.makedirs(where+"/"+os.path.dirname(name))
 		except: pass
-		
+
 		try:
-			f = file(where+"/"+name, "wb")
+			f = open(where+"/"+name, "wb")
 			f.write(z.read(name))
 			f.close()
 		except: pass
-		
-	z.close()
 
+	z.close()
 
-def path_exist(d):
-	try: os.stat(d)
-	except: return False
-	return True
+	directory = "[^/\n]*?/"
+	part_1 = "(?<=\n)"
+	part_2 = "[^/\n]+(?=\n)"
+	regular_expression = r"%s%s" % (part_1, part_2)
+	main_directory = re.search(regular_expression, list)
+	while main_directory == None:
+		part_1 += directory
+		regular_expression = r"%s%s" % (part_1, part_2)
+		main_directory = re.search(regular_expression, list)
+	main_directory = re.search(r".*/", "./%s" % main_directory.group(0))
+	return main_directory.group(0)
 
 def bail(reason):
-	print reason
-	os.chdir(root_dir)
+	print(reason)
+	os.chdir(work_dir)
 	sys.exit(-1)
 
-# clean
-if flag_clean:
-	print "*** cleaning ***"
+def clean():
+	print("*** cleaning ***")
 	try: shutil.rmtree("work")
 	except: pass
-	
+
+def file_exists(file):
+	try:
+		open(file).close()
+		return True
+	except:
+		return False;
+
+# clean
+if flag_clean:
+	clean()
+
 # make dir
 try: os.mkdir("work")
 except: pass
 
 # change dir
-os.chdir(root_dir)
+os.chdir(work_dir)
 
 # download
 if flag_download:
-	print "*** downloading bam source package ***"
-	if not fetch_file(domain, "trac/bam/browser/releases/"+bam_version+".zip?format=raw", "bam.zip"):
-			bail("couldn't find source package and couldn't download it")
-		
-	print "*** downloading %s source package ***" % name
-	if not fetch_file(domain, "/files/%s" % src_package, src_package):
-		if not fetch_file(domain, "/files/beta/%s" % src_package, src_package):
-			bail("couldn't find source package and couldn't download it")
+	print("*** downloading bam source package ***")
+	src_package_bam = fetch_file(options.url_bam)
+	if src_package_bam:
+		if version_bam == 'trunk':
+			version = re.search(r"-[^-]*?([^-]*?)\.[^.]*$", src_package_bam)
+			if version:
+				version_bam = version.group(1)
+	else:
+		bail("couldn't find source package and couldn't download it")
+
+	print("*** downloading %s source package ***" % name)
+	src_package_teeworlds = fetch_file(options.url_teeworlds)
+	if src_package_teeworlds:
+		if version_teeworlds == 'trunk':
+			version = re.search(r"-[^-]*?([^-]*?)\.[^.]*$", src_package_teeworlds)
+			if version:
+				version_teeworlds = version.group(1)
+	else:
+		bail("couldn't find source package and couldn't download it")
 
 # unpack
-print "*** unpacking source ***"
-unzip("bam.zip", ".")
-unzip(src_package, name)
-src_dir = name+"/"+ os.listdir(name+"/")[0]
+print("*** unpacking source ***")
+src_dir_bam = unzip(src_package_bam, ".")
+if not src_dir_bam:
+	bail("couldn't unpack source package")
+
+src_dir_teeworlds = unzip(src_package_teeworlds, ".")
+if not src_dir_teeworlds:
+	bail("couldn't unpack source package")
 
 # build bam
 if 1:
-	print "*** building bam ***"
-	os.chdir(bam_version)
-	output = "bam"
-	bam_cmd = "./bam"
+	print("*** building bam ***")
+	os.chdir("%s/%s" % (work_dir, src_dir_bam))
 	if os.name == "nt":
-		if os.system("make_win32_msvc.bat") != 0:
+		bam_compiled = False
+		compiler_bam = ["cl", "gcc"]
+		for compiler in compiler_bam:
+			if compiler == "cl":
+				os.system("make_win32_msvc.bat")
+			elif compiler == "gcc":
+				os.system("make_win32_mingw.bat")
+			if file_exists("%sbam.exe" % bam_execution_path) == True:
+				bam_compiled = True
+				break
+		if bam_compiled == False:
 			bail("failed to build bam")
-		output += ".exe"
-		bam_cmd = "bam"
 	else:
-		if os.system("sh make_unix.sh") != 0:
+		os.system("sh make_unix.sh")
+		if file_exists("%sbam" % bam_execution_path) == False:
 			bail("failed to build bam")
-	os.chdir(root_dir)
-	shutil.copy(bam_version+"/src/"+output, src_dir+"/"+output)
+	os.chdir(work_dir)
 
 # build the game
 if 1:
-	print "*** building %s ***" % name
-	os.chdir(src_dir)
-	if os.system("%s server_release client_release" % bam_cmd) != 0:
+	print("*** building %s ***" % name)
+	if os.name == "nt":
+		winreg_lib = _compatibility._import(("_winreg", "winreg"))
+		exec("import %s" % winreg_lib)
+		exec("winreg_lib = %s" % winreg_lib)
+		try:
+			key = winreg_lib.OpenKey(winreg_lib.HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\VisualStudio\SxS\VS7")
+			try:
+				vsinstalldir = winreg_lib.QueryValueEx(key, "10.0")[0]
+			except:
+				try:
+					vsinstalldir = winreg_lib.QueryValueEx(key, "9.0")[0]
+				except:
+					try:
+						vsinstalldir = winreg_lib.QueryValueEx(key, "8.0")[0]
+					except:
+						bail("failed to build %s" % name)
+			winreg_lib.CloseKey(key)
+			file = open("build.bat", "wb")
+			file.write(('call "%sVC\\vcvarsall.bat"\ncd %s\n"%s\\%s%sbam" config\n"%s\\%s%sbam" %s' % (vsinstalldir, src_dir_teeworlds, work_dir, src_dir_bam, bam_execution_path, work_dir, src_dir_bam, bam_execution_path, options.release_type)).encode("utf-8"))
+			file.close()
+			command = os.system("build.bat")
+		except:
+			pass
+	else:
+		os.chdir(src_dir_teeworlds)
+		command = os.system("%s/%s%sbam %s" % (work_dir, src_dir_bam, bam_execution_path, options.release_type))
+	if command != 0:
 		bail("failed to build %s" % name)
-	os.chdir(root_dir)
+	os.chdir(work_dir)
 
 # make release
 if 1:
-	print "*** making release ***"
-	os.chdir(src_dir)
-	if os.system("python scripts/make_release.py %s %s" % (version, platform)) != 0:
-		bail("failed to make a relase of %s"%name)
+	print("*** making release ***")
+	os.chdir(src_dir_teeworlds)
+	command = '"%smake_release.py" %s %s' % (root_dir, version_teeworlds, platform)
+	if os.name != "nt":
+		command = "python %s" % command
+	if os.system(command) != 0:
+		bail("failed to make a relase of %s" % name)
 	final_output = "FAIL"
 	for f in os.listdir("."):
-		if version in f and platform in f and name in f and (".zip" in f or ".tar.gz" in f):
+		if version_teeworlds in f and platform in f and name in f and (".zip" in f or ".tar.gz" in f):
 			final_output = f
+	os.chdir(work_dir)
+	shutil.copy("%s/%s" % (src_dir_teeworlds, final_output), "../"+final_output)
 	os.chdir(root_dir)
-	shutil.copy("%s/%s" % (src_dir, final_output), "../"+final_output)
-
-print "*** all done ***"
+	clean()
 
-		
+print("*** all done ***")