From c394fc9a2317464f35d5679514e605e19f2c0078 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 29 Apr 2014 20:39:13 +0200 Subject: [PATCH] fix $$shell_path() for mingw+sh the msys shell expects unix-like paths with drives converted from d:\ to /d/. Change-Id: I09e25ed2c868702e5d7d8b9cc8c04cc13410eeff Reviewed-by: Joerg Bornemann (cherry picked from qtbase/d52b00e1d3cc60c81b54a89d6da488dc4bbce384) Reviewed-by: Tobias Hunger Reviewed-by: Joerg Bornemann --- src/shared/proparser/qmakebuiltins.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp index b7fe6af677b..376e552ccfd 100644 --- a/src/shared/proparser/qmakebuiltins.cpp +++ b/src/shared/proparser/qmakebuiltins.cpp @@ -1053,10 +1053,18 @@ ProStringList QMakeEvaluator::evaluateBuiltinExpand( evalError(fL1S("shell_path(path) requires one argument.")); } else { QString rstr = args.at(0).toQString(m_tmp1); - if (m_dirSep.startsWith(QLatin1Char('\\'))) + if (m_dirSep.startsWith(QLatin1Char('\\'))) { rstr.replace(QLatin1Char('/'), QLatin1Char('\\')); - else + } else { rstr.replace(QLatin1Char('\\'), QLatin1Char('/')); +#ifdef Q_OS_WIN + // Convert d:/foo/bar to msys-style /d/foo/bar. + if (rstr.length() > 2 && rstr.at(1) == QLatin1Char(':') && rstr.at(2) == QLatin1Char('/')) { + rstr[1] = rstr.at(0); + rstr[0] = QLatin1Char('/'); + } +#endif + } ret << (rstr.isSharedWith(m_tmp1) ? args.at(0) : ProString(rstr).setSource(args.at(0))); } break;