summaryrefslogtreecommitdiffstats
path: root/net/test/python_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/test/python_utils.cc')
-rw-r--r--net/test/python_utils.cc30
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;
}
-