From ab9160de90e3cebe96d51135b6b8051ebda4a0c0 Mon Sep 17 00:00:00 2001 From: Joshua Litt Date: Mon, 4 Nov 2013 13:47:30 -0800 Subject: [PATCH] Allow test data path to be set by preprocessor symbol Change-Id: I19c482c7cba34db574b3f33178ba20aede49779e --- test/video_source.h | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) 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"); - - if (kDataPath) { - path_to_source = kDataPath; - path_to_source += "/"; - path_to_source += file_name; +// 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) + +// 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"); } -- 2.40.0