diff options
author | Benny Prijono <bennylp@teluu.com> | 2010-03-27 02:35:06 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2010-03-27 02:35:06 +0000 |
commit | fc5e0485cc64213faadb735e8d76cea715192689 (patch) | |
tree | d3c14e9f58ee7021df36bf329c2e30bad86dfff5 /tests | |
parent | b50dc9e7af36f03479aa3a8a1f06608997063922 (diff) |
Ticket #1041 (Unit test):
- Initial Windows/MSVC work
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3122 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/automated/configure.py | 146 | ||||
-rw-r--r-- | tests/automated/msvc.xml.template | 22 | ||||
-rw-r--r-- | tests/pjsua/runall.py | 6 |
3 files changed, 162 insertions, 12 deletions
diff --git a/tests/automated/configure.py b/tests/automated/configure.py index 8be437ff..d0e2c7ee 100755 --- a/tests/automated/configure.py +++ b/tests/automated/configure.py @@ -8,6 +8,9 @@ import subprocess import sys PROG = "r" + "$Rev: 17 $".strip("$ ").replace("Rev: ", "") +PYTHON = os.path.basename(sys.executable) +build_type = "" +vs_target = "" # # Get gcc version @@ -26,27 +29,107 @@ def gcc_version(gcc): proc.wait() return "gcc-" + ver +# +# Get Visual Studio version +# +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 + else: + self.version = "10" + self.release = "2010" + break + proc.wait() + self.vs_version = "vs" + self.version + self.vs_release = "vs" + self.release + + def replace_vars(text): + global vs_target, build_type + suffix = "" + os_info = platform.system() + platform.release() + "-" + platform.machine() + + # osinfo + if 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]) + + # Build vs_target + if not vs_target and text.find("$(VSTARGET)") >= 0: + if build_type != "vs": + sys.stderr.write("Error: $(VSTARGET) only valid for Visual Studio\n") + sys.exit(1) + else: + 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" + + # Suffix + if build_type == "vs": + suffix = "i386-Win32-vc8-" + vs_target + 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 built type " + build_type + "\n") + sys.exit(1) + while True: if text.find("$(PJSUA-TESTS)") >= 0: - proc = subprocess.Popen("python runall.py --list-xml", cwd="../pjsua", + # 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() 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)", vsver.vs_release) + elif text.find("$(VSTARGET)") >= 0: + text = text.replace("$(VSTARGET)", vs_target) elif text.find("$(DISABLED)") >= 0: text = text.replace("$(DISABLED)", "0") elif text.find("$(OS)") >= 0: - os_info = platform.system() + platform.release() + "-" + platform.machine() - if platform.system().lower() == "linux": - os_info = os_info + "-" + "-".join(platform.linux_distribution()[0:2]) - text = text.replace("$OS", os_info) + text = text.replace("$(OS)", os_info) elif text.find("$(SUFFIX)") >= 0: - proc = subprocess.Popen("sh config.guess", cwd="../..", - shell=True, stdout=subprocess.PIPE) - plat = proc.stdout.readline().rstrip(" \r\n") - text = text.replace("$(SUFFIX)", plat) + text = text.replace("$(SUFFIX)", suffix) elif text.find("$(HOSTNAME)") >= 0: text = text.replace("$(HOSTNAME)", socket.gethostname()) elif text.find("$(PJDIR)") >= 0: @@ -59,14 +142,55 @@ def replace_vars(text): def main(args): - usage = """Usage: configure.py scenario_template_file + global vs_target, build_type + usage = """Usage: configure.py [OPTIONS] scenario_template_file + +Where OPTIONS: + -t TYPE Specify build type for Windows since we support both + Visual Studio and Mingw. If not specified, it will be + asked if necessary. Values are: + vs: Visual Studio + gnu: Makefile based + -T TARGETNAME Specify Visual Studio target name if build type is set + to "vs", e.g. Release or Debug. If not specified then + it will be asked. """ args.pop(0) - if not len(args): + while len(args): + if args[0]=='-T': + args.pop(0) + if len(args): + vs_target = args[0] + args.pop(0) + else: + sys.stderr.write("Error: needs value for -T\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"].count(build_type): + sys.stderr.write("Error: invalid -t argument value\n") + sys.exit(1) + else: + break + + if len(args) != 1: print usage return 1 + if not build_type and (platform.system().lower() == "windows" or platform.system().lower() == "microsoft"): + print "Enter the build type (values: vs, gnu) [vs]: ", + build_type = sys.stdin.readline().replace("\n", "").replace("\r", "") + if not build_type: + build_type = "vs" + + tpl_file = args[len(args)-1] if not os.path.isfile(tpl_file): print "Error: unable to find template file '%s'" % (tpl_file) diff --git a/tests/automated/msvc.xml.template b/tests/automated/msvc.xml.template new file mode 100644 index 00000000..986e9c99 --- /dev/null +++ b/tests/automated/msvc.xml.template @@ -0,0 +1,22 @@ +<?xml version="1.0" ?> +<Scenario site="$(HOSTNAME)" url="http://my.cdash.org/submit.php?project=PJSIP" wdir="$(PJDIR)"> + + <Submit group="Experimental" build="$(OS)-$(VS)-$(VSTARGET)-default" > + <Update /> + <Write file="pjlib/include/pj/config_site.h"> + <![CDATA[ +/* Written by ccdash */ +#define PJ_HAS_IPV6 1 +#define PJMEDIA_HAS_G7221_CODEC 1 +]]> + </Write> + <Build cmd='vcbuild.exe /nologo /nohtmllog /nocolor /rebuild pjproject-vs8.sln "$(VSTARGET)|Win32"' /> + <Test name="pjlib-test" info="" wdir="pjlib/bin" cmd="pjlib-test-i386-Win32-vs8-$(VSTARGET)" /> + <Test name="pjlib-util-test" info="" wdir="pjlib-util/bin" cmd="pjlib-util-test-i386-Win32-vs8-$(VSTARGET)" /> + <Test name="pjnath-test" info="" wdir="pjnath/bin" cmd="pjnath-test-i386-Win32-vs8-$(VSTARGET)" /> + <Test name="pjmedia-test" info="" wdir="pjmedia/bin" cmd="pjmedia-test-i386-Win32-vs8-$(VSTARGET)" /> + <Test name="pjsip-test" info="" wdir="pjsip/bin" cmd="pjsip-test-i386-Win32-vs8-$(VSTARGET)" /> + $(PJSUA-TESTS) + </Submit> + +</Scenario> diff --git a/tests/pjsua/runall.py b/tests/pjsua/runall.py index fad6c540..9c78075d 100644 --- a/tests/pjsua/runall.py +++ b/tests/pjsua/runall.py @@ -5,6 +5,7 @@ import time import re import shutil +PYTHON = os.path.basename(sys.executable) # Usage: # runall.py [test-to-resume] @@ -102,7 +103,10 @@ while len(sys.argv): (mod,param) = t.split(None,2) tname = mod[4:mod.find(".py")] + "_" + \ param[param.find("/")+1:param.find(".py")] - tcmd = 'python run.py ' + t + c = "" + if len(sys.argv): + c = " ".join(sys.argv) + " " + tcmd = PYTHON + ' run.py ' + c + t print '\t\t<Test name="%s" cmd="%s" wdir="tests/pjsua" />' % (tname, tcmd) sys.exit(0) elif sys.argv[0] == '-s' or sys.argv[0] == '--shell': |