From e21fc2c625279b29a3c05d3341b8b748655d5cec Mon Sep 17 00:00:00 2001 From: Tim Rowley Date: Wed, 26 Jul 2017 15:17:49 -0500 Subject: [PATCH] swr/rast: non-regex knob fallback code for gcc < 4.9 gcc prior to 4.9 didn't implement , causing a startup crash in the swr knob parameter reading code. CC: Reviewed-by: Bruce Cherniak --- .../swr/rasterizer/codegen/templates/gen_knobs.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp index e109fd26597..06b93bd72bb 100644 --- a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp +++ b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp @@ -140,6 +140,26 @@ extern GlobalKnobs g_GlobalKnobs; //======================================================== void KnobBase::autoExpandEnvironmentVariables(std::string &text) { +#if (__GNUC__) && (GCC_VERSION < 409000) + // isn't implemented prior to gcc-4.9.0 + // unix style variable replacement + size_t start; + while ((start = text.find("${'${'}")) != std::string::npos) { + size_t end = text.find("}"); + if (end == std::string::npos) + break; + const std::string var = GetEnv(text.substr(start + 2, end - start - 2)); + text.replace(start, end - start + 1, var); + } + // win32 style variable replacement + while ((start = text.find("%")) != std::string::npos) { + size_t end = text.find("%", start + 1); + if (end == std::string::npos) + break; + const std::string var = GetEnv(text.substr(start + 1, end - start - 1)); + text.replace(start, end - start + 1, var); + } +#else { // unix style variable replacement static std::regex env("\\$\\{([^}]+)\\}"); @@ -164,6 +184,7 @@ void KnobBase::autoExpandEnvironmentVariables(std::string &text) text.replace(match.prefix().length(), match[0].length(), var); } } +#endif } -- 2.11.0