author | Mitch Watrous <watrous@u.washington.edu> |
Tue, 08 Mar 2011 16:03:45 -0800 | |
changeset 6884 | b7518424f22d |
parent 6676 | 8a57344a8d09 |
child 6886 | 690b7a78bbd0 |
permissions | -rw-r--r-- |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
1 |
import os |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
2 |
import os.path |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
3 |
import sys |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
4 |
import pproc as subprocess |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
5 |
import shlex |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
6 |
|
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
7 |
# WAF modules |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
8 |
import ccroot |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
9 |
import Options |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
10 |
import Utils |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
11 |
import Logs |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
12 |
import TaskGen |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
13 |
import Build |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
14 |
import re |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
15 |
|
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
16 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
17 |
# these are set from the main wscript file |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
18 |
APPNAME=None |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
19 |
VERSION=None |
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
20 |
bld=None |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
21 |
|
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
22 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
23 |
|
4119
9ffcf2400aa5
Bug #323: waf --valgrind doesn't check for valgrind first
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4110
diff
changeset
|
24 |
def get_command_template(env, arguments=()): |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
25 |
cmd = Options.options.command_template or '%s' |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
26 |
for arg in arguments: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
27 |
cmd = cmd + " " + arg |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
28 |
return cmd |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
29 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
30 |
|
4108
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
31 |
if hasattr(os.path, "relpath"): |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
32 |
relpath = os.path.relpath # since Python 2.6 |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
33 |
else: |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
34 |
def relpath(path, start=os.path.curdir): |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
35 |
"""Return a relative version of a path""" |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
36 |
|
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
37 |
if not path: |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
38 |
raise ValueError("no path specified") |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
39 |
|
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
40 |
start_list = os.path.abspath(start).split(os.path.sep) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
41 |
path_list = os.path.abspath(path).split(os.path.sep) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
42 |
|
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
43 |
# Work out how much of the filepath is shared by start and path. |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
44 |
i = len(os.path.commonprefix([start_list, path_list])) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
45 |
|
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
46 |
rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:] |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
47 |
if not rel_list: |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
48 |
return os.path.curdir |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
49 |
return os.path.join(*rel_list) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
50 |
|
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
51 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
52 |
def find_program(program_name, env): |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
53 |
launch_dir = os.path.abspath(Options.cwd_launch) |
4108
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
54 |
top_dir = os.path.abspath(Options.launch_dir) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
55 |
found_programs = [] |
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
56 |
for obj in bld.all_task_gen: |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
57 |
if not getattr(obj, 'is_ns3_program', False): |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
58 |
continue |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
59 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
60 |
## filter out programs not in the subtree starting at the launch dir |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
61 |
if not (obj.path.abspath().startswith(launch_dir) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
62 |
or obj.path.abspath(env).startswith(launch_dir)): |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
63 |
continue |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
64 |
|
4108
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
65 |
name1 = obj.target |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
66 |
name2 = os.path.join(relpath(obj.path.abspath(), top_dir), obj.target) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
67 |
names = [name1, name2] |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
68 |
found_programs.extend(names) |
92bae583f934
waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4064
diff
changeset
|
69 |
if program_name in names: |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
70 |
return obj |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
71 |
raise ValueError("program '%s' not found; available programs are: %r" |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
72 |
% (program_name, found_programs)) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
73 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
74 |
def get_proc_env(os_env=None): |
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
75 |
env = bld.env |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
76 |
if sys.platform == 'linux2': |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
77 |
pathvar = 'LD_LIBRARY_PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
78 |
elif sys.platform == 'darwin': |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
79 |
pathvar = 'DYLD_LIBRARY_PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
80 |
elif sys.platform == 'win32': |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
81 |
pathvar = 'PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
82 |
elif sys.platform == 'cygwin': |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
83 |
pathvar = 'PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
84 |
elif sys.platform.startswith('freebsd'): |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
85 |
pathvar = 'LD_LIBRARY_PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
86 |
else: |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
87 |
Logs.warn(("Don't know how to configure " |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
88 |
"dynamic library path for the platform %r;" |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
89 |
" assuming it's LD_LIBRARY_PATH.") % (sys.platform,)) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
90 |
pathvar = 'LD_LIBRARY_PATH' |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
91 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
92 |
proc_env = dict(os.environ) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
93 |
if os_env is not None: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
94 |
proc_env.update(os_env) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
95 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
96 |
if pathvar is not None: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
97 |
if pathvar in proc_env: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
98 |
proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH']) + [proc_env[pathvar]]) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
99 |
else: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
100 |
proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH'])) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
101 |
|
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
102 |
pymoddir = bld.path.find_dir('bindings/python').abspath(env) |
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
103 |
pyvizdir = bld.path.find_dir('src/tools/visualizer').abspath() |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
104 |
if 'PYTHONPATH' in proc_env: |
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
105 |
proc_env['PYTHONPATH'] = os.pathsep.join([pymoddir, pyvizdir] + [proc_env['PYTHONPATH']]) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
106 |
else: |
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
107 |
proc_env['PYTHONPATH'] = os.pathsep.join([pymoddir, pyvizdir]) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
108 |
|
5975
c85cb9b073a0
comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents:
5917
diff
changeset
|
109 |
if 'PATH' in proc_env: |
c85cb9b073a0
comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents:
5917
diff
changeset
|
110 |
proc_env['PATH'] = os.pathsep.join(list(env['NS3_EXECUTABLE_PATH']) + [proc_env['PATH']]) |
c85cb9b073a0
comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents:
5917
diff
changeset
|
111 |
else: |
c85cb9b073a0
comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents:
5917
diff
changeset
|
112 |
proc_env['PATH'] = os.pathsep.join(list(env['NS3_EXECUTABLE_PATH'])) |
c85cb9b073a0
comparing with http://code.nsnam.org/ns-3-dev
Craig Dowell <craigdo@ee.washington.edu>
parents:
5917
diff
changeset
|
113 |
|
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
114 |
return proc_env |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
115 |
|
4388
fd90dd412e67
Force valgrind to not be used for Python tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4332
diff
changeset
|
116 |
def run_argv(argv, env, os_env=None, cwd=None, force_no_valgrind=False): |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
117 |
proc_env = get_proc_env(os_env) |
4388
fd90dd412e67
Force valgrind to not be used for Python tests
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4332
diff
changeset
|
118 |
if Options.options.valgrind and not force_no_valgrind: |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
119 |
if Options.options.command_template: |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
120 |
raise Utils.WafError("Options --command-template and --valgrind are conflicting") |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
121 |
if not env['VALGRIND']: |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
122 |
raise Utils.WafError("valgrind is not installed") |
5917
aa8364846523
Bug 792: Neither test.py nor waf --valgrind catch all kinds of memory leaks
Craig Dowell <craigdo@ee.washington.edu>
parents:
4584
diff
changeset
|
123 |
argv = [env['VALGRIND'], "--leak-check=full", "--show-reachable=yes", "--error-exitcode=1"] + argv |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
124 |
proc = subprocess.Popen(argv, env=proc_env, cwd=cwd, stderr=subprocess.PIPE) |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
125 |
error = False |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
126 |
for line in proc.stderr: |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
127 |
sys.stderr.write(line) |
5917
aa8364846523
Bug 792: Neither test.py nor waf --valgrind catch all kinds of memory leaks
Craig Dowell <craigdo@ee.washington.edu>
parents:
4584
diff
changeset
|
128 |
if "== LEAK SUMMARY" in line: |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
129 |
error = True |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
130 |
retval = proc.wait() |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
131 |
if retval == 0 and error: |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
132 |
retval = 1 |
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
133 |
else: |
4583
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
134 |
try: |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
135 |
WindowsError |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
136 |
except NameError: |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
137 |
retval = subprocess.Popen(argv, env=proc_env, cwd=cwd).wait() |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
138 |
else: |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
139 |
try: |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
140 |
retval = subprocess.Popen(argv, env=proc_env, cwd=cwd).wait() |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
141 |
except WindowsError, ex: |
384117906219
Handle WindowsError exception in subprocess.Popen called from _run_argv
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4388
diff
changeset
|
142 |
raise Utils.WafError("Command %s raised exception %s" % (argv, ex)) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
143 |
if retval: |
6275
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
144 |
signame = None |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
145 |
if retval < 0: # signal? |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
146 |
import signal |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
147 |
for name, val in vars(signal).iteritems(): |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
148 |
if len(name) > 3 and name[:3] == 'SIG' and name[3] != '_': |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
149 |
if val == -retval: |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
150 |
signame = name |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
151 |
break |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
152 |
if signame: |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
153 |
raise Utils.WafError("Command %s terminated with signal %s." |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
154 |
" Run it under a debugger to get more information " |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
155 |
"(./waf --run <program> --command-template=\"gdb --args %%s <args>\")." % (argv, signame)) |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
156 |
else: |
77f833c7ddae
Bug 894 - ./waf --run error message upon segfault
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
5975
diff
changeset
|
157 |
raise Utils.WafError("Command %s exited with code %i" % (argv, retval)) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
158 |
return retval |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
159 |
|
3933
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
160 |
def get_run_program(program_string, command_template=None): |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
161 |
""" |
3933
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
162 |
Return the program name and argv of the process that would be executed by |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
163 |
run_program(program_string, command_template). |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
164 |
""" |
3933
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
165 |
#print "get_run_program_argv(program_string=%r, command_template=%r)" % (program_string, command_template) |
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
166 |
env = bld.env |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
167 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
168 |
if command_template in (None, '%s'): |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
169 |
argv = shlex.split(program_string) |
4584
7f4ee7f84b19
Fix win32/mingw bug running commands with command-template: needed to escape backslashes before calling shlex.split().
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4583
diff
changeset
|
170 |
#print "%r ==shlex.split==> %r" % (program_string, argv) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
171 |
program_name = argv[0] |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
172 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
173 |
try: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
174 |
program_obj = find_program(program_name, env) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
175 |
except ValueError, ex: |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
176 |
raise Utils.WafError(str(ex)) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
177 |
|
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
178 |
program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj)) |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
179 |
#try: |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
180 |
# program_node = program_obj.path.find_build(ccroot.get_target_name(program_obj)) |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
181 |
#except AttributeError: |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
182 |
# raise Utils.WafError("%s does not appear to be a program" % (program_name,)) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
183 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
184 |
execvec = [program_node.abspath(env)] + argv[1:] |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
185 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
186 |
else: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
187 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
188 |
program_name = program_string |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
189 |
try: |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
190 |
program_obj = find_program(program_name, env) |
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
191 |
except ValueError, ex: |
4064
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
192 |
raise Utils.WafError(str(ex)) |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
193 |
|
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
194 |
program_node = program_obj.path.find_or_declare(ccroot.get_target_name(program_obj)) |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
195 |
#try: |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
196 |
# program_node = program_obj.path.find_build(ccroot.get_target_name(program_obj)) |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
197 |
#except AttributeError: |
10222f483860
Upgrade to new WAF, work in progress
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3933
diff
changeset
|
198 |
# raise Utils.WafError("%s does not appear to be a program" % (program_name,)) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
199 |
|
4584
7f4ee7f84b19
Fix win32/mingw bug running commands with command-template: needed to escape backslashes before calling shlex.split().
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4583
diff
changeset
|
200 |
tmpl = command_template % (program_node.abspath(env),) |
7f4ee7f84b19
Fix win32/mingw bug running commands with command-template: needed to escape backslashes before calling shlex.split().
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4583
diff
changeset
|
201 |
execvec = shlex.split(tmpl.replace('\\', '\\\\')) |
7f4ee7f84b19
Fix win32/mingw bug running commands with command-template: needed to escape backslashes before calling shlex.split().
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4583
diff
changeset
|
202 |
#print "%r ==shlex.split==> %r" % (command_template % (program_node.abspath(env),), execvec) |
3933
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
203 |
return program_name, execvec |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
204 |
|
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
205 |
def run_program(program_string, env, command_template=None, cwd=None, visualize=False): |
3933
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
206 |
""" |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
207 |
if command_template is not None, then program_string == program |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
208 |
name and argv is given by command_template with %s replaced by the |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
209 |
full path to the program. Else, program_string is interpreted as |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
210 |
a shell command with first name being the program name. |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
211 |
""" |
3c149230e98a
Fix waf problem running programs with arguments.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
3866
diff
changeset
|
212 |
dummy_program_name, execvec = get_run_program(program_string, command_template) |
4110
04170734fa8b
Don't abuse os.chdir so much (not thread safe)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4108
diff
changeset
|
213 |
if cwd is None: |
04170734fa8b
Don't abuse os.chdir so much (not thread safe)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4108
diff
changeset
|
214 |
if (Options.options.cwd_launch): |
04170734fa8b
Don't abuse os.chdir so much (not thread safe)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4108
diff
changeset
|
215 |
cwd = Options.options.cwd_launch |
04170734fa8b
Don't abuse os.chdir so much (not thread safe)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4108
diff
changeset
|
216 |
else: |
04170734fa8b
Don't abuse os.chdir so much (not thread safe)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4108
diff
changeset
|
217 |
cwd = Options.cwd_launch |
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
218 |
if visualize: |
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
219 |
execvec.append("--SimulatorImplementationType=ns3::VisualSimulatorImpl") |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
220 |
return run_argv(execvec, env, cwd=cwd) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
221 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
222 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
223 |
|
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
224 |
def run_python_program(program_string, env, visualize=False): |
4326
179f86838e62
Upgrade to WAF 1.5.4
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4137
diff
changeset
|
225 |
env = bld.env |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
226 |
execvec = shlex.split(program_string) |
4137
c1303bd63eb5
Fix waf --pyrun bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4119
diff
changeset
|
227 |
if (Options.options.cwd_launch): |
c1303bd63eb5
Fix waf --pyrun bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4119
diff
changeset
|
228 |
cwd = Options.options.cwd_launch |
c1303bd63eb5
Fix waf --pyrun bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4119
diff
changeset
|
229 |
else: |
c1303bd63eb5
Fix waf --pyrun bug
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4119
diff
changeset
|
230 |
cwd = Options.cwd_launch |
6676
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
231 |
if visualize: |
8a57344a8d09
Codereview Issue 2692041: Add pyviz module
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
6624
diff
changeset
|
232 |
execvec.append("--SimulatorImplementationType=ns3::VisualSimulatorImpl") |
4332
a1c7bc503a0c
Detect valgrind memory leak reports; based on patch by Mathieu Lacage; closes bug #532
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
4326
diff
changeset
|
233 |
return run_argv([env['PYTHON']] + execvec, env, cwd=cwd) |
3866
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
234 |
|
9e946fee902c
Refactor wscript code to move regression testing code to a separate python module (bug 325)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff
changeset
|
235 |
|
6884
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
236 |
def get_list_from_file(file_path, list_name): |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
237 |
'''Looks for a Python list called list_name in the file specified |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
238 |
by file_path and returns it. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
239 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
240 |
If the file or list name aren't found, this function will return |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
241 |
an empty list. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
242 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
243 |
''' |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
244 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
245 |
list = [] |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
246 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
247 |
# Read in the file if it exists. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
248 |
if os.path.exists(file_path): |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
249 |
file_in = open(file_path, "r") |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
250 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
251 |
# Look for the list. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
252 |
list_string = "" |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
253 |
parsing_multiline_list = False |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
254 |
for line in file_in: |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
255 |
if list_name in line or parsing_multiline_list: |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
256 |
list_string += line |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
257 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
258 |
# Handle multiline lists. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
259 |
if ']' not in list_string: |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
260 |
parsing_multiline_list = True |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
261 |
else: |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
262 |
# Evaluate the list once its end is reached. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
263 |
# Make the split function only split it once. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
264 |
list = eval(list_string.split('=', 1)[1].strip()) |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
265 |
break |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
266 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
267 |
# Close the file |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
268 |
file_in.close() |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
269 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
270 |
return list |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
271 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
272 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
273 |
def read_config_file(): |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
274 |
'''Reads the NS-3 configuration file and returns a list of enabled modules. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
275 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
276 |
This function first looks for the ns3 configuration file (.ns3rc) |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
277 |
in the current working directory and then looks in the ~ |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
278 |
directory. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
279 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
280 |
''' |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
281 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
282 |
# See if the ns3 configuration file exists in the current working |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
283 |
# directory and then look for it in the ~ directory. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
284 |
dot_ns3rc_name = '.ns3rc' |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
285 |
dot_ns3rc_path = dot_ns3rc_name |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
286 |
if not os.path.exists(dot_ns3rc_path): |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
287 |
dot_ns3rc_path = os.path.expanduser('~/') + dot_ns3rc_name |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
288 |
if not os.path.exists(dot_ns3rc_path): |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
289 |
# Enable all modules if the .ns3rc file can't be found. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
290 |
return ['all_modules'] |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
291 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
292 |
# Read in the ns3 configuration file. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
293 |
modules_enabled = get_list_from_file(dot_ns3rc_path, 'modules_enabled') |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
294 |
if not modules_enabled: |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
295 |
# Enable all modules if the modules_enabled line can't be found. |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
296 |
return ['all_modules'] |
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
297 |
|
b7518424f22d
Move util.py functions into wutils.py
Mitch Watrous <watrous@u.washington.edu>
parents:
6676
diff
changeset
|
298 |
return modules_enabled |