From 1b6baf49da204756f5f1f82e6fb2ba48e151a2a1 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 23 Apr 2021 15:42:15 +0200 Subject: Fix "qmake -spec foo" call for cross builds In a cross built Qt, for example Qt for Android, calling "qmake -spec android-clang" led to an error message: "Could not find qmake spec '-qtconf'." This happened, because: - the qmake in Qt for Android is a wrapper script that calls "qmake -qtconf qt_target.conf -spec android-clang" - the first stage of command line argument handling in qmake garbled the call to "qmake -spec -qtconf qt_target.conf android-clang" We do not modify the order of arguments anymore. Instead, we skip the "-qtconf " arguments in the first argument handling stage that is supposed to determine qmake's modus operandi (like -project or -query). This amends commit 661b586a69740bd9a1791622f8b238d290ebe00d. Fixes: QTBUG-93079 Task-number: QTBUG-85136 Change-Id: I12ec25b17d64c00be2a3904b7c4a975b781500a0 Reviewed-by: Alexandru Croitor (cherry picked from commit 63a812b85191c9cfe0704d400df86ce7961dea12) --- qmake/option.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/qmake/option.cpp b/qmake/option.cpp index 062b519a71..b9e8b770eb 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -403,8 +403,9 @@ Option::init(int argc, char **argv) for (int i = 1; i < argc; i++) args << QString::fromLocal8Bit(argv[i]); - while (!args.isEmpty()) { - QString opt = args.at(0); + qsizetype idx = 0; + while (idx < args.size()) { + QString opt = args.at(idx); if (opt == "-project") { Option::recursive = true; Option::qmake_mode = Option::QMAKE_GENERATE_PROJECT; @@ -421,15 +422,15 @@ Option::init(int argc, char **argv) } else if (opt == "-makefile") { Option::qmake_mode = Option::QMAKE_GENERATE_MAKEFILE; } else if (opt == "-qtconf") { - if (args.length() >= 3) { - // Move the argument following "-qtconf " in front and check again. - args.prepend(args.takeAt(2)); - continue; - } + // Skip "-qtconf " and proceed. + ++idx; + if (idx + 1 < args.length()) + ++idx; + continue; } else { break; } - args.takeFirst(); + args.takeAt(idx); break; } -- cgit v1.2.3