text: //===--- Util.h - Common Driver Utilities -----------------------*- C++ -*-===//
  //
  // This source file is part of the Swift.org open source project
  //
  // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
  // Licensed under Apache License v2.0 with Runtime Library Exception
  //
  // See https://swift.org/LICENSE.txt for license information
  // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
  //
  //===----------------------------------------------------------------------===//
  
  #ifndef SWIFT_DRIVER_UTIL_H
  #define SWIFT_DRIVER_UTIL_H
  
  #include "swift/Driver/Types.h"
  #include "swift/Basic/LLVM.h"
  #include "llvm/ADT/SmallVector.h"
  
  namespace llvm {
  namespace opt {
    class Arg;
  } // end namespace opt
  } // end namespace llvm
  
  namespace swift {
  
  namespace driver {
    /// An input argument from the command line and its inferred type.
    typedef std::pair<types::ID, const llvm::opt::Arg *> InputPair;
    /// Type used for a list of input arguments.
    typedef SmallVector<InputPair, 16> InputFileList;
  
    enum class LinkKind {
      None,
      Executable,
      DynamicLibrary
    };
  
    /// Used by a Job to request a "filelist": a file containing a list of all
    /// input or output files of a certain type.
    ///
    /// The Compilation is responsible for generating this file before running
    /// the Job this info is attached to.
    struct FilelistInfo {
      enum WhichFiles : bool {
        Input,
        Output
      };
  
      StringRef path;
      types::ID type;
      WhichFiles whichFiles;
    };
  
  } // end namespace driver
  } // end namespace swift
  
  #endif
  