diff options
author | Tim Rowley <[email protected]> | 2017-07-26 15:17:49 -0500 |
---|---|---|
committer | Tim Rowley <[email protected]> | 2017-07-27 08:31:21 -0500 |
commit | e21fc2c625279b29a3c05d3341b8b748655d5cec (patch) | |
tree | ae7573170b06b0cd7a3cd849e607464929a67c68 /src/gallium/drivers/swr | |
parent | 2c34b49d9e2fe03376385199ef76915884ffd962 (diff) |
swr/rast: non-regex knob fallback code for gcc < 4.9
gcc prior to 4.9 didn't implement <regex>, causing a startup crash
in the swr knob parameter reading code.
CC: <[email protected]>
Reviewed-by: Bruce Cherniak <[email protected]>
Diffstat (limited to 'src/gallium/drivers/swr')
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
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) + // <regex> 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 } |