waf --run now takes either full path to a program or just the (flat) program name, for all C++ programs
This commit is contained in:
13
wscript
13
wscript
@@ -306,15 +306,16 @@ def add_scratch_programs(bld):
|
||||
continue
|
||||
if os.path.isdir(os.path.join("scratch", filename)):
|
||||
obj = bld.create_ns3_program(filename, all_modules)
|
||||
obj.path = obj.path.find_dir('scratch')
|
||||
obj.find_sources_in_dirs(filename)
|
||||
obj.target = os.path.join(filename, filename)
|
||||
obj.path = obj.path.find_dir('scratch').find_dir(filename)
|
||||
obj.find_sources_in_dirs('.')
|
||||
obj.target = filename
|
||||
obj.name = obj.target
|
||||
elif filename.endswith(".cc"):
|
||||
name = filename[:-len(".cc")]
|
||||
obj = bld.create_ns3_program(name, all_modules)
|
||||
obj.source = "scratch/%s" % filename
|
||||
obj.target = "scratch/%s" % name
|
||||
obj.path = obj.path.find_dir('scratch')
|
||||
obj.source = filename
|
||||
obj.target = name
|
||||
obj.name = obj.target
|
||||
|
||||
|
||||
@@ -414,7 +415,7 @@ def build(bld):
|
||||
# nothing more; this greatly speeds up compilation when all you
|
||||
# want to do is run a test program.
|
||||
if not Options.options.compile_targets:
|
||||
Options.options.compile_targets = program_name
|
||||
Options.options.compile_targets = os.path.basename(program_name)
|
||||
|
||||
|
||||
|
||||
|
||||
28
wutils.py
28
wutils.py
@@ -38,9 +38,30 @@ def get_command_template(*arguments):
|
||||
return cmd
|
||||
|
||||
|
||||
if hasattr(os.path, "relpath"):
|
||||
relpath = os.path.relpath # since Python 2.6
|
||||
else:
|
||||
def relpath(path, start=os.path.curdir):
|
||||
"""Return a relative version of a path"""
|
||||
|
||||
if not path:
|
||||
raise ValueError("no path specified")
|
||||
|
||||
start_list = os.path.abspath(start).split(os.path.sep)
|
||||
path_list = os.path.abspath(path).split(os.path.sep)
|
||||
|
||||
# Work out how much of the filepath is shared by start and path.
|
||||
i = len(os.path.commonprefix([start_list, path_list]))
|
||||
|
||||
rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:]
|
||||
if not rel_list:
|
||||
return os.path.curdir
|
||||
return os.path.join(*rel_list)
|
||||
|
||||
|
||||
def find_program(program_name, env):
|
||||
launch_dir = os.path.abspath(Options.cwd_launch)
|
||||
top_dir = os.path.abspath(Options.launch_dir)
|
||||
found_programs = []
|
||||
for obj in Build.bld.all_task_gen:
|
||||
if not getattr(obj, 'is_ns3_program', False):
|
||||
@@ -51,8 +72,11 @@ def find_program(program_name, env):
|
||||
or obj.path.abspath(env).startswith(launch_dir)):
|
||||
continue
|
||||
|
||||
found_programs.append(obj.target)
|
||||
if obj.target == program_name:
|
||||
name1 = obj.target
|
||||
name2 = os.path.join(relpath(obj.path.abspath(), top_dir), obj.target)
|
||||
names = [name1, name2]
|
||||
found_programs.extend(names)
|
||||
if program_name in names:
|
||||
return obj
|
||||
raise ValueError("program '%s' not found; available programs are: %r"
|
||||
% (program_name, found_programs))
|
||||
|
||||
Reference in New Issue
Block a user