Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1376)

Unified Diff: tools/gn/setup.cc

Issue 1707293002: GN: Normalize the build directory path (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/setup.cc
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc
index 79814e602fe7a2f14a152ce9dae5d3d361d5f2d7..bad4b7b14b7803c9170bb37c97cbf8cd2ca9613f 100644
--- a/tools/gn/setup.cc
+++ b/tools/gn/setup.cc
@@ -226,6 +226,21 @@ base::FilePath FindWindowsPython() {
}
#endif
+// Expands all ./, ../, and symbolic links in the given path.
+bool NormalizePath(const base::FilePath& path, base::FilePath* out) {
+#if defined(OS_POSIX)
+ char buf[PATH_MAX];
+ if (!realpath(path.value().c_str(), buf)) {
+ return false;
+ }
+ *out = base::FilePath(buf);
+#else
+ // Do nothing on a non-POSIX system.
+ *out = path;
+#endif
+ return true;
+}
+
} // namespace
const char Setup::kBuildArgFileName[] = "args.gn";
@@ -513,9 +528,16 @@ bool Setup::FillSourceDir(const base::CommandLine& cmdline) {
root_path = dotfile_name_.DirName();
}
+ base::FilePath root_path_normalized;
+ if (!NormalizePath(root_path, &root_path_normalized)) {
+ Err(Location(), "Can't normalize the root path.",
+ "I could not normalize the path \"" + FilePathToUTF8(root_path) + "\".")
+ .PrintToStdout();
+ return false;
+ }
if (scheduler_.verbose_logging())
- scheduler_.Log("Using source root", FilePathToUTF8(root_path));
- build_settings_.SetRootPath(root_path);
+ scheduler_.Log("Using source root", FilePathToUTF8(root_path_normalized));
+ build_settings_.SetRootPath(root_path_normalized);
return true;
}
@@ -531,11 +553,21 @@ bool Setup::FillBuildDir(const std::string& build_dir, bool require_exists) {
return false;
}
+ base::FilePath build_dir_path = build_settings_.GetFullPath(resolved);
+ base::FilePath build_dir_path_normalized;
+ if (!NormalizePath(build_dir_path, &build_dir_path_normalized)) {
+ Err(Location(), "Can't normalize the root path.",
+ "I could not normalize the path \"" + FilePathToUTF8(build_dir_path) +
+ "\".").PrintToStdout();
+ return false;
+ }
+ resolved = SourceDirForPath(build_settings_.root_path(),
+ build_dir_path_normalized);
+
if (scheduler_.verbose_logging())
scheduler_.Log("Using build dir", resolved.value());
if (require_exists) {
- base::FilePath build_dir_path = build_settings_.GetFullPath(resolved);
if (!base::PathExists(build_dir_path.Append(
FILE_PATH_LITERAL("build.ninja")))) {
Err(Location(), "Not a build directory.",
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698