diff -up glibmm-2.56.0/tools/extra_defs_gen/generate_extra_defs.cc.no-regex-replace glibmm-2.56.0/tools/extra_defs_gen/generate_extra_defs.cc --- glibmm-2.56.0/tools/extra_defs_gen/generate_extra_defs.cc.no-regex-replace 2018-06-09 12:23:09.263360049 -0400 +++ glibmm-2.56.0/tools/extra_defs_gen/generate_extra_defs.cc 2018-06-09 12:42:26.490317489 -0400 @@ -36,6 +36,25 @@ void add_signal_flag_if(std::string& str } // anonymous namespace +static std::string +string_replace (const char *input, + const char *old_token, + const char *new_token) +{ + char **split_string; + char *c_output; + std::string output; + + split_string = g_strsplit (input, old_token, -1); + c_output = g_strjoinv (new_token, split_string); + g_strfreev (split_string); + + output = c_output; + g_free (c_output); + + return output; +} + std::string get_property_with_node_name( GParamSpec* pParamSpec, const std::string& strObjectName, const std::string& strNodeName) @@ -87,7 +106,7 @@ get_property_with_node_name( // Replace newlines with \n. // A string default value can contain newline characters. // gmmproc removes all newlines when it reads .defs files. - defString = std::regex_replace(defCString, std::regex("\n"), "\\n"); + defString = string_replace (defCString, "\n", "\\n"); } else defString = ""; // A NULL string pointer becomes an empty string.