| // Copyright 2014 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/output_file.h" |
| |
| #include "gn/filesystem_utils.h" |
| #include "gn/source_file.h" |
| |
| OutputFile::OutputFile(const BuildSettings* build_settings, |
| const SourceFile& source_file) { |
| value_ = |
| StringAtom(RebasePath(source_file.value(), build_settings->build_dir(), |
| build_settings->root_path_utf8())); |
| } |
| |
| SourceFile OutputFile::AsSourceFile(const BuildSettings* build_settings) const { |
| std::string_view val = value(); |
| DCHECK(!val.empty()); |
| DCHECK(val.back() != '/'); |
| |
| std::string path = build_settings->build_dir().value(); |
| path.append(val); |
| return SourceFile(std::move(path)); |
| } |
| |
| SourceDir OutputFile::AsSourceDir(const BuildSettings* build_settings) const { |
| std::string_view val = value(); |
| if (!val.empty()) { |
| // Empty means the root build dir. Otherwise, we expect it to end in a |
| // slash. |
| DCHECK(val.back() == '/'); |
| } |
| std::string path = build_settings->build_dir().value(); |
| path.append(val); |
| NormalizePath(&path); |
| return SourceDir(std::move(path)); |
| } |