You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
66 lines
1.7 KiB
![]()
5 years ago
|
#!/usr/bin/env python
|
||
|
# -*- encoding: utf-8 -*-
|
||
|
# Michel Mooij, michel.mooij7@gmail.com
|
||
|
|
||
|
from waflib import Utils
|
||
|
from waflib import Errors
|
||
|
|
||
|
|
||
|
def get_deps(bld, target):
|
||
|
'''Returns a list of (nested) targets on which this target depends.
|
||
|
|
||
|
:param bld: a *waf* build instance from the top level *wscript*
|
||
|
:type bld: waflib.Build.BuildContext
|
||
|
:param target: task name for which the dependencies should be returned
|
||
|
:type target: str
|
||
|
:returns: a list of task names on which the given target depends
|
||
|
'''
|
||
|
try:
|
||
|
tgen = bld.get_tgen_by_name(target)
|
||
|
except Errors.WafError:
|
||
|
return []
|
||
|
else:
|
||
|
uses = Utils.to_list(getattr(tgen, 'use', []))
|
||
|
deps = uses[:]
|
||
|
for use in uses:
|
||
|
deps += get_deps(bld, use)
|
||
|
return list(set(deps))
|
||
|
|
||
|
|
||
|
def get_tgens(bld, names):
|
||
|
'''Returns a list of task generators based on the given list of task
|
||
|
generator names.
|
||
|
|
||
|
:param bld: a *waf* build instance from the top level *wscript*
|
||
|
:type bld: waflib.Build.BuildContext
|
||
|
:param names: list of task generator names
|
||
|
:type names: list of str
|
||
|
:returns: list of task generators
|
||
|
'''
|
||
|
tgens=[]
|
||
|
for name in names:
|
||
|
try:
|
||
|
tgen = bld.get_tgen_by_name(name)
|
||
|
except Errors.WafError:
|
||
|
pass
|
||
|
else:
|
||
|
tgens.append(tgen)
|
||
|
return list(set(tgens))
|
||
|
|
||
|
|
||
|
def get_targets(bld):
|
||
|
'''Returns a list of user specified build targets or None if no specific
|
||
|
build targets has been selected using the *--targets=* command line option.
|
||
|
|
||
|
:param bld: a *waf* build instance from the top level *wscript*.
|
||
|
:type bld: waflib.Build.BuildContext
|
||
|
:returns: a list of user specified target names (using --targets=x,y,z) or None
|
||
|
'''
|
||
|
if bld.targets == '':
|
||
|
return None
|
||
|
targets = bld.targets.split(',')
|
||
|
for target in targets:
|
||
|
targets += get_deps(bld, target)
|
||
|
return targets
|
||
|
|