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:
Gustavo J. A. M. Carneiro
2009-01-18 19:59:46 +00:00
parent c7222e4a09
commit 587ee24f71
2 changed files with 33 additions and 8 deletions

13
wscript
View File

@@ -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)

View File

@@ -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))