From 1301eb87fd40d200310365f7553ab4b901a855d8 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 8 Apr 2019 13:39:45 +0200 Subject: Qt support: Fix detection of deployment target for Apple platforms In Qt 5.12, the deployment target information has moved from qmake.conf into an included file, so let's expand the includes before looking for the respective line. Fixes: QBS-1434 Change-Id: I174c03cf227f319e33f484e82735d7ed550c2b11 Reviewed-by: Mitch Curtis Reviewed-by: Joerg Bornemann --- share/qbs/module-providers/Qt/setup-qt.js | 59 ++++++++++++++----------------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/share/qbs/module-providers/Qt/setup-qt.js b/share/qbs/module-providers/Qt/setup-qt.js index 236b4dea4..b3044d72e 100644 --- a/share/qbs/module-providers/Qt/setup-qt.js +++ b/share/qbs/module-providers/Qt/setup-qt.js @@ -331,32 +331,25 @@ function getQtProperties(qmakeFilePath, qbs) { qtProps.entryPointLibsRelease = fillEntryPointLibs(qtProps, false); } else if (qtProps.mkspecPath.contains("macx")) { if (qtProps.qtMajorVersion >= 5) { - try { - var qmakeConf = new TextFile(FileInfo.joinPaths(qtProps.mkspecPath, "qmake.conf"), - TextFile.ReadOnly); - while (!qmakeConf.atEof()) { - var line = qmakeConf.readLine().trim(); - match = line.match - (/^QMAKE_(MACOSX|IOS|TVOS|WATCHOS)_DEPLOYMENT_TARGET\s*=\s*(.*)\s*$/); - if (match) { - var platform = match[1]; - var version = match[2]; - if (platform === "MACOSX") - qtProps.macosVersion = version; - else if (platform === "IOS") - qtProps.iosVersion = version; - else if (platform === "TVOS") - qtProps.tvosVersion = version; - else if (platform === "WATCHOS") - qtProps.watchosVersion = version; - } + var lines = getFileContentsRecursively(FileInfo.joinPaths(qtProps.mkspecPath, + "qmake.conf")); + for (var i = 0; i < lines.length; ++i) { + var line = lines[i].trim(); + match = line.match + (/^QMAKE_(MACOSX|IOS|TVOS|WATCHOS)_DEPLOYMENT_TARGET\s*=\s*(.*)\s*$/); + if (match) { + var platform = match[1]; + var version = match[2]; + if (platform === "MACOSX") + qtProps.macosVersion = version; + else if (platform === "IOS") + qtProps.iosVersion = version; + else if (platform === "TVOS") + qtProps.tvosVersion = version; + else if (platform === "WATCHOS") + qtProps.watchosVersion = version; } } - catch (e) {} - finally { - if (qmakeConf) - qmakeConf.close(); - } var isMac = qtProps.mkspecName !== "macx-ios-clang" && qtProps.mkspecName !== "macx-tvos-clang" && qtProps.mkspecName !== "macx-watchos-clang"; @@ -872,9 +865,9 @@ function allQt4Modules(qtProps) { return modules; } -function getPriFileContentsRecursively(priFilePath) { - var priFile = new TextFile(priFilePath, TextFile.ReadOnly); - var lines = splitNonEmpty(priFile.readAll(), '\n'); +function getFileContentsRecursively(filePath) { + var file = new TextFile(filePath, TextFile.ReadOnly); + var lines = splitNonEmpty(file.readAll(), '\n'); for (var i = 0; i < lines.length; ++i) { var includeString = "include("; var line = lines[i].trim(); @@ -883,17 +876,19 @@ function getPriFileContentsRecursively(priFilePath) { var offset = includeString.length; var closingParenPos = line.indexOf(')', offset); if (closingParenPos === -1) { - console.warn("Invalid include statement in '" + toNative(priFilePath) + "'"); + console.warn("Invalid include statement in '" + toNative(filePath) + "'"); continue; } - var includedFilePath = line.slice(offset, closingParenPos - offset); - var includedContents = getPriFileContentsRecursively(includedFilePath); + var includedFilePath = line.slice(offset, closingParenPos); + if (!FileInfo.isAbsolutePath(includedFilePath)) + includedFilePath = FileInfo.joinPaths(FileInfo.path(filePath), includedFilePath); + var includedContents = getFileContentsRecursively(includedFilePath); var j = i; for (var k = 0; k < includedContents.length; ++k) lines.splice(++j, 0, includedContents[k]); lines.splice(i--, 1); } - priFile.close(); + file.close(); return lines; } @@ -1033,7 +1028,7 @@ function allQt5Modules(qtProps) { moduleInfo.qbsName = moduleInfo.qbsName.replace("_private", "-private"); var hasV2 = false; var hasModuleEntry = false; - var lines = getPriFileContentsRecursively(priFilePath); + var lines = getFileContentsRecursively(priFilePath); for (var j = 0; j < lines.length; ++j) { var line = lines[j].trim(); var firstEqualsOffset = line.indexOf('='); -- cgit v1.2.3