GN: Normalize the build directory path BUG=586906 TEST=ln -s /tmp out_tmp && out/gn/gn gen out_tmp/Release Review URL: https://codereview.chromium.org/1708513002 Cr-Original-Commit-Position: refs/heads/master@{#375970} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: 89d33db3bfd53fbb3d85bb218ad4db8489a4dc34
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc index 79814e6..831e4e4 100644 --- a/tools/gn/setup.cc +++ b/tools/gn/setup.cc
@@ -521,10 +521,23 @@ } bool Setup::FillBuildDir(const std::string& build_dir, bool require_exists) { +#if defined(OS_POSIX) + // Expand all ./, ../, and symbolic links in build_dir. + char realpath_buf[PATH_MAX]; + if (!realpath(build_dir.c_str(), realpath_buf)) { + Err(Location(), "Can't normalize the build directory path.", + strerror(errno)) .PrintToStdout(); + return false; + } + const std::string build_dir_realpath = realpath_buf; +#else + const std::string& build_dir_realpath = build_dir; +#endif + Err err; SourceDir resolved = SourceDirForCurrentDirectory(build_settings_.root_path()). - ResolveRelativeDir(Value(nullptr, build_dir), &err, + ResolveRelativeDir(Value(nullptr, build_dir_realpath), &err, build_settings_.root_path_utf8()); if (err.has_error()) { err.PrintToStdout();