wutils.py
changeset 4326 179f86838e62
parent 4137 c1303bd63eb5
child 4332 a1c7bc503a0c
equal deleted inserted replaced
4314:280cfa81fa8f 4326:179f86838e62
    14 
    14 
    15 
    15 
    16 # these are set from the main wscript file
    16 # these are set from the main wscript file
    17 APPNAME=None
    17 APPNAME=None
    18 VERSION=None
    18 VERSION=None
       
    19 bld=None
    19 
    20 
    20 #
    21 #
    21 # The last part of the path name to use to find the regression traces tarball.
    22 # The last part of the path name to use to find the regression traces tarball.
    22 # path will be APPNAME + '-' + VERSION + REGRESSION_SUFFIX + TRACEBALL_SUFFIX,
    23 # path will be APPNAME + '-' + VERSION + REGRESSION_SUFFIX + TRACEBALL_SUFFIX,
    23 # e.g., ns-3-dev-ref-traces.tar.bz2
    24 # e.g., ns-3-dev-ref-traces.tar.bz2
    63 
    64 
    64 def find_program(program_name, env):
    65 def find_program(program_name, env):
    65     launch_dir = os.path.abspath(Options.cwd_launch)
    66     launch_dir = os.path.abspath(Options.cwd_launch)
    66     top_dir = os.path.abspath(Options.launch_dir)
    67     top_dir = os.path.abspath(Options.launch_dir)
    67     found_programs = []
    68     found_programs = []
    68     for obj in Build.bld.all_task_gen:
    69     for obj in bld.all_task_gen:
    69         if not getattr(obj, 'is_ns3_program', False):
    70         if not getattr(obj, 'is_ns3_program', False):
    70             continue
    71             continue
    71 
    72 
    72         ## filter out programs not in the subtree starting at the launch dir
    73         ## filter out programs not in the subtree starting at the launch dir
    73         if not (obj.path.abspath().startswith(launch_dir)
    74         if not (obj.path.abspath().startswith(launch_dir)
    82             return obj
    83             return obj
    83     raise ValueError("program '%s' not found; available programs are: %r"
    84     raise ValueError("program '%s' not found; available programs are: %r"
    84                      % (program_name, found_programs))
    85                      % (program_name, found_programs))
    85 
    86 
    86 def get_proc_env(os_env=None):
    87 def get_proc_env(os_env=None):
    87     env = Build.bld.env
    88     env = bld.env
    88     if sys.platform == 'linux2':
    89     if sys.platform == 'linux2':
    89         pathvar = 'LD_LIBRARY_PATH'
    90         pathvar = 'LD_LIBRARY_PATH'
    90     elif sys.platform == 'darwin':
    91     elif sys.platform == 'darwin':
    91         pathvar = 'DYLD_LIBRARY_PATH'
    92         pathvar = 'DYLD_LIBRARY_PATH'
    92     elif sys.platform == 'win32':
    93     elif sys.platform == 'win32':
   109         if pathvar in proc_env:
   110         if pathvar in proc_env:
   110             proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH']) + [proc_env[pathvar]])
   111             proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH']) + [proc_env[pathvar]])
   111         else:
   112         else:
   112             proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH']))
   113             proc_env[pathvar] = os.pathsep.join(list(env['NS3_MODULE_PATH']))
   113 
   114 
   114     pymoddir = Build.bld.path.find_dir('bindings/python').abspath(env)
   115     pymoddir = bld.path.find_dir('bindings/python').abspath(env)
   115     if 'PYTHONPATH' in proc_env:
   116     if 'PYTHONPATH' in proc_env:
   116         proc_env['PYTHONPATH'] = os.pathsep.join([pymoddir] + [proc_env['PYTHONPATH']])
   117         proc_env['PYTHONPATH'] = os.pathsep.join([pymoddir] + [proc_env['PYTHONPATH']])
   117     else:
   118     else:
   118         proc_env['PYTHONPATH'] = pymoddir
   119         proc_env['PYTHONPATH'] = pymoddir
   119 
   120 
   120     return proc_env
   121     return proc_env
   121 
   122 
   122 def run_argv(argv, os_env=None, cwd=None):
   123 def run_argv(argv, os_env=None, cwd=None):
   123     proc_env = get_proc_env(os_env)
   124     proc_env = get_proc_env(os_env)
   124     #env = Build.bld.env
       
   125     retval = subprocess.Popen(argv, env=proc_env, cwd=cwd).wait()
   125     retval = subprocess.Popen(argv, env=proc_env, cwd=cwd).wait()
   126     if retval:
   126     if retval:
   127         raise Utils.WafError("Command %s exited with code %i" % (argv, retval))
   127         raise Utils.WafError("Command %s exited with code %i" % (argv, retval))
   128     return retval
   128     return retval
   129 
   129 
   131     """
   131     """
   132     Return the program name and argv of the process that would be executed by
   132     Return the program name and argv of the process that would be executed by
   133     run_program(program_string, command_template).
   133     run_program(program_string, command_template).
   134     """
   134     """
   135     #print "get_run_program_argv(program_string=%r, command_template=%r)" % (program_string, command_template)
   135     #print "get_run_program_argv(program_string=%r, command_template=%r)" % (program_string, command_template)
   136     env = Build.bld.env
   136     env = bld.env
   137 
   137 
   138     if command_template in (None, '%s'):
   138     if command_template in (None, '%s'):
   139         argv = shlex.split(program_string)
   139         argv = shlex.split(program_string)
   140         program_name = argv[0]
   140         program_name = argv[0]
   141 
   141 
   185     return run_argv(execvec, cwd=cwd)
   185     return run_argv(execvec, cwd=cwd)
   186 
   186 
   187 
   187 
   188 
   188 
   189 def run_python_program(program_string):
   189 def run_python_program(program_string):
   190     env = Build.bld.env
   190     env = bld.env
   191     execvec = shlex.split(program_string)
   191     execvec = shlex.split(program_string)
   192     if (Options.options.cwd_launch):
   192     if (Options.options.cwd_launch):
   193         cwd = Options.options.cwd_launch
   193         cwd = Options.options.cwd_launch
   194     else:
   194     else:
   195         cwd = Options.cwd_launch
   195         cwd = Options.cwd_launch