diff options
| author | Sworddragon <sworddragon2@aol.com> | 2010-12-05 23:01:05 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-12-16 03:08:45 +0100 |
| commit | 9852ec658cb668f9e9007e266381b47faeadb4c3 (patch) | |
| tree | 6db806f6e007ce8a0a726b4fbbb7600024982d43 | |
| parent | 6063b4c14dd26b84c91a8e8d62f3921b4789a80a (diff) | |
| download | zcatch-9852ec658cb668f9e9007e266381b47faeadb4c3.tar.gz zcatch-9852ec658cb668f9e9007e266381b47faeadb4c3.zip | |
Updated build.py
| -rw-r--r-- | scripts/build.py | 259 |
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 ***") |