# return a named build cache dictionary, used to store
# state inside the following functions
def BUILD_CACHE(bld, name):
- try:
- cache = bld.name
- except AttributeError:
- bld.name = cache = {}
- return cache
+ if name in bld.env:
+ return bld.env[name]
+ bld.env[name] = {}
+ return bld.env[name]
#############################################################
)
cache = BUILD_CACHE(bld, 'INCLUDE_LIST')
cache[libname] = ilist
+
+ cache = BUILD_CACHE(bld, 'LIB_DEPS')
+ cache[libname] = deps.split()
Build.BuildContext.SAMBA_LIBRARY = SAMBA_LIBRARY
ilist = bld.NORMPATH(ilist)
ccflags = ''
+ cache = BUILD_CACHE(bld, 'LIB_DEPS')
+ cache[binname] = deps.split()
+
cache = BUILD_CACHE(bld, 'INIT_FUNCTIONS')
if modules is not None:
for m in modules.split():
deps='',
public_deps='',
realname=''):
+
+ cache = BUILD_CACHE(bld, 'LIB_DEPS')
+ cache[name] = deps.split()
+
Logs.debug('runner: PYTHON_SAMBA not implemented')
return
Build.BuildContext.SAMBA_PYTHON = SAMBA_PYTHON
bld.add_subdirs(dir)
Build.BuildContext.BUILD_SUBDIR = BUILD_SUBDIR
+def CIRCULAR_DEPENDENCY(deps, path, cache, target):
+ if target not in cache:
+ return False
+ for t in cache[target]:
+ if t in deps:
+ print "Circular dependency on target %s: %s" % (t, path)
+ return True
+ if CIRCULAR_DEPENDENCY(deps,
+ ("%s->%s" % (path, t)),
+ cache, t):
+ return True
+ deps[t] = True
+ return False
+
+############################################################
+# check our build dependencies for circular dependencies
+def CHECK_DEPENDENCIES(bld):
+ cache = BUILD_CACHE(bld, 'LIB_DEPS')
+ print "Checking for circular dependencies"
+ for target in cache:
+ deps = {}
+ path = target
+ bld.ASSERT(not CIRCULAR_DEPENDENCY(deps, path, cache, target),
+ "Circular dependency in target %s" % target)
+ print "No circular dependencies"
+
+Build.BuildContext.CHECK_DEPENDENCIES = CHECK_DEPENDENCIES
+
############################################################
# this overrides the 'waf -v' debug output to be in a nice