Builder.py:537

    def _execute(self, env, target, source, overwarn={}, executor_kw={}):
        # We now assume that target and source are lists or None.
        if self.src_builder:
            source = self.src_builder_sources(env, source, overwarn)

Hi. I've ran into this (what seems to be a bug) while trying to find
the builder of a created file node.

It looks like for you this test is never true. Because if the
src_builder was a builder object, it would be implementing a
__nonzero__ method, which throws:
InternalError: Do not test for the Node.builder attribute directly;
use Node.has_builder() instead

I ran into this eventually by trying to assign to src_builder property
of a builder (this is something where I'm blur, but can't find any
other way to link a file node to its builder). So that when I call
_execute, self.src_builder exists, but can't be used inside condition.
:|

I'm most certain I don't quite understand yet how exactly to do what I
need (so, I probably shouldn't even get there), just stumbled over
this thing by accident.


====================

The question: suppose I have a generator function like this:

def asGenerator(source, target, env, for_signature):
    print "source: %s" % source[0].get_path()
    print "abs dir: %s" % source[0].src_builder

Suppose I have created a file node (which is source[0].get_path()) like so:

class FlashBuilderBase(BuilderBase):
    """
    An extension needed to run Flash() target with no arguments
    """
    def __init__(self,  # long list of arguments...
                        **overrides):
        self.fb_project_settings = None
        self.fd_project_settings = None
        return super(FlashBuilderBase, self).__init__(# same arguments
once again...
                          **overrides)

    def _execute(self, env, target, source, overwarn={}, executor_kw={}):
        # ...
        self.fb_project = # some info I need about the project file ...
        if not target:
            target = # some code to find the target ...

        if not source:
            source = target # this is the file, which later becomes
the source[0] in asGenerator

        return super(FlashBuilderBase, self)._execute(
            env, target, source, overwarn, executor_kw)

Now, I have to get reference this builder (FlashBuilderBase) from
source[0] in asGenerator - how'd I do that?

Thanks.

Oleg
_______________________________________________
Scons-dev mailing list
Scons-dev@scons.org
http://two.pairlist.net/mailman/listinfo/scons-dev

Reply via email to