blob: 377fed7e3ea60cae783775692247d51e7c663af9 [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:
Benny Prijonod9998a92010-04-20 10:05:09 +000089 sys.stderr.write("Error: EPOCROOT environment variable is not set\n")
Benny Prijono462a67c2010-03-27 07:49:18 +000090 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:
Benny Prijonod9998a92010-04-20 10:05:09 +0000110 sys.stderr.write("Error: default SDK in device doesn't match EPOCROOT\n")
111 sys.stderr.write("Default device SDK = " + sdk2 + "\n")
112 sys.stderr.write("EPOCROOT SDK = " + sdk1 + "\n")
Benny Prijono462a67c2010-03-27 07:49:18 +0000113 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":
Benny Prijonod9998a92010-04-20 10:05:09 +0000132 os_info = "-" + "-".join(platform.linux_distribution()[0:2])
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000133
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:
Benny Prijonod9998a92010-04-20 10:05:09 +0000162 sys.stderr.write("Error: unsupported build type '" + build_type + "'\n")
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000163 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")
Benny Prijonod9998a92010-04-20 10:05:09 +0000187 elif text.find("$(IPPROOT)") >= 0:
188 if not os.environ.has_key("IPPROOT"):
189 sys.stderr.write("Error: environment variable IPPROOT is needed but not set\n")
190 sys.exit(1)
191 text = text.replace("$(IPPROOT)", os.environ["IPPROOT"])
192 elif text.find("$(IPPSAMPLES)") >= 0:
193 if not os.environ.has_key("IPPSAMPLES"):
194 sys.stderr.write("Error: environment variable IPPSAMPLES is needed but not set\n")
195 sys.exit(1)
196 text = text.replace("$(IPPSAMPLES)", os.environ["IPPSAMPLES"])
197 elif text.find("$(IPPARCH)") >= 0:
198 if not os.environ.has_key("IPPARCH"):
199 text = text.replace("$(IPPARCH)", "")
200 else:
201 text = text.replace("$(IPPARCH)", os.environ["IPPARCH"])
Benny Prijonof44f79b2010-03-23 14:03:30 +0000202 elif text.find("$(OS)") >= 0:
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000203 text = text.replace("$(OS)", os_info)
Benny Prijonof44f79b2010-03-23 14:03:30 +0000204 elif text.find("$(SUFFIX)") >= 0:
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000205 text = text.replace("$(SUFFIX)", suffix)
Benny Prijonof44f79b2010-03-23 14:03:30 +0000206 elif text.find("$(HOSTNAME)") >= 0:
207 text = text.replace("$(HOSTNAME)", socket.gethostname())
208 elif text.find("$(PJDIR)") >= 0:
209 wdir = os.path.join(os.getcwd(), "../..")
210 wdir = os.path.normpath(wdir)
211 text = text.replace("$(PJDIR)", wdir)
212 else:
213 break
214 return text
215
216
217def main(args):
Benny Prijono462a67c2010-03-27 07:49:18 +0000218 global vs_target, s60_target, build_type
Benny Prijonod9998a92010-04-20 10:05:09 +0000219 output = sys.stdout
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000220 usage = """Usage: configure.py [OPTIONS] scenario_template_file
221
222Where OPTIONS:
Benny Prijonod9998a92010-04-20 10:05:09 +0000223 -o FILE Output to file, otherwise to stdout.
224 -t TYPE Specify build type. If not specified, it will be
Benny Prijono462a67c2010-03-27 07:49:18 +0000225 asked if necessary. Values are:
226 vs: Visual Studio
227 gnu: Makefile based
228 s60: Symbian S60
229 -vstarget TARGETNAME Specify Visual Studio target name if build type is set
230 to vs. If not specified then it will be asked.
231 Sample target names:
232 - Debug
233 - Release
234 - or any other target in the project file
235 -s60target TARGETNAME Specify S60 target name if build type is set to s60.
236 If not specified then it will be asked. Sample target
237 names:
238 - "gcce udeb"
239 - "gcce urel"
Benny Prijonof44f79b2010-03-23 14:03:30 +0000240"""
241
242 args.pop(0)
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000243 while len(args):
Benny Prijonod9998a92010-04-20 10:05:09 +0000244 if args[0]=='-o':
245 args.pop(0)
246 if len(args):
247 output = open(args[0], "wt")
248 args.pop(0)
249 else:
250 sys.stderr.write("Error: needs value for -o\n")
251 sys.exit(1)
252 elif args[0]=='-vstarget':
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000253 args.pop(0)
254 if len(args):
255 vs_target = args[0]
256 args.pop(0)
257 else:
Benny Prijono462a67c2010-03-27 07:49:18 +0000258 sys.stderr.write("Error: needs value for -vstarget\n")
259 sys.exit(1)
260 elif args[0]=='-s60target':
261 args.pop(0)
262 if len(args):
263 s60_target = args[0]
264 args.pop(0)
265 else:
266 sys.stderr.write("Error: needs value for -s60target\n")
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000267 sys.exit(1)
268 elif args[0]=='-t':
269 args.pop(0)
270 if len(args):
271 build_type = args[0].lower()
272 args.pop(0)
273 else:
274 sys.stderr.write("Error: needs value for -t\n")
275 sys.exit(1)
Benny Prijono462a67c2010-03-27 07:49:18 +0000276 if not ["vs", "gnu", "s60"].count(build_type):
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000277 sys.stderr.write("Error: invalid -t argument value\n")
278 sys.exit(1)
279 else:
280 break
281
282 if len(args) != 1:
Benny Prijonod9998a92010-04-20 10:05:09 +0000283 sys.stderr.write(usage + "\n")
Benny Prijonof44f79b2010-03-23 14:03:30 +0000284 return 1
285
Benny Prijonod9998a92010-04-20 10:05:09 +0000286 if not build_type:
Benny Prijono1de150f2010-08-18 04:16:04 +0000287 defval = "vs"
288 if "SHELL" in os.environ:
289 shell = os.environ["SHELL"]
290 if shell.find("sh") > -1:
291 defval = "gnu"
292 print "Enter the build type (values: vs, gnu, s60) [%s]: " % (defval),
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000293 build_type = sys.stdin.readline().replace("\n", "").replace("\r", "")
294 if not build_type:
Benny Prijono1de150f2010-08-18 04:16:04 +0000295 build_type = defval
Benny Prijonof9ebaf62010-03-27 02:35:06 +0000296
297
Benny Prijonof44f79b2010-03-23 14:03:30 +0000298 tpl_file = args[len(args)-1]
299 if not os.path.isfile(tpl_file):
300 print "Error: unable to find template file '%s'" % (tpl_file)
301 return 1
302
303 f = open(tpl_file, "r")
304 tpl = f.read()
305 f.close()
306
307 tpl = replace_vars(tpl)
Benny Prijonod9998a92010-04-20 10:05:09 +0000308 output.write(tpl)
309 if output != sys.stdout:
310 output.close()
Benny Prijonof44f79b2010-03-23 14:03:30 +0000311 return 0
312
313
314if __name__ == "__main__":
315 rc = main(sys.argv)
316 sys.exit(rc)
317