Index: base/base_paths_posix.cc |
diff --git a/base/base_paths_posix.cc b/base/base_paths_posix.cc |
index d8d5ae61b7285ab113eb46718610a25e08773bf7..a1c45a03df1c470bd15a9af31044ac4241780bc4 100644 |
--- a/base/base_paths_posix.cc |
+++ b/base/base_paths_posix.cc |
@@ -74,6 +74,20 @@ bool PathProviderPosix(int key, FilePath* result) { |
#endif |
} |
case base::DIR_SOURCE_ROOT: { |
+ // Allow passing this in the environment, for more flexibility in build |
+ // tree configurations (sub-project builds, gyp --output_dir, etc.) |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ std::string cr_source_root; |
+ if (env->GetVar("CR_SOURCE_ROOT", &cr_source_root)) { |
+ path = FilePath(cr_source_root); |
+ if (file_util::PathExists(path)) { |
+ *result = path; |
+ return true; |
+ } else { |
+ DLOG(WARNING) << "CR_SOURCE_ROOT is set, but it appears to not " |
+ << "point to a directory."; |
+ } |
+ } |
// On POSIX, unit tests execute two levels deep from the source root. |
// For example: out/{Debug|Release}/net_unittest |
if (PathService::Get(base::DIR_EXE, &path)) { |