summaryrefslogtreecommitdiff
path: root/tests/automated/configure.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/automated/configure.py')
-rwxr-xr-xtests/automated/configure.py354
1 files changed, 354 insertions, 0 deletions
diff --git a/tests/automated/configure.py b/tests/automated/configure.py
new file mode 100755
index 0000000..d277471
--- /dev/null
+++ b/tests/automated/configure.py
@@ -0,0 +1,354 @@
+#!/usr/bin/python
+
+import optparse
+import os
+import platform
+import socket
+import subprocess
+import sys
+
+PROG = "r" + "$Rev: 17 $".strip("$ ").replace("Rev: ", "")
+PYTHON = os.path.basename(sys.executable)
+build_type = ""
+vs_target = ""
+s60_target = ""
+no_test = False
+no_pjsua_test = False
+
+#
+# Get gcc version
+#
+def gcc_version(gcc):
+ proc = subprocess.Popen(gcc + " -v", stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT, shell=True)
+ ver = ""
+ while True:
+ s = proc.stdout.readline()
+ if not s:
+ break
+ if s.find("gcc version") >= 0:
+ ver = s.split(None, 3)[2]
+ break
+ proc.wait()
+ return "gcc-" + ver
+
+#
+# Get Visual Studio info
+#
+class VSVersion:
+ def __init__(self):
+ self.version = "8"
+ self.release = "2005"
+
+ proc = subprocess.Popen("cl", stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ while True:
+ s = proc.stdout.readline()
+ if s=="":
+ break
+ pos = s.find("Version")
+ if pos > 0:
+ proc.wait()
+ s = s[pos+8:]
+ ver = s.split(None, 1)[0]
+ major = ver[0:2]
+ if major=="12":
+ self.version = "6"
+ self.release = "98"
+ break
+ elif major=="13":
+ self.version = "7"
+ self.release = "2003"
+ break
+ elif major=="14":
+ self.version = "8"
+ self.release = "2005"
+ break
+ elif major=="15":
+ self.version = "9"
+ self.release = "2008"
+ break
+ elif major=="16":
+ self.version = "10"
+ self.release = "2010"
+ break
+ else:
+ self.version = "11"
+ self.release = "2012"
+ break
+ proc.wait()
+ self.vs_version = "vs" + self.version
+ self.vs_release = "vs" + self.release
+
+
+#
+# Get S60 SDK info
+#
+class S60SDK:
+ def __init__(self):
+ self.epocroot = ""
+ self.sdk = ""
+ self.device = ""
+
+ # Check that EPOCROOT is set
+ if not "EPOCROOT" in os.environ:
+ sys.stderr.write("Error: EPOCROOT environment variable is not set\n")
+ sys.exit(1)
+ epocroot = os.environ["EPOCROOT"]
+ # EPOCROOT must have trailing backslash
+ if epocroot[-1] != "\\":
+ epocroot = epocroot + "\\"
+ os.environ["EPOCROOT"] = epocroot
+ self.epocroot = epocroot
+ self.sdk = sdk1 = epocroot.split("\\")[-2]
+ self.device = "@" + self.sdk + ":com.nokia.s60"
+
+ # Check that correct device is set
+ proc = subprocess.Popen("devices", stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT, shell=True)
+ sdk2 = ""
+ while True:
+ line = proc.stdout.readline()
+ if line.find("- default") > 0:
+ sdk2 = line.split(":",1)[0]
+ break
+ proc.wait()
+
+ if sdk1 != sdk2:
+ sys.stderr.write("Error: default SDK in device doesn't match EPOCROOT\n")
+ sys.stderr.write("Default device SDK = '" + sdk2 + "'\n")
+ sys.stderr.write("EPOCROOT SDK = '" + sdk1 + "'\n")
+ sys.exit(1)
+
+ self.name = sdk2.replace("_", "-")
+
+
+
+def replace_vars(text):
+ global vs_target, s60_target, build_type, no_test, no_pjsua_test
+ suffix = ""
+
+ os_info = platform.system() + platform.release() + "-" + platform.machine()
+
+ # osinfo
+ s60sdk_var = None
+ if build_type == "s60":
+ s60sdk_var = S60SDK()
+ os_info = s60sdk_var.name
+ elif platform.system().lower() == "windows" or platform.system().lower() == "microsoft":
+ if platform.system().lower() == "microsoft":
+ os_info = platform.release() + "-" + platform.version() + "-" + platform.win32_ver()[2]
+ elif platform.system().lower() == "linux":
+ os_info = "-" + "-".join(platform.linux_distribution()[0:2])
+
+ # vs_target
+ if not vs_target and text.find("$(VSTARGET)") >= 0:
+ if build_type != "vs":
+ sys.stderr.write("Warning: $(VSTARGET) only valid for Visual Studio\n")
+ print "Enter Visual Studio vs_target name (e.g. Release, Debug) [Release]: ",
+ vs_target = sys.stdin.readline().replace("\n", "").replace("\r", "")
+ if not vs_target:
+ vs_target = "Release"
+
+ # s60_target
+ if not s60_target and text.find("$(S60TARGET)") >= 0:
+ if build_type != "s60":
+ sys.stderr.write("Warning: $(S60TARGET) only valid for S60\n")
+ print "Enter S60 target name (e.g. \"gcce urel\") [gcce urel]: ",
+ s60_target = sys.stdin.readline().replace("\n", "").replace("\r", "")
+ if not s60_target:
+ s60_target = "gcce urel"
+
+ # Suffix
+ if build_type == "vs":
+ suffix = "i386-Win32-vc8-" + vs_target
+ elif build_type == "s60":
+ suffix = s60sdk_var.name + "-" + s60_target.replace(" ", "-")
+ elif build_type == "gnu":
+ proc = subprocess.Popen("sh config.guess", cwd="../..",
+ shell=True, stdout=subprocess.PIPE)
+ suffix = proc.stdout.readline().rstrip(" \r\n")
+ else:
+ sys.stderr.write("Error: unsupported build type '" + build_type + "'\n")
+ sys.exit(1)
+
+ while True:
+ if text.find("$(PJSUA-TESTS)") >= 0:
+ if no_test==False and no_pjsua_test==False:
+ # Determine pjsua exe to use
+ exe = "../../pjsip-apps/bin/pjsua-" + suffix
+ proc = subprocess.Popen(PYTHON + " runall.py --list-xml -e " + exe,
+ cwd="../pjsua",
+ shell=True, stdout=subprocess.PIPE)
+ content = proc.stdout.read()
+ else:
+ content = ""
+ text = text.replace("$(PJSUA-TESTS)", content)
+ elif text.find("$(GCC)") >= 0:
+ text = text.replace("$(GCC)", gcc_version("gcc"))
+ elif text.find("$(VS)") >= 0:
+ vsver = VSVersion()
+ text = text.replace("$(VS)", VSVersion().vs_release)
+ elif text.find("$(VSTARGET)") >= 0:
+ text = text.replace("$(VSTARGET)", vs_target)
+ elif text.find("$(S60TARGET)") >= 0:
+ text = text.replace("$(S60TARGET)", s60_target)
+ elif text.find("$(S60TARGETNAME)") >= 0:
+ text = text.replace("$(S60TARGETNAME)", s60_target.replace(" ", "-"))
+ elif text.find("$(S60DEVICE)") >= 0:
+ text = text.replace("$(S60DEVICE)", s60sdk_var.device)
+ elif text.find("$(EPOCROOT)") >= 0:
+ text = text.replace("$(EPOCROOT)", s60sdk_var.epocroot)
+ elif text.find("$(DISABLED)") >= 0:
+ text = text.replace("$(DISABLED)", "0")
+ elif text.find("$(IPPROOT)") >= 0:
+ if not os.environ.has_key("IPPROOT"):
+ sys.stderr.write("Error: environment variable IPPROOT is needed but not set\n")
+ sys.exit(1)
+ text = text.replace("$(IPPROOT)", os.environ["IPPROOT"])
+ elif text.find("$(IPPSAMPLES)") >= 0:
+ if not os.environ.has_key("IPPSAMPLES"):
+ sys.stderr.write("Error: environment variable IPPSAMPLES is needed but not set\n")
+ sys.exit(1)
+ text = text.replace("$(IPPSAMPLES)", os.environ["IPPSAMPLES"])
+ elif text.find("$(IPPARCH)") >= 0:
+ if not os.environ.has_key("IPPARCH"):
+ text = text.replace("$(IPPARCH)", "")
+ else:
+ text = text.replace("$(IPPARCH)", os.environ["IPPARCH"])
+ elif text.find("$(OS)") >= 0:
+ text = text.replace("$(OS)", os_info)
+ elif text.find("$(SUFFIX)") >= 0:
+ text = text.replace("$(SUFFIX)", suffix)
+ elif text.find("$(HOSTNAME)") >= 0:
+ text = text.replace("$(HOSTNAME)", socket.gethostname())
+ elif text.find("$(PJDIR)") >= 0:
+ wdir = os.path.join(os.getcwd(), "../..")
+ wdir = os.path.normpath(wdir)
+ text = text.replace("$(PJDIR)", wdir)
+ elif text.find("$(NOP)") >= 0:
+ if platform.system().lower() == "windows" or platform.system().lower() == "microsoft":
+ cmd = "CMD /C echo Success"
+ else:
+ cmd = "echo Success"
+ text = text.replace("$(NOP)", cmd)
+ elif text.find("$(NOTEST)") >= 0:
+ if no_test:
+ str = '"1"'
+ else:
+ str = '"0"'
+ text = text.replace("$(NOTEST)", str)
+ else:
+ break
+ return text
+
+
+def main(args):
+ global vs_target, s60_target, build_type, no_test, no_pjsua_test
+ output = sys.stdout
+ usage = """Usage: configure.py [OPTIONS] scenario_template_file
+
+Where OPTIONS:
+ -o FILE Output to file, otherwise to stdout.
+ -t TYPE Specify build type. If not specified, it will be
+ asked if necessary. Values are:
+ vs: Visual Studio
+ gnu: Makefile based
+ s60: Symbian S60
+ -vstarget TARGETNAME Specify Visual Studio target name if build type is set
+ to vs. If not specified then it will be asked.
+ Sample target names:
+ - Debug
+ - Release
+ - or any other target in the project file
+ -s60target TARGETNAME Specify S60 target name if build type is set to s60.
+ If not specified then it will be asked. Sample target
+ names:
+ - "gcce udeb"
+ - "gcce urel"
+ -notest Disable all tests in the scenario.
+ -nopjsuatest Disable pjsua tests in the scenario.
+"""
+
+ args.pop(0)
+ while len(args):
+ if args[0]=='-o':
+ args.pop(0)
+ if len(args):
+ output = open(args[0], "wt")
+ args.pop(0)
+ else:
+ sys.stderr.write("Error: needs value for -o\n")
+ sys.exit(1)
+ elif args[0]=='-vstarget':
+ args.pop(0)
+ if len(args):
+ vs_target = args[0]
+ args.pop(0)
+ else:
+ sys.stderr.write("Error: needs value for -vstarget\n")
+ sys.exit(1)
+ elif args[0]=='-s60target':
+ args.pop(0)
+ if len(args):
+ s60_target = args[0]
+ args.pop(0)
+ else:
+ sys.stderr.write("Error: needs value for -s60target\n")
+ sys.exit(1)
+ elif args[0]=='-t':
+ args.pop(0)
+ if len(args):
+ build_type = args[0].lower()
+ args.pop(0)
+ else:
+ sys.stderr.write("Error: needs value for -t\n")
+ sys.exit(1)
+ if not ["vs", "gnu", "s60"].count(build_type):
+ sys.stderr.write("Error: invalid -t argument value\n")
+ sys.exit(1)
+ elif args[0]=='-notest' or args[0]=='-notests':
+ args.pop(0)
+ no_test = True
+ elif args[0]=='-nopjsuatest' or args[0]=='-nopjsuatests':
+ args.pop(0)
+ no_pjsua_test = True
+ else:
+ break
+
+ if len(args) != 1:
+ sys.stderr.write(usage + "\n")
+ return 1
+
+ if not build_type:
+ defval = "vs"
+ if "SHELL" in os.environ:
+ shell = os.environ["SHELL"]
+ if shell.find("sh") > -1:
+ defval = "gnu"
+ print "Enter the build type (values: vs, gnu, s60) [%s]: " % (defval),
+ build_type = sys.stdin.readline().replace("\n", "").replace("\r", "")
+ if not build_type:
+ build_type = defval
+
+
+ tpl_file = args[len(args)-1]
+ if not os.path.isfile(tpl_file):
+ print "Error: unable to find template file '%s'" % (tpl_file)
+ return 1
+
+ f = open(tpl_file, "r")
+ tpl = f.read()
+ f.close()
+
+ tpl = replace_vars(tpl)
+ output.write(tpl)
+ if output != sys.stdout:
+ output.close()
+ return 0
+
+
+if __name__ == "__main__":
+ rc = main(sys.argv)
+ sys.exit(rc)
+