code: def execute(self):
          
          T = self.tm.trace
          if T: T.write(self.trace_message(u'Task.execute()', self.node))
  
          try:
              cached_targets = []
              for t in self.targets:
                  if not t.retrieve_from_cache():
                      break
                  cached_targets.append(t)
              if len(cached_targets) < len(self.targets):
                  # Remove targets before building. It's possible that we
                  # partially retrieved targets from the cache, leaving
                  # them in read-only mode. That might cause the command
                  # to fail.
                  #
                  for t in cached_targets:
                      try:
                          t.fs.unlink(t.get_internal_path())
                      except (IOError, OSError):
                          pass
                  self.targets[0].build()
              else:
                  for t in cached_targets:
                      t.cached = 1
          except SystemExit:
              exc_value = sys.exc_info()[1]
              raise SCons.Errors.ExplicitExit(self.targets[0], exc_value.code)
          except SCons.Errors.UserError:
              raise
          except SCons.Errors.BuildError:
              raise
          except Exception as e:
              buildError = SCons.Errors.convert_to_BuildError(e)
              buildError.node = self.targets[0]
              buildError.exc_info = sys.exc_info()
              raise buildError
docs: Called to execute the task.
  
          This method is called from multiple threads in a parallel build,
          so only do thread safe stuff here.  Do thread unsafe stuff in
          prepare(), executed() or failed().