blob: 06a65315247bf3e67e41ac98a2459fd547219834 [file] [log] [blame]
Benny Prijonof44f79b2010-03-23 14:03:30 +00001#!/usr/bin/python
2
3import optparse
4import os
5import platform
6import socket
7import subprocess
8import sys
9
10PROG = "r" + "$Rev: 17 $".strip("$ ").replace("Rev: ", "")
Benny Prijonof9ebaf62010-03-27 02:35:06 +000011PYTHON = os.path.basename(sys.executable)
12build_type = ""
13vs_target = ""
Benny Prijono462a67c2010-03-27 07:49:18 +000014s60_target = ""
Benny Prijonof44f79b2010-03-23 14:03:30 +000015
16#
17# Get gcc version
18#
19def gcc_version(gcc):
20 proc = subprocess.Popen(gcc + " -v", stdout=subprocess.PIPE,
21 stderr=subprocess.STDOUT, shell=True)
22 ver = ""
23 while True:
24 s = proc.stdout.readline()
25 if not s:
26 break
27 if s.find("gcc version") >= 0:
28 ver = s.split(None, 3)[2]
29 break
30 proc.wait()
31 return "gcc-" + ver
32
Benny Prijonof9ebaf62010-03-27 02:35:06 +000033#
Benny Prijono462a67c2010-03-27 07:49:18 +000034# Get Visual Studio info
Benny Prijonof9ebaf62010-03-27 02:35:06 +000035#
36class VSVersion:
37 def __init__(self):
38 self.version = "8"
39 self.release = "2005"
40
41 proc = subprocess.Popen("cl", stdout=subprocess.PIPE,
42 stderr=subprocess.STDOUT)
43 while True:
44 s = proc.stdout.readline()
45 if s=="":
46 break
47 pos = s.find("Version")
48 if pos > 0:
49 proc.wait()
50 s = s[pos+8:]
51 ver = s.split(None, 1)[0]
52 major = ver[0:2]
53 if major=="12":
54 self.version = "6"
55 self.release = "98"
56 break
57 elif major=="13":
58 self.version = "7"
59 self.release = "2003"
60 break
61 elif major=="14":
62 self.version = "8"
63 self.release = "2005"
64 break
65 elif major=="15":
66 self.version = "9"
67 self.release = "2008"
68 break
Benny Prijono3d71eb02010-03-30 13:02:40 +000069 elif major=="16":
Benny Prijonof9ebaf62010-03-27 02:35:06 +000070 self.version = "10"
71 self.release = "2010"
72 break
Benny Prijono3d71eb02010-03-30 13:02:40 +000073 else:
74 self.version = "11"
75 self.release = "2012"
76 break
Benny Prijonof9ebaf62010-03-27 02:35:06 +000077 proc.wait()
78 self.vs_version = "vs" + self.version
79 self.vs_release = "vs" + self.release
80
81
Benny Prijono462a67c2010-03-27 07:49:18 +000082#
83# Get S60 SDK info
84#
85class S60SDK:
86 def __init__(self):
87 # Check that EPOCROOT is set
88 if not "EPOCROOT" in os.environ:
89 print "Error: EPOCROOT environment variable is not set"
90 sys.exit(1)
91 epocroot = os.environ["EPOCROOT"]
92 # EPOCROOT must have trailing backslash
93 if epocroot[-1] != "\\":
94 epocroot = epocroot + "\\"
95 os.environ["EPOCROOT"] = epocroot
96 sdk1 = epocroot.split("\\")[-2]
97
98 # Check that correct device is set
99 proc = subprocess.Popen("devices", stdout=subprocess.PIPE,
100 stderr=subprocess.STDOUT, shell=True)
101 sdk2 = ""
102 while True:
103 line = proc.stdout.readline()
104 if line.find("- default") > 0:
105 sdk2 = line.split(":",1)[0]
106 break
107 proc.wait()
108
109 if sdk1 != sdk2:
110 print "Error: default SDK in device doesn't match EPOCROOT"
111 print "Default device SDK =", sdk2
112 print "EPOCROOT SDK =", sdk1
113 sys.exit(1)
114
115 self.name = sdk2.replace("_", "-")
116
117
118
Benny Prijonof44f79b2010-03-23 14:03:30 +0000119def replace_vars(text):
Benny Prijono462a67c2010-03-27 07:49:18 +0000120 global vs_target, s60_target, build_type
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000121 suffix = ""
Benny Prijono462a67c2010-03-27 07:49:18 +0000122
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000123 os_info = platform.system() + platform.release() + "-" + platform.machine()
124
125 # osinfo
Benny Prijono462a67c2010-03-27 07:49:18 +0000126 if build_type == "s60":
127 os_info = S60SDK().name
128 elif platform.system().lower() == "windows" or platform.system().lower() == "microsoft":
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000129 if platform.system().lower() == "microsoft":
130 os_info = platform.release() + "-" + platform.version() + "-" + platform.win32_ver()[2]
131 elif platform.system().lower() == "linux":
132 os_info = + "-" + "-".join(platform.linux_distribution()[0:2])
133
Benny Prijono462a67c2010-03-27 07:49:18 +0000134 # vs_target
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000135 if not vs_target and text.find("$(VSTARGET)") >= 0:
136 if build_type != "vs":
Benny Prijono462a67c2010-03-27 07:49:18 +0000137 sys.stderr.write("Warning: $(VSTARGET) only valid for Visual Studio\n")
138 print "Enter Visual Studio vs_target name (e.g. Release, Debug) [Release]: ",
139 vs_target = sys.stdin.readline().replace("\n", "").replace("\r", "")
140 if not vs_target:
141 vs_target = "Release"
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000142
Benny Prijono462a67c2010-03-27 07:49:18 +0000143 # s60_target
144 if not s60_target and text.find("$(S60TARGET)") >= 0:
145 if build_type != "s60":
146 sys.stderr.write("Warning: $(S60TARGET) only valid for S60\n")
147 print "Enter S60 target name (e.g. \"gcce urel\") [gcce urel]: ",
148 s60_target = sys.stdin.readline().replace("\n", "").replace("\r", "")
149 if not s60_target:
150 s60_target = "gcce urel"
151
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000152 # Suffix
153 if build_type == "vs":
154 suffix = "i386-Win32-vc8-" + vs_target
Benny Prijono462a67c2010-03-27 07:49:18 +0000155 elif build_type == "s60":
156 suffix = S60SDK().name + "-" + s60_target.replace(" ", "-")
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000157 elif build_type == "gnu":
158 proc = subprocess.Popen("sh config.guess", cwd="../..",
159 shell=True, stdout=subprocess.PIPE)
160 suffix = proc.stdout.readline().rstrip(" \r\n")
161 else:
162 sys.stderr.write("Error: unsupported built type " + build_type + "\n")
163 sys.exit(1)
164
Benny Prijonof44f79b2010-03-23 14:03:30 +0000165 while True:
166 if text.find("$(PJSUA-TESTS)") >= 0:
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000167 # Determine pjsua exe to use
168 exe = "../../pjsip-apps/bin/pjsua-" + suffix
169 proc = subprocess.Popen(PYTHON + " runall.py --list-xml -e " + exe,
170 cwd="../pjsua",
Benny Prijonof44f79b2010-03-23 14:03:30 +0000171 shell=True, stdout=subprocess.PIPE)
172 content = proc.stdout.read()
173 text = text.replace("$(PJSUA-TESTS)", content)
174 elif text.find("$(GCC)") >= 0:
175 text = text.replace("$(GCC)", gcc_version("gcc"))
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000176 elif text.find("$(VS)") >= 0:
177 vsver = VSVersion()
Benny Prijono462a67c2010-03-27 07:49:18 +0000178 text = text.replace("$(VS)", VSVersion().vs_release)
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000179 elif text.find("$(VSTARGET)") >= 0:
180 text = text.replace("$(VSTARGET)", vs_target)
Benny Prijono462a67c2010-03-27 07:49:18 +0000181 elif text.find("$(S60TARGET)") >= 0:
182 text = text.replace("$(S60TARGET)", s60_target)
183 elif text.find("$(S60TARGETNAME)") >= 0:
184 text = text.replace("$(S60TARGETNAME)", s60_target.replace(" ", "-"))
Benny Prijonof44f79b2010-03-23 14:03:30 +0000185 elif text.find("$(DISABLED)") >= 0:
186 text = text.replace("$(DISABLED)", "0")
187 elif text.find("$(OS)") >= 0:
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000188 text = text.replace("$(OS)", os_info)
Benny Prijonof44f79b2010-03-23 14:03:30 +0000189 elif text.find("$(SUFFIX)") >= 0:
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000190 text = text.replace("$(SUFFIX)", suffix)
Benny Prijonof44f79b2010-03-23 14:03:30 +0000191 elif text.find("$(HOSTNAME)") >= 0:
192 text = text.replace("$(HOSTNAME)", socket.gethostname())
193 elif text.find("$(PJDIR)") >= 0:
194 wdir = os.path.join(os.getcwd(), "../..")
195 wdir = os.path.normpath(wdir)
196 text = text.replace("$(PJDIR)", wdir)
197 else:
198 break
199 return text
200
201
202def main(args):
Benny Prijono462a67c2010-03-27 07:49:18 +0000203 global vs_target, s60_target, build_type
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000204 usage = """Usage: configure.py [OPTIONS] scenario_template_file
205
206Where OPTIONS:
Benny Prijono462a67c2010-03-27 07:49:18 +0000207 -t TYPE Specify build type for Windows since we support both
208 Visual Studio and Mingw. If not specified, it will be
209 asked if necessary. Values are:
210 vs: Visual Studio
211 gnu: Makefile based
212 s60: Symbian S60
213 -vstarget TARGETNAME Specify Visual Studio target name if build type is set
214 to vs. If not specified then it will be asked.
215 Sample target names:
216 - Debug
217 - Release
218 - or any other target in the project file
219 -s60target TARGETNAME Specify S60 target name if build type is set to s60.
220 If not specified then it will be asked. Sample target
221 names:
222 - "gcce udeb"
223 - "gcce urel"
Benny Prijonof44f79b2010-03-23 14:03:30 +0000224"""
225
226 args.pop(0)
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000227 while len(args):
Benny Prijono462a67c2010-03-27 07:49:18 +0000228 if args[0]=='-vstarget':
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000229 args.pop(0)
230 if len(args):
231 vs_target = args[0]
232 args.pop(0)
233 else:
Benny Prijono462a67c2010-03-27 07:49:18 +0000234 sys.stderr.write("Error: needs value for -vstarget\n")
235 sys.exit(1)
236 elif args[0]=='-s60target':
237 args.pop(0)
238 if len(args):
239 s60_target = args[0]
240 args.pop(0)
241 else:
242 sys.stderr.write("Error: needs value for -s60target\n")
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000243 sys.exit(1)
244 elif args[0]=='-t':
245 args.pop(0)
246 if len(args):
247 build_type = args[0].lower()
248 args.pop(0)
249 else:
250 sys.stderr.write("Error: needs value for -t\n")
251 sys.exit(1)
Benny Prijono462a67c2010-03-27 07:49:18 +0000252 if not ["vs", "gnu", "s60"].count(build_type):
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000253 sys.stderr.write("Error: invalid -t argument value\n")
254 sys.exit(1)
255 else:
256 break
257
258 if len(args) != 1:
Benny Prijonof44f79b2010-03-23 14:03:30 +0000259 print usage
260 return 1
261
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000262 if not build_type and (platform.system().lower() == "windows" or platform.system().lower() == "microsoft"):
Benny Prijono462a67c2010-03-27 07:49:18 +0000263 print "Enter the build type (values: vs, gnu, s60) [vs]: ",
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000264 build_type = sys.stdin.readline().replace("\n", "").replace("\r", "")
265 if not build_type:
266 build_type = "vs"
267
268
Benny Prijonof44f79b2010-03-23 14:03:30 +0000269 tpl_file = args[len(args)-1]
270 if not os.path.isfile(tpl_file):
271 print "Error: unable to find template file '%s'" % (tpl_file)
272 return 1
273
274 f = open(tpl_file, "r")
275 tpl = f.read()
276 f.close()
277
278 tpl = replace_vars(tpl)
279 print tpl
280 return 0
281
282
283if __name__ == "__main__":
284 rc = main(sys.argv)
285 sys.exit(rc)
286