summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorTim Rowley <[email protected]>2017-07-26 15:17:49 -0500
committerTim Rowley <[email protected]>2017-07-27 08:31:21 -0500
commite21fc2c625279b29a3c05d3341b8b748655d5cec (patch)
treeae7573170b06b0cd7a3cd849e607464929a67c68 /src/gallium
parent2c34b49d9e2fe03376385199ef76915884ffd962 (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')
-rw-r--r--src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp21
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
}