1 import imp
, optparse
, os
, re
, shutil
, sys
, zipfile
2 from optparse
import OptionParser
3 if sys
.version_info
[0] == 2:
6 elif sys
.version_info
[0] == 3:
8 url_lib
= urllib
.request
9 match
= re
.search('(.*)/', sys
.argv
[0])
11 os
.chdir(match
.group(1))
14 url_bam
= "http://github.com/matricks/bam/zipball/master"
15 url_teeworlds
= "http://github.com/oy/teeworlds/zipball/master"
16 release_type
= "server_release client_release"
18 arguments
= OptionParser()
19 arguments
.add_option("-b", "--url_bam", dest
= "url_bam")
20 arguments
.add_option("-t", "--url_teeworlds", dest
= "url_teeworlds")
21 arguments
.add_option("-r", "--release_type", dest
= "release_type")
22 (options
, arguments
) = arguments
.parse_args()
23 if options
.url_bam
== None:
24 options
.url_bam
= url_bam
25 if options
.url_teeworlds
== None:
26 options
.url_teeworlds
= url_teeworlds
27 if options
.release_type
== None:
28 options
.release_type
= release_type
30 bam
= options
.url_bam
[7:].split("/")
31 version_bam
= re
.search(r
"\d\.\d\.\d", bam
[len(bam
)-1])
33 version_bam
= version_bam
.group(0)
36 teeworlds
= options
.url_teeworlds
[7:].split("/")
37 version_teeworlds
= re
.search(r
"\d\.\d\.\d", teeworlds
[len(teeworlds
)-1])
39 version_teeworlds
= version_teeworlds
.group(0)
41 version_teeworlds
= "trunk"
43 bam_execution_path
= ""
44 if version_bam
< "0.3.0":
45 bam_execution_path
= "src%s" % os
.sep
53 flag_build_teeworlds
= True
54 flag_make_release
= True
60 osname
= os
.popen("uname").readline().strip().lower()
61 if osname
== "darwin":
65 machine
= os
.popen("uname -m").readline().strip().lower()
68 if machine
[0] == "i" and machine
[2:] == "86":
70 elif machine
== "x86_64":
72 elif "power" in machine
.lower():
75 platform
= osname
+ "_" + arch
77 print("%s-%s-%s" % (name
, version_teeworlds
, platform
))
79 root_dir
= os
.getcwd() + os
.sep
80 work_dir
= root_dir
+ "scripts/work"
84 print("trying %s" % url
)
85 real_url
= url_lib
.urlopen(url
).geturl()
86 local
= real_url
.split("/")
87 local
= local
[len(local
)-1].split("?")
89 url_lib
.urlretrieve(real_url
, local
)
94 def unzip(filename
, where
):
96 z
= zipfile
.ZipFile(filename
, "r")
100 for name
in z
.namelist():
101 list += "%s\n" % name
102 try: os
.makedirs(where
+"/"+os
.path
.dirname(name
))
106 f
= open(where
+"/"+name
, "wb")
107 f
.write(z
.read(name
))
113 directory
= "[^/\n]*?/"
115 part_2
= "[^/\n]+(?=\n)"
116 regular_expression
= r
"%s%s" % (part_1
, part_2
)
117 main_directory
= re
.search(regular_expression
, list)
118 while main_directory
== None:
120 regular_expression
= r
"%s%s" % (part_1
, part_2
)
121 main_directory
= re
.search(regular_expression
, list)
122 main_directory
= re
.search(r
".*/", "./%s" % main_directory
.group(0))
123 return main_directory
.group(0)
131 print("*** cleaning ***")
132 try: shutil
.rmtree(work_dir
)
135 def file_exists(file):
142 def search_object(directory
, object):
143 directory
= os
.listdir(directory
)
144 for entry
in directory
:
145 match
= re
.search(object, entry
)
154 try: os
.mkdir(work_dir
)
162 print("*** downloading bam source package ***")
163 src_package_bam
= fetch_file(options
.url_bam
)
165 if version_bam
== 'trunk':
166 version
= re
.search(r
"-[^-]*?([^-]*?)\.[^.]*$", src_package_bam
)
168 version_bam
= version
.group(1)
170 bail("couldn't find bam source package and couldn't download it")
172 print("*** downloading %s source package ***" % name
)
173 src_package_teeworlds
= fetch_file(options
.url_teeworlds
)
174 if src_package_teeworlds
:
175 if version_teeworlds
== 'trunk':
176 version
= re
.search(r
"-[^-]*?([^-]*?)\.[^.]*$", src_package_teeworlds
)
178 version_teeworlds
= version
.group(1)
180 bail("couldn't find %s source package and couldn't download it" % name
)
184 print("*** unpacking source ***")
185 if hasattr(locals(), 'src_package_bam') == False:
186 src_package_bam
= search_object(work_dir
, r
"bam.*?\.")
187 if not src_package_bam
:
188 bail("couldn't find bam source package")
189 src_dir_bam
= unzip(src_package_bam
, ".")
191 bail("couldn't unpack bam source package")
193 if hasattr(locals(), 'src_package_teeworlds') == False:
194 src_package_teeworlds
= search_object(work_dir
, r
"teeworlds.*?\.")
195 if not src_package_bam
:
196 bail("couldn't find %s source package" % name
)
197 src_dir_teeworlds
= unzip(src_package_teeworlds
, ".")
198 if not src_dir_teeworlds
:
199 bail("couldn't unpack %s source package" % name
)
203 print("*** building bam ***")
204 os
.chdir("%s/%s" % (work_dir
, src_dir_bam
))
207 compiler_bam
= ["cl", "gcc"]
208 for compiler
in compiler_bam
:
210 os
.system("make_win32_msvc.bat")
211 elif compiler
== "gcc":
212 os
.system("make_win32_mingw.bat")
213 if file_exists("%sbam.exe" % bam_execution_path
) == True:
216 if bam_compiled
== False:
217 bail("failed to build bam")
219 os
.system("sh make_unix.sh")
220 if file_exists("%sbam" % bam_execution_path
) == False:
221 bail("failed to build bam")
225 if flag_build_teeworlds
:
226 print("*** building %s ***" % name
)
227 if hasattr(locals(), 'src_dir_bam') == False:
228 src_dir_bam
= search_object(work_dir
, r
"bam[^\.]*$") + os
.sep
230 directory
= src_dir_bam
+ bam_execution_path
234 if not search_object(directory
, file):
235 bail("couldn't find bam")
237 bail("couldn't find bam")
238 if hasattr(locals(), 'src_dir_teeworlds') == False:
239 src_dir_teeworlds
= search_object(work_dir
, r
"teeworlds[^\.]*$")
240 if not src_dir_teeworlds
:
241 bail("couldn't find %s source" % name
)
244 file = open("build.bat", "wb")
245 content
= "@echo off\n"
246 content
+= "@REM check if we already have the tools in the environment\n"
247 content
+= "if exist \"%VCINSTALLDIR%\" (\ngoto compile\n)\n"
248 content
+= "@REM Check for Visual Studio\n"
249 content
+= "if exist \"%VS100COMNTOOLS%\" (\nset VSPATH=\"%VS100COMNTOOLS%\"\ngoto set_env\n)\n"
250 content
+= "if exist \"%VS90COMNTOOLS%\" (\nset VSPATH=\"%VS90COMNTOOLS%\"\ngoto set_env\n)\n"
251 content
+= "if exist \"%VS80COMNTOOLS%\" (\nset VSPATH=\"%VS80COMNTOOLS%\"\ngoto set_env\n)\n\n"
252 content
+= "echo You need Microsoft Visual Studio 8, 9 or 10 installed\n"
254 content
+= "@ setup the environment\n"
255 content
+= ":set_env\n"
256 content
+= "call %VSPATH%vsvars32.bat\n\n"
257 content
+= ":compile\n"
258 content
+= 'cd %s\n"%s\\%s%sbam" config\n"%s\\%s%sbam" %s' % (src_dir_teeworlds
, work_dir
, src_dir_bam
, bam_execution_path
, work_dir
, src_dir_bam
, bam_execution_path
, options
.release_type
)
259 file.write(content
.encode())
261 command
= os
.system("build.bat")
263 os
.chdir(src_dir_teeworlds
)
264 command
= os
.system("%s/%s%sbam %s" % (work_dir
, src_dir_bam
, bam_execution_path
, options
.release_type
))
266 bail("failed to build %s" % name
)
270 if flag_make_release
:
271 print("*** making release ***")
272 if hasattr(locals(), 'src_dir_teeworlds') == False:
273 src_dir_teeworlds
= search_object(work_dir
, r
"teeworlds[^\.]*$")
274 if not src_dir_teeworlds
:
275 bail("couldn't find %s source" % name
)
276 os
.chdir(src_dir_teeworlds
)
277 command
= '"%s/%s/scripts/make_release.py" %s %s' % (work_dir
, src_dir_teeworlds
, version_teeworlds
, platform
)
279 command
= "python %s" % command
280 if os
.system(command
) != 0:
281 bail("failed to make a relase of %s" % name
)
282 final_output
= "FAIL"
283 for f
in os
.listdir("."):
284 if version_teeworlds
in f
and platform
in f
and name
in f
and (".zip" in f
or ".tar.gz" in f
):
287 shutil
.copy("%s/%s" % (src_dir_teeworlds
, final_output
), "../"+final_output
)
291 print("*** all done ***")