code: def release_target_info(self):
          
          if (self.released_target_info or SCons.Node.interactive):
              return
  
          if not hasattr(self.attributes, 'keep_targetinfo'):
              # Cache some required values, before releasing
              # stuff like env, executor and builder...
              self.changed(allowcache=True)
              self.get_contents_sig()
              self.get_build_env()
              # Now purge unneeded stuff to free memory...
              self.executor = None
              self._memo.pop('rfile', None)
              self.prerequisites = None
              # Cleanup lists, but only if they're empty
              if not len(self.ignore_set):
                  self.ignore_set = None
              if not len(self.implicit_set):
                  self.implicit_set = None
              if not len(self.depends_set):
                  self.depends_set = None
              if not len(self.ignore):
                  self.ignore = None
              if not len(self.depends):
                  self.depends = None
              # Mark this node as done, we only have to release
              # the memory once...
              self.released_target_info = True
docs: Called just after this node has been marked
           up-to-date or was built completely.
  
           This is where we try to release as many target node infos
           as possible for clean builds and update runs, in order
           to minimize the overall memory consumption.
  
           We'd like to remove a lot more attributes like self.sources
           and self.sources_set, but they might get used
           in a next build step. For example, during configuration
           the source files for a built E{*}.o file are used to figure out
           which linker to use for the resulting Program (gcc vs. g++)!
           That's why we check for the 'keep_targetinfo' attribute,
           config Nodes and the Interactive mode just don't allow
           an early release of most variables.
  
           In the same manner, we can't simply remove the self.attributes
           here. The smart linking relies on the shared flag, and some
           parts of the java Tool use it to transport information
           about nodes...
  
           @see: built() and Node.release_target_info()