diff --git a/test/video_source.h b/test/video_source.h index 26d53282f..3d01d39b2 100644 --- a/test/video_source.h +++ b/test/video_source.h @@ -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"); }