diff options
Diffstat (limited to 'net/test/python_utils.cc')
-rw-r--r-- | net/test/python_utils.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc index 438c3d7..3a1068f 100644 --- a/net/test/python_utils.cc +++ b/net/test/python_utils.cc @@ -7,6 +7,7 @@ #include "base/base_paths.h" #include "base/environment.h" #include "base/file_path.h" +#include "base/file_util.h" #include "base/path_service.h" #include "base/scoped_ptr.h" #include "base/utf_string_conversions.h" @@ -36,6 +37,34 @@ void AppendToPythonPath(const FilePath& dir) { } } +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)) { + return false; + } + + const FilePath kPyProto(FILE_PATH_LITERAL("pyproto")); + +#if defined(OS_MACOSX) + // On Mac, 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); + return false; + } + generated_code_dir = parent; + } +#endif + *dir = generated_code_dir.Append(kPyProto); + return true; +} + bool GetPythonRunTime(FilePath* dir) { #if defined(OS_WIN) if (!PathService::Get(base::DIR_SOURCE_ROOT, dir)) @@ -48,4 +77,3 @@ bool GetPythonRunTime(FilePath* dir) { #endif return true; } - |