def get_binfo(self):
        try:
            return self.binfo
        except AttributeError:
            pass
        binfo = self.new_binfo()
        self.binfo = binfo
        executor = self.get_executor()
        ignore_set = self.ignore_set
        if self.has_builder():
            binfo.bact = str(executor)
            binfo.bactsig = SCons.Util.MD5signature(executor.get_contents())
        if self._specific_sources:
            sources = [ s for s in self.sources if not s in ignore_set]
        else:
            sources = executor.get_unignored_sources(self, self.ignore)
        seen = set()
        binfo.bsources = [s for s in sources if s not in seen and not seen.add(s)]
        binfo.bsourcesigs = [s.get_ninfo() for s in binfo.bsources]
        binfo.bdepends = self.depends
        binfo.bdependsigs = [d.get_ninfo() for d in self.depends if d not in ignore_set]
        binfo.bimplicit = self.implicit or []
        binfo.bimplicitsigs = [i.get_ninfo() for i in binfo.bimplicit if i not in ignore_set]
        return binfo