diff --git a/src/macro/Directives.cc b/src/macro/Directives.cc index 9e8ccd99da13fa0fcf89d560b9cacc7a90315a32..9d9f94c684b822b6f53140f2e0528dda81f1f4d0 100644 --- a/src/macro/Directives.cc +++ b/src/macro/Directives.cc @@ -1,5 +1,5 @@ /* - * Copyright © 2019-2021 Dynare Team + * Copyright © 2019-2022 Dynare Team * * This file is part of Dynare. * @@ -98,7 +98,20 @@ IncludePath::interpret(ostream &output, Environment &env, vector<filesystem::pat StringPtr msp = dynamic_pointer_cast<String>(expr->eval(env)); if (!msp) throw StackTrace("File name does not evaluate to a string"); +#ifdef _WIN32 + /* Trim trailing slashes and backslashes in the path. This is a + workaround for a GCC/MinGW bug present in version 10.2 + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88881, that affects + gcc-mingw-w64 in Debian “Bullseye” 11. It is fixed in GCC 10.3, and + thus should be fixed in Debian “Bookworm” 12. + See Madysson/estimation-codes#11. */ + string ipstr = static_cast<string>(*msp); + while (ipstr.size() > 1 && (ipstr.back() == '/' || ipstr.back() == '\\')) + ipstr.pop_back(); + path ip{ipstr}; +#else path ip = static_cast<string>(*msp); +#endif if (!is_directory(ip)) throw StackTrace(ip.string() + " does not evaluate to a valid directory"); if (!exists(ip))