build: death to singletons
authorAndrew Tridgell <tridge@samba.org>
Tue, 23 Feb 2010 01:18:04 +0000 (12:18 +1100)
committerAndrew Tridgell <tridge@samba.org>
Tue, 6 Apr 2010 10:26:36 +0000 (20:26 +1000)
lib/replace/wafsamba.py

index 737a0580861fbbecee85187922f63b093c5e24a3..e26d602db0604ea6f1d98c7313fe75adf2c2d96f 100644 (file)
@@ -119,6 +119,18 @@ def set_rpath(bld):
         bld.env.append_value('RPATH', '-Wl,-rpath=%s' % rpath)
 Build.BuildContext.set_rpath = set_rpath
 
+
+#############################################################
+# 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
+
+
 #############################################################
 # a build assert call
 def ASSERT(ctx, expression, msg):
@@ -150,23 +162,16 @@ def NORMPATH(bld, ilist):
     return " ".join([os.path.normpath(p) for p in ilist.split(" ")])
 Build.BuildContext.NORMPATH = NORMPATH
 
-################################################################
-# this will contain the set of includes needed per Samba library
-Build.BuildContext.SAMBA_LIBRARY_INCLUDES = {}
-
-################################################################
-# init function list for a subsystem
-Build.BuildContext.SAMBA_INIT_FUNCTIONS = {}
-
 ################################################################
 # add an init_function to the list for a subsystem
 def ADD_INIT_FUNCTION(bld, subsystem, init_function):
     if init_function is None:
         return
     bld.ASSERT(subsystem is not None, "You must specify a subsystem for init_function '%s'" % init_function)
-    if not subsystem in bld.SAMBA_INIT_FUNCTIONS:
-        bld.SAMBA_INIT_FUNCTIONS[subsystem] = ''
-    bld.SAMBA_INIT_FUNCTIONS[subsystem] += '%s,' % init_function
+    cache = BUILD_CACHE(bld, 'INIT_FUNCTIONS')
+    if not subsystem in cache:
+        cache[subsystem] = ''
+    cache[subsystem] += '%s,' % init_function
 Build.BuildContext.ADD_INIT_FUNCTION = ADD_INIT_FUNCTION
 
 
@@ -174,9 +179,10 @@ Build.BuildContext.ADD_INIT_FUNCTION = ADD_INIT_FUNCTION
 # return a include list for a set of library dependencies
 def SAMBA_LIBRARY_INCLUDE_LIST(bld, deps):
     ret = bld.curdir + ' '
+    cache = BUILD_CACHE(bld, 'INCLUDE_LIST')
     for l in deps.split():
-        if l in bld.SAMBA_LIBRARY_INCLUDES:
-            ret = ret + bld.SAMBA_LIBRARY_INCLUDES[l] + ' '
+        if l in cache:
+            ret = ret + cache[l] + ' '
     return ret
 Build.BuildContext.SAMBA_LIBRARY_INCLUDE_LIST = SAMBA_LIBRARY_INCLUDE_LIST
 
@@ -212,7 +218,8 @@ def SAMBA_LIBRARY(bld, libname, source_list,
         (soext, LIB_PATH, libname, soext),
         shell = True
         )
-    bld.SAMBA_LIBRARY_INCLUDES[libname] = ilist
+    cache = BUILD_CACHE(bld, 'INCLUDE_LIST')
+    cache[libname] = ilist
 Build.BuildContext.SAMBA_LIBRARY = SAMBA_LIBRARY
 
 
@@ -233,12 +240,12 @@ def SAMBA_BINARY(bld, binname, source_list,
     ilist = bld.NORMPATH(ilist)
     ccflags = ''
 
+    cache = BUILD_CACHE(bld, 'INIT_FUNCTIONS')
     if modules is not None:
         for m in modules.split():
-            bld.ASSERT(m in bld.SAMBA_INIT_FUNCTIONS,
+            bld.ASSERT(m in cache,
                        "No init_function defined for module '%s' in binary '%s'" % (m, binname))
-            modlist = bld.SAMBA_INIT_FUNCTIONS[m]
-            ccflags += ' -DSTATIC_%s_MODULES="%s"' % (m, modlist)
+            ccflags += ' -DSTATIC_%s_MODULES="%s"' % (m, cache[m])
 
     bld(
         features = 'cc cprogram',