code: def prepare(self):
          
          global print_prepare
          T = self.tm.trace
          if T: T.write(self.trace_message(u'Task.prepare()', self.node))
  
          # Now that it's the appropriate time, give the TaskMaster a
          # chance to raise any exceptions it encountered while preparing
          # this task.
          self.exception_raise()
  
          if self.tm.message:
              self.display(self.tm.message)
              self.tm.message = None
  
          # Let the targets take care of any necessary preparations.
          # This includes verifying that all of the necessary sources
          # and dependencies exist, removing the target file(s), etc.
          #
          # As of April 2008, the get_executor().prepare() method makes
          # sure that all of the aggregate sources necessary to build this
          # Task's target(s) exist in one up-front check.  The individual
          # target t.prepare() methods check that each target's explicit
          # or implicit dependencies exists, and also initialize the
          # .sconsign info.
          executor = self.targets[0].get_executor()
          if executor is None:
              return
          executor.prepare()
          for t in executor.get_action_targets():
              if print_prepare:
                  print("Preparing target %s..."%t)
                  for s in t.side_effects:
                      print("...with side-effect %s..."%s)
              t.prepare()
              for s in t.side_effects:
                  if print_prepare:
                      print("...Preparing side-effect %s..."%s)
                  s.prepare()
docs: Called just before the task is executed.
  
          This is mainly intended to give the target Nodes a chance to
          unlink underlying files and make all necessary directories before
          the Action is actually called to build the targets.