Refactor the Builder binding so the calling Environment gets passed in.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 11 Sep 2001 13:15:57 +0000 (13:15 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Tue, 11 Sep 2001 13:15:57 +0000 (13:15 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@39 fdb21ef1-2011-0410-befe-b5e4ea1792b1

src/scons/Builder.py
src/scons/Environment.py
src/scons/Node/__init__.py

index ba489ec2ad144f9c99c1877219366ac1f98e9180..c11c9f38a9fb61d9d37beeea5b0cbbcb6fa6eef6 100644 (file)
@@ -37,9 +37,10 @@ class Builder:
     def __cmp__(self, other):
        return cmp(self.__dict__, other.__dict__)
 
-    def __call__(self, target = None, source = None):
+    def __call__(self, env, target = None, source = None):
        node = lookup(self.node_class, target)
        node.builder_set(self)
+       node.env_set(self)
        node.sources = source   # XXX REACHING INTO ANOTHER OBJECT
        return node
 
index da71ba1740fab1536649fc68977c9e794e667089..9b050d16f43b49eaf68badda2ad5870370355aef 100644 (file)
@@ -62,8 +62,25 @@ class Environment:
            import scons.Defaults
            kw['BUILDERS'] = scons.Defaults.Builders[:]
        self.Dictionary.update(copy.deepcopy(kw))
+
+       class BuilderWrapper:
+           """Wrapper class that allows an environment to
+           be associated with a Builder at instantiation.
+           """
+           def __init__(self, env, builder):
+               self.env = env
+               self.builder = builder
+       
+           def __call__(self, target = None, source = None):
+               return self.builder(self.env, target, source)
+
+           def execute(self, **kw):
+               apply(self.builder.execute, (), kw)
+
        for b in kw['BUILDERS']:
-           setattr(self, b.name, b)
+           setattr(self, b.name, BuilderWrapper(self, b))
+
+
 
     def __cmp__(self, other):
        return cmp(self.Dictionary, other.Dictionary)
index 767f29720b619076a6a8d23ac190d595a79e2576..e4eb45a0fc8a008f1275f3cc9d8bb0dd5cd4f9a0 100644 (file)
@@ -17,3 +17,6 @@ class Node:
 
     def builder_set(self, builder):
        self.builder = builder
+
+    def env_set(self, env):
+       self.env = env