docs: def calf(self, spec):
          """
          Typical safe usage is this, which sets everything that could be
          problematic up.
  
          Requires the filename which everything will be produced to.
          """
  
          if not isinstance(spec, Spec):
              raise TypeError('spec must be of type Spec')
  
          if not spec.get(BUILD_DIR):
              tempdir = realpath(mkdtemp())
              spec.advise(CLEANUP, shutil.rmtree, tempdir)
              build_dir = join(tempdir, 'build')
              mkdir(build_dir)
              spec[BUILD_DIR] = build_dir
          else:
              build_dir = self.realpath(spec, BUILD_DIR)
              if not isdir(build_dir):
                  logger.error("build_dir '%s' is not a directory", build_dir)
                  raise_os_error(errno.ENOTDIR, build_dir)
  
          self.realpath(spec, EXPORT_TARGET)
  
          # Finally, handle setup which may set up the deferred advices,
          # as all the toolchain (and its runtime and/or its parent
          # runtime and related toolchains) spec advises should have been
          # done.
          spec.handle(SETUP)
  
          try:
              process = ('prepare', 'compile', 'assemble', 'link', 'finalize')
              for p in process:
                  spec.handle('before_' + p)
                  getattr(self, p)(spec)
                  spec.handle('after_' + p)
              spec.handle(SUCCESS)
          except ToolchainCancel:
              # quietly handle the issue and move on out of here.
              pass
          finally:
              spec.handle(CLEANUP)