diff options
author | cmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-04 17:08:49 +0000 |
---|---|---|
committer | cmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-04 17:08:49 +0000 |
commit | 788b8a168ca0b227f9335745387b6838ac5cf53f (patch) | |
tree | 46857f149b2fd90d07ffd6167c5fa7b9083ba7c7 /net | |
parent | 9c2718af78a64bab740316ed83d4fbef88df1756 (diff) | |
download | chromium_src-788b8a168ca0b227f9335745387b6838ac5cf53f.zip chromium_src-788b8a168ca0b227f9335745387b6838ac5cf53f.tar.gz chromium_src-788b8a168ca0b227f9335745387b6838ac5cf53f.tar.bz2 |
Revert "Revert "Set PYTHON_PATH at TestServer Init() instead of Start()""
Re-land 70392, to fix build break and update change description to be
more accurate.
If the pyproto directory can't be found relative to DIR_EXE in a
chromeos build, look relative to DIR_SOURCE_ROOT as well.
BUG=66833
TEST=run browser tests, run chrome os browser test autotest, run ui tests
Review URL: http://codereview.chromium.org/6066008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70415 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/test/python_utils.cc | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc index 0c61b48..df404ad 100644 --- a/net/test/python_utils.cc +++ b/net/test/python_utils.cc @@ -8,6 +8,7 @@ #include "base/environment.h" #include "base/file_path.h" #include "base/file_util.h" +#include "base/logging.h" #include "base/path_service.h" #include "base/scoped_ptr.h" #include "base/utf_string_conversions.h" @@ -37,31 +38,68 @@ void AppendToPythonPath(const FilePath& dir) { } } +namespace { + +// Search for |to_try|, rolling up the directory tree from +// |start_dir|. If found, return true and put the path to |to_try| in +// |out_dir|. If not, return false and leave |out_dir| untouched. +bool TryRelativeToDir(const FilePath& start_dir, + const FilePath& to_try, + FilePath* out_dir) { + FilePath dir(start_dir); + while (!file_util::DirectoryExists(dir.Append(to_try))) { + FilePath parent = dir.DirName(); + if (parent == dir) { + // We hit the root directory. + return false; + } + dir = parent; + } + *out_dir = dir; + return true; +} + +} // namespace + bool GetPyProtoPath(FilePath* dir) { // Locate the Python code generated by the protocol buffers compiler. FilePath generated_code_dir; if (!PathService::Get(base::DIR_EXE, &generated_code_dir)) { + LOG(ERROR) << "Can't find " << generated_code_dir.value(); return false; } const FilePath kPyProto(FILE_PATH_LITERAL("pyproto")); #if defined(OS_MACOSX) || defined(OS_CHROMEOS) - // On Mac and Chrome OS, DIR_EXE might be pointing deep into the Release/ - // (or Debug/) directory and we can't depend on how far down it goes. So we - // walk upwards from DIR_EXE until we find a likely looking spot. - while (!file_util::DirectoryExists(generated_code_dir.Append(kPyProto))) { - FilePath parent = generated_code_dir.DirName(); - if (parent == generated_code_dir) { - // We hit the root directory. Maybe we didn't build any targets which - // produced Python protocol buffers. - PathService::Get(base::DIR_EXE, &generated_code_dir); + FilePath source_dir; + if (!PathService::Get(base::DIR_SOURCE_ROOT, &source_dir)) { + LOG(ERROR) << "Can't find " << source_dir.value(); + return false; + } + // On Mac, and possibly Chrome OS, DIR_EXE might be pointing deep + // into the Release/ (or Debug/) directory and we can't depend on + // how far down it goes. So we walk upwards from DIR_EXE until we + // find a likely looking spot. + if (!TryRelativeToDir(generated_code_dir, kPyProto, dir)) { + LOG(WARNING) << "Can't find " << kPyProto.value() + << " next to " << generated_code_dir.value(); + // On Chrome OS, we may have installed the test binaries and support tools + // in a wholly separate location, relative to DIR_SOURCE_ROOT. We'll want + // to do a similar investigation from that point as well. + generated_code_dir = source_dir + .Append(FILE_PATH_LITERAL("out")) + .Append(FILE_PATH_LITERAL("Release")); + if (!TryRelativeToDir(generated_code_dir, kPyProto, dir)) { + LOG(WARNING) << "Can't find " << kPyProto.value() + << " next to " << generated_code_dir.value(); return false; } - generated_code_dir = parent; } + generated_code_dir = *dir; #endif *dir = generated_code_dir.Append(kPyProto); + VLOG(2) << "Found " << kPyProto.value() << " in " << dir->value(); return true; } |