From 0e1e5a2b14cb602030928431bec45af394be43e3 Mon Sep 17 00:00:00 2001 From: Tim Rowley Date: Mon, 26 Jun 2017 08:57:38 -0500 Subject: [PATCH] swr/rast: adjust std::string usage to fix build Some combinations of c++ compilers and standard libraries had problems with the string::replace code we were using previously. This should fix the travis-ci system. Tested-by: Eric Engestrom Reviewed-by: Bruce Cherniak --- .../swr/rasterizer/codegen/templates/gen_knobs.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 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 0527bf3b310..e109fd26597 100644 --- a/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp +++ b/src/gallium/drivers/swr/rasterizer/codegen/templates/gen_knobs.cpp @@ -141,21 +141,27 @@ extern GlobalKnobs g_GlobalKnobs; void KnobBase::autoExpandEnvironmentVariables(std::string &text) { { + // unix style variable replacement static std::regex env("\\$\\{([^}]+)\\}"); std::smatch match; while (std::regex_search(text, match, env)) { const std::string var = GetEnv(match[1].str()); - text.replace(match[0].first, match[0].second, var); + // certain combinations of gcc/libstd++ have problems with this + // text.replace(match[0].first, match[0].second, var); + text.replace(match.prefix().length(), match[0].length(), var); } } { + // win32 style variable replacement static std::regex env("\\%([^}]+)\\%"); std::smatch match; while (std::regex_search(text, match, env)) { const std::string var = GetEnv(match[1].str()); - text.replace(match[0].first, match[0].second, var); + // certain combinations of gcc/libstd++ have problems with this + // text.replace(match[0].first, match[0].second, var); + text.replace(match.prefix().length(), match[0].length(), var); } } } @@ -232,4 +238,4 @@ std::string GlobalKnobs::ToString(const char* optPerLinePrefix) return ' '*(max_len - name_len) -%> \ No newline at end of file +%> -- 2.30.2