Index: source/libvpx/test/video_source.h |
=================================================================== |
--- source/libvpx/test/video_source.h (revision 240950) |
+++ source/libvpx/test/video_source.h (working copy) |
@@ -18,16 +18,35 @@ |
namespace libvpx_test { |
-static FILE *OpenTestDataFile(const std::string& file_name) { |
- std::string path_to_source = file_name; |
- const char *kDataPath = getenv("LIBVPX_TEST_DATA_PATH"); |
+// Helper macros to ensure LIBVPX_TEST_DATA_PATH is a quoted string. |
+// These are undefined right below GetDataPath |
+// NOTE: LIBVPX_TEST_DATA_PATH MUST NOT be a quoted string before |
+// Stringification or the GetDataPath will fail at runtime |
+#define TO_STRING(S) #S |
+#define STRINGIFY(S) TO_STRING(S) |
- if (kDataPath) { |
- path_to_source = kDataPath; |
- path_to_source += "/"; |
- path_to_source += file_name; |
+// A simple function to encapsulate cross platform retrieval of test data path |
+static std::string GetDataPath() { |
+ const char *const data_path = getenv("LIBVPX_TEST_DATA_PATH"); |
+ if (data_path == NULL) { |
+#ifdef LIBVPX_TEST_DATA_PATH |
+ // In some environments, we cannot set environment variables |
+ // Instead, we set the data path by using a preprocessor symbol |
+ // which can be set from make files |
+ return STRINGIFY(LIBVPX_TEST_DATA_PATH); |
+#else |
+ return "."; |
+#endif |
} |
+ return data_path; |
+} |
+// Undefining stringification macros because they are not used elsewhere |
+#undef TO_STRING |
+#undef STRINGIFY |
+ |
+static FILE *OpenTestDataFile(const std::string& file_name) { |
+ const std::string path_to_source = GetDataPath() + "/" + file_name; |
return fopen(path_to_source.c_str(), "rb"); |
} |