// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gn/settings.h"

#include "base/logging.h"
#include "gn/filesystem_utils.h"
#include "util/build_config.h"

Settings::Settings(const BuildSettings* build_settings,
                   const std::string& output_subdir_name)
    : build_settings_(build_settings), base_config_(this) {
  if (output_subdir_name.empty()) {
    toolchain_output_dir_ = build_settings->build_dir();
  } else {
    // We guarantee this ends in a slash.
    DCHECK(output_subdir_name[output_subdir_name.size() - 1] == '/');
    toolchain_output_subdir_ = OutputFile(output_subdir_name);

    DCHECK(!build_settings->build_dir().is_null());
    std::string dir = build_settings->build_dir().value();
    dir.append(toolchain_output_subdir_.value());
    toolchain_output_dir_ = SourceDir(std::move(dir));
  }
  // The output dir will be null in some tests and when invoked to parsed
  // one-off data without doing generation.
  if (!toolchain_output_dir_.is_null())
    toolchain_gen_dir_ = SourceDir(toolchain_output_dir_.value() + "gen/");
}

bool Settings::ShouldShowToolchain(
    std::initializer_list<const Label*> labels) const {
  for (auto label : labels) {
    if (label->GetToolchainLabel() != default_toolchain_label_)
      return true;
  }
  return false;
}
