summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorcmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-04 17:08:49 +0000
committercmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-04 17:08:49 +0000
commit788b8a168ca0b227f9335745387b6838ac5cf53f (patch)
tree46857f149b2fd90d07ffd6167c5fa7b9083ba7c7 /net
parent9c2718af78a64bab740316ed83d4fbef88df1756 (diff)
downloadchromium_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.cc58
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;
}