/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#pragma once

#include <string>
#include <vector>

enum class LookupMethod
{
  ByName,
  IncludeAngle,
  IncludeQuote,
};

struct cmSourceReqInfo
{
  std::string LogicalName;
  std::string SourcePath;
  std::string CompiledModulePath;
  bool UseSourcePath = false;

  // Provides-only fields.
  bool IsInterface = true;

  // Requires-only fields.
  LookupMethod Method = LookupMethod::ByName;
};

struct cmScanDepInfo
{
  std::string PrimaryOutput;
  std::vector<std::string> ExtraOutputs;

  // Set of provided and required modules.
  std::vector<cmSourceReqInfo> Provides;
  std::vector<cmSourceReqInfo> Requires;
};

bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp,
                                 cmScanDepInfo* info);
bool cmScanDepFormat_P1689_Write(std::string const& path,
                                 cmScanDepInfo const& info);
