forked from qt-creator/qt-creator
Revert "QtSupport: Add support to register Qt versions via qtpaths"
The patch breaks several plugin unit tests; at the very least QtSupport,
AutoTest and ClangCodeModel.
This reverts commit 72aa77ced7
.
Change-Id: Iaa7f452d0f43d0072b0bbcf8934fa0dcd6f9b240
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -32121,16 +32121,16 @@ Spustil jste Qemu?</translation>
|
||||
<translation>Qt %1 (%2)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>Soubor %1 neexistuje nebo není spustitelný</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>Soubor qmake neexistuje nebo není spustitelný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version is not properly installed, please run make install</source>
|
||||
<translation>Verze Qt není správně nainstalována. Proveďte, prosím, příkaz "make install"</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Cestu ke spustitelným souborům instalace Qt se nepodařilo určit. Možná je cesta k %1 chybná?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Cestu ke spustitelným souborům instalace Qt se nepodařilo určit. Možná je cesta k qmake chybná?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -35382,16 +35382,16 @@ For flere detaljer, se /etc/sysctl.d/10-ptrace.conf
|
||||
<translation>Ingen qmake-sti sat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 findes ikke eller er ikke eksekverbar</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake findes ikke eller er ikke eksekverbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version is not properly installed, please run make install</source>
|
||||
<translation>Qt version er ikke ordentligt installeret, kør venligst make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Kunne ikke beslutte stien til binærene af Qt installationen, måske er %1-stien forkert?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Kunne ikke beslutte stien til binærene af Qt installationen, måske er qmake-stien forkert?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -10113,8 +10113,8 @@ Dies ist unabhängig vom Wert der Eigenschaft "visible" in QML.</trans
|
||||
<translation>Es ist keine qmake-Pfad gesetzt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>Die %1-Datei existiert nicht oder ist nicht ausführbar</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>Die qmake-Datei existiert nicht oder ist nicht ausführbar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -10141,8 +10141,8 @@ Dies ist unabhängig vom Wert der Eigenschaft "visible" in QML.</trans
|
||||
<translation>Die Qt-Version ist nicht richtig installiert, führen Sie bitte make install aus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Der Pfad zu den ausführbaren Dateien der Qt-Installation konnte nicht bestimmt werden, möglicherweise ist der Pfad zu %1 falsch?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Der Pfad zu den ausführbaren Dateien der Qt-Installation konnte nicht bestimmt werden, möglicherweise ist der Pfad zu qmake falsch?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -33604,8 +33604,8 @@ Nous allons essayer de travailler avec cela mais vous pourrez rencontrer des pro
|
||||
<translation>Chemin de qmake non spécifié</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 n'existe pas ou n'est pas exécutable</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake n'existe pas ou n'est pas exécutable</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -33633,8 +33633,8 @@ Nous allons essayer de travailler avec cela mais vous pourrez rencontrer des pro
|
||||
<translation>La version de Qt n'est pas correctement installée, veuillez exécuter make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Impossible de déterminer le chemin vers les programmes de Qt, peut-être que le chemin vers %1 est faux ?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Impossible de déterminer le chemin vers les programmes de Qt, peut-être que le chemin vers qmake est faux ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -41628,7 +41628,7 @@ Saving failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -41636,7 +41636,7 @@ Saving failed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
@@ -26108,16 +26108,16 @@ Do you want to save the data first?</source>
|
||||
<translation>qmake のパスが設定されていません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 が存在しないか実行可能ではありません</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake が存在しないか実行可能ではありません</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version is not properly installed, please run make install</source>
|
||||
<translation>Qt バージョンが正しくインストールされていません。make install を実行してください</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Qt インストール先のパスが特定できませんでした。%1 のパスが間違っていませんか?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Qt インストール先のパスが特定できませんでした。qmake のパスが間違っていませんか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -12382,8 +12382,8 @@ Dla projektów CMake, upewnij się, że zmienna QML_IMPORT_PATH jest obecna w CM
|
||||
<translation>Nie ustawiono ścieżki do qmake</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>Brak %1 lub nie jest on plikiem wykonywalnym</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>Brak qmake lub nie jest on plikiem wykonywalnym</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -12410,8 +12410,8 @@ Dla projektów CMake, upewnij się, że zmienna QML_IMPORT_PATH jest obecna w CM
|
||||
<translation>Wersja Qt zainstalowana niepoprawnie, uruchom komendę: make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Nie można określić ścieżki do plików binarnych instalacji Qt. Sprawdź ścieżkę do %1.</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Nie można określić ścieżki do plików binarnych instalacji Qt. Sprawdź ścieżkę do qmake.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -45319,8 +45319,8 @@ For more details, see /etc/sysctl.d/10-ptrace.conf
|
||||
<translation>Путь к qmake не указан</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 отсутствует или не запускается</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake отсутствует или не запускается</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -45347,8 +45347,8 @@ For more details, see /etc/sysctl.d/10-ptrace.conf
|
||||
<translation>Профиль Qt не установлен, пожалуйста выполните make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Не удалось определить путь к утилитам Qt. Может путь к %1 неверен?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Не удалось определить путь к утилитам Qt. Может путь к qmake неверен?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -21803,8 +21803,8 @@ Projekte programov QML izvede pregledovalnik QML in jih ni potrebno zgraditi.</t
|
||||
</message>
|
||||
<message>
|
||||
<location line="+58"/>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>Datoteka »%1« ne obstaja ali pa ni izvršljiva</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>Datoteka »qmake« ne obstaja ali pa ni izvršljiva</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
@@ -21813,8 +21813,8 @@ Projekte programov QML izvede pregledovalnik QML in jih ni potrebno zgraditi.</t
|
||||
</message>
|
||||
<message>
|
||||
<location line="+2"/>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Ni bilo moč ugotoviti poti do programov namestitve Qt. Morda je pot do %1 napačna?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Ni bilo moč ugotoviti poti do programov namestitve Qt. Morda je pot do qmake napačna?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location line="+3"/>
|
||||
|
@@ -22711,8 +22711,8 @@ For more details, see /etc/sysctl.d/10-ptrace.conf
|
||||
<translation>Шлях до qmake не задано</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 не існує або не є виконуваним модулем</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake не існує або не є виконуваним модулем</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ABI detection failed: Make sure to use a matching compiler when building.</source>
|
||||
@@ -22763,8 +22763,8 @@ For more details, see /etc/sysctl.d/10-ptrace.conf
|
||||
<translation>Версія Qt не встановлена як слід, будь ласка, запустіть make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>Не вдалось визначити шлях до виконуваних модулів встановлення Qt, можливо, шлях до %1 помилковий?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>Не вдалось визначити шлях до виконуваних модулів встановлення Qt, можливо, шлях до qmake помилковий?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -27948,8 +27948,8 @@ Did you start Qemu?</source>
|
||||
<translation>没有设置qmake路径</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1不存在或者不可执行</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake不存在或者不可执行</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -27976,8 +27976,8 @@ Did you start Qemu?</source>
|
||||
<translation>Qt没有被正确安装,请运行make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>无法确定Qt安装的二进制所在的路径,或许%1的路径设置出现了错误?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>无法确定Qt安装的二进制所在的路径,或许qmake的路径设置出现了错误?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -15636,8 +15636,8 @@ Requires <b>Qt 4.7.4</b> or newer.</source>
|
||||
<translation>沒有設定 qmake 路徑</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>%1 does not exist or is not executable</source>
|
||||
<translation>%1 不存在或無法執行</translation>
|
||||
<source>qmake does not exist or is not executable</source>
|
||||
<translation>qmake 不存在或無法執行</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Qt version has no name</source>
|
||||
@@ -15664,8 +15664,8 @@ Requires <b>Qt 4.7.4</b> or newer.</source>
|
||||
<translation>Qt 沒有被正確安裝,請執行 make install</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the %1 path is wrong?</source>
|
||||
<translation>無法決定 Qt 安裝版的路徑。也許是 %1 的路徑設定有錯誤?</translation>
|
||||
<source>Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?</source>
|
||||
<translation>無法決定 Qt 安裝版的路徑。也許是 qmake 的路徑設定有錯誤?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>The default mkspec symlink is broken.</source>
|
||||
|
@@ -41,61 +41,7 @@ bool BuildableHelperLibrary::isQtChooser(const FilePath &filePath)
|
||||
return filePath.symLinkTarget().endsWith("/qtchooser");
|
||||
}
|
||||
|
||||
static const QStringList &queryToolNames()
|
||||
{
|
||||
static const QStringList names = {"qmake", "qtpaths"};
|
||||
return names;
|
||||
}
|
||||
|
||||
static bool isQueryTool(FilePath path)
|
||||
{
|
||||
if (path.isEmpty())
|
||||
return false;
|
||||
if (BuildableHelperLibrary::isQtChooser(path))
|
||||
path = BuildableHelperLibrary::qtChooserToQueryToolPath(path.symLinkTarget());
|
||||
if (!path.exists())
|
||||
return false;
|
||||
QtcProcess proc;
|
||||
proc.setCommand({path, {"-query"}});
|
||||
proc.runBlocking();
|
||||
if (proc.result() != ProcessResult::FinishedWithSuccess)
|
||||
return false;
|
||||
const QString output = proc.stdOut();
|
||||
// Exemplary output of "[qmake|qtpaths] -query":
|
||||
// QT_SYSROOT:...
|
||||
// QT_INSTALL_PREFIX:...
|
||||
// [...]
|
||||
// QT_VERSION:6.4.0
|
||||
return output.contains("QT_VERSION:");
|
||||
}
|
||||
|
||||
static FilePath findQueryToolInDir(const FilePath &dir)
|
||||
{
|
||||
if (dir.isEmpty())
|
||||
return {};
|
||||
|
||||
for (const QString &queryTool : queryToolNames()) {
|
||||
FilePath queryToolPath = dir.pathAppended(queryTool).withExecutableSuffix();
|
||||
if (queryToolPath.exists()) {
|
||||
if (isQueryTool(queryToolPath))
|
||||
return queryToolPath;
|
||||
}
|
||||
|
||||
// Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order.
|
||||
const FilePaths candidates = dir.dirEntries(
|
||||
{BuildableHelperLibrary::possibleQtQueryTools(queryTool), QDir::Files},
|
||||
QDir::Name | QDir::Reversed);
|
||||
for (const FilePath &candidate : candidates) {
|
||||
if (candidate == queryToolPath)
|
||||
continue;
|
||||
if (isQueryTool(candidate))
|
||||
return candidate;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
FilePath BuildableHelperLibrary::qtChooserToQueryToolPath(const FilePath &qtChooser)
|
||||
FilePath BuildableHelperLibrary::qtChooserToQmakePath(const FilePath &qtChooser)
|
||||
{
|
||||
const QString toolDir = QLatin1String("QTTOOLDIR=\"");
|
||||
QtcProcess proc;
|
||||
@@ -105,10 +51,6 @@ FilePath BuildableHelperLibrary::qtChooserToQueryToolPath(const FilePath &qtChoo
|
||||
if (proc.result() != ProcessResult::FinishedWithSuccess)
|
||||
return {};
|
||||
const QString output = proc.stdOut();
|
||||
// Exemplary output of "qtchooser -print-env":
|
||||
// QT_SELECT="default"
|
||||
// QTTOOLDIR="/usr/lib/qt5/bin"
|
||||
// QTLIBDIR="/usr/lib/x86_64-linux-gnu"
|
||||
int pos = output.indexOf(toolDir);
|
||||
if (pos == -1)
|
||||
return {};
|
||||
@@ -117,13 +59,44 @@ FilePath BuildableHelperLibrary::qtChooserToQueryToolPath(const FilePath &qtChoo
|
||||
if (end == -1)
|
||||
return {};
|
||||
|
||||
FilePath queryToolPath = qtChooser;
|
||||
for (const QString &queryTool : queryToolNames()) {
|
||||
queryToolPath.setPath(output.mid(pos, end - pos) + "/" + queryTool);
|
||||
if (queryToolPath.exists())
|
||||
return queryToolPath;
|
||||
FilePath qmake = qtChooser;
|
||||
qmake.setPath(output.mid(pos, end - pos) + "/qmake");
|
||||
return qmake;
|
||||
}
|
||||
return queryToolPath;
|
||||
|
||||
static bool isQmake(FilePath path)
|
||||
{
|
||||
if (path.isEmpty())
|
||||
return false;
|
||||
if (BuildableHelperLibrary::isQtChooser(path))
|
||||
path = BuildableHelperLibrary::qtChooserToQmakePath(path.symLinkTarget());
|
||||
if (!path.exists())
|
||||
return false;
|
||||
return !BuildableHelperLibrary::qtVersionForQMake(path).isEmpty();
|
||||
}
|
||||
|
||||
static FilePath findQmakeInDir(const FilePath &dir)
|
||||
{
|
||||
if (dir.isEmpty())
|
||||
return {};
|
||||
|
||||
FilePath qmakePath = dir.pathAppended("qmake").withExecutableSuffix();
|
||||
if (qmakePath.exists()) {
|
||||
if (isQmake(qmakePath))
|
||||
return qmakePath;
|
||||
}
|
||||
|
||||
// Prefer qmake-qt5 to qmake-qt4 by sorting the filenames in reverse order.
|
||||
const FilePaths candidates = dir.dirEntries(
|
||||
{BuildableHelperLibrary::possibleQMakeCommands(), QDir::Files},
|
||||
QDir::Name | QDir::Reversed);
|
||||
for (const FilePath &candidate : candidates) {
|
||||
if (candidate == qmakePath)
|
||||
continue;
|
||||
if (isQmake(candidate))
|
||||
return candidate;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
FilePath BuildableHelperLibrary::findSystemQt(const Environment &env)
|
||||
@@ -134,55 +107,86 @@ FilePath BuildableHelperLibrary::findSystemQt(const Environment &env)
|
||||
|
||||
FilePaths BuildableHelperLibrary::findQtsInEnvironment(const Environment &env, int maxCount)
|
||||
{
|
||||
FilePaths queryToolList;
|
||||
FilePaths qmakeList;
|
||||
std::set<QString> canonicalEnvPaths;
|
||||
const FilePaths paths = env.path();
|
||||
for (const FilePath &path : paths) {
|
||||
if (!canonicalEnvPaths.insert(path.toFileInfo().canonicalFilePath()).second)
|
||||
continue;
|
||||
const FilePath queryTool = findQueryToolInDir(path);
|
||||
if (queryTool.isEmpty())
|
||||
const FilePath qmake = findQmakeInDir(path);
|
||||
if (qmake.isEmpty())
|
||||
continue;
|
||||
queryToolList << queryTool;
|
||||
if (maxCount != -1 && queryToolList.size() == maxCount)
|
||||
qmakeList << qmake;
|
||||
if (maxCount != -1 && qmakeList.size() == maxCount)
|
||||
break;
|
||||
}
|
||||
return queryToolList;
|
||||
return qmakeList;
|
||||
}
|
||||
|
||||
QString BuildableHelperLibrary::filterForQtQueryToolsFileDialog()
|
||||
QString BuildableHelperLibrary::qtVersionForQMake(const FilePath &qmakePath)
|
||||
{
|
||||
QStringList toolFilters;
|
||||
for (const QString &queryTool : queryToolNames()) {
|
||||
for (const QString &tool: BuildableHelperLibrary::possibleQtQueryTools(queryTool)) {
|
||||
QString toolFilter;
|
||||
if (qmakePath.isEmpty())
|
||||
return QString();
|
||||
|
||||
QtcProcess qmake;
|
||||
qmake.setTimeoutS(5);
|
||||
qmake.setCommand({qmakePath, {"--version"}});
|
||||
qmake.runBlocking();
|
||||
if (qmake.result() != ProcessResult::FinishedWithSuccess) {
|
||||
qWarning() << qmake.exitMessage();
|
||||
return QString();
|
||||
}
|
||||
|
||||
const QString output = qmake.allOutput();
|
||||
static const QRegularExpression regexp("(QMake version:?)[\\s]*([\\d.]*)",
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
const QRegularExpressionMatch match = regexp.match(output);
|
||||
const QString qmakeVersion = match.captured(2);
|
||||
if (qmakeVersion.startsWith(QLatin1String("2."))
|
||||
|| qmakeVersion.startsWith(QLatin1String("3."))) {
|
||||
static const QRegularExpression regexp2("Using Qt version[\\s]*([\\d\\.]*)",
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
const QRegularExpressionMatch match2 = regexp2.match(output);
|
||||
const QString version = match2.captured(1);
|
||||
return version;
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString BuildableHelperLibrary::filterForQmakeFileDialog()
|
||||
{
|
||||
QString filter = QLatin1String("qmake (");
|
||||
const QStringList commands = possibleQMakeCommands();
|
||||
for (int i = 0; i < commands.size(); ++i) {
|
||||
if (i)
|
||||
filter += QLatin1Char(' ');
|
||||
if (HostOsInfo::isMacHost())
|
||||
// work around QTBUG-7739 that prohibits filters that don't start with *
|
||||
toolFilter += QLatin1Char('*');
|
||||
toolFilter += tool;
|
||||
filter += QLatin1Char('*');
|
||||
filter += commands.at(i);
|
||||
if (HostOsInfo::isAnyUnixHost() && !HostOsInfo::isMacHost())
|
||||
// kde bug, we need at least one wildcard character
|
||||
// see QTCREATORBUG-7771
|
||||
toolFilter += QLatin1Char('*');
|
||||
toolFilters.append(toolFilter);
|
||||
filter += QLatin1Char('*');
|
||||
}
|
||||
}
|
||||
return queryToolNames().join(", ") + " (" + toolFilters.join(" ") + ")";
|
||||
filter += QLatin1Char(')');
|
||||
return filter;
|
||||
}
|
||||
|
||||
QStringList BuildableHelperLibrary::possibleQtQueryTools(const QString &tool)
|
||||
|
||||
QStringList BuildableHelperLibrary::possibleQMakeCommands()
|
||||
{
|
||||
// On Windows it is "<queryTool>.exe" or "<queryTool>.bat"
|
||||
// On Windows it is always "qmake.exe"
|
||||
// On Unix some distributions renamed qmake with a postfix to avoid clashes
|
||||
// On OS X, Qt 4 binary packages also has renamed qmake. There are also symbolic links that are
|
||||
// named <tool>, but the file dialog always checks against resolved links (native Cocoa issue)
|
||||
QStringList tools(HostOsInfo::withExecutableSuffix(tool + "*"));
|
||||
// named "qmake", but the file dialog always checks against resolved links (native Cocoa issue)
|
||||
QStringList commands(HostOsInfo::withExecutableSuffix("qmake*"));
|
||||
|
||||
// Qt 6 CMake built targets, such as Android, are dependent on the host installation
|
||||
// and use a script wrapper around the host queryTool executable
|
||||
// and use a script wrapper around the host qmake executable
|
||||
if (HostOsInfo::isWindowsHost())
|
||||
tools.append(tool + "*.bat");
|
||||
return tools;
|
||||
commands.append("qmake*.bat");
|
||||
return commands;
|
||||
}
|
||||
|
||||
} // namespace Utils
|
||||
|
@@ -45,11 +45,12 @@ public:
|
||||
static FilePath findSystemQt(const Environment &env);
|
||||
static FilePaths findQtsInEnvironment(const Environment &env, int maxCount = -1);
|
||||
static bool isQtChooser(const FilePath &filePath);
|
||||
static FilePath qtChooserToQueryToolPath(const FilePath &path);
|
||||
// returns something like qmake4, qmake, qmake-qt4, qtpaths
|
||||
// or whatever distributions have chosen (used by QtVersion)
|
||||
static QStringList possibleQtQueryTools(const QString &tool);
|
||||
static QString filterForQtQueryToolsFileDialog();
|
||||
static FilePath qtChooserToQmakePath(const FilePath &path);
|
||||
// return true if the qmake at qmakePath is a Qt (used by QtVersion)
|
||||
static QString qtVersionForQMake(const FilePath &qmakePath);
|
||||
// returns something like qmake4, qmake, qmake-qt4 or whatever distributions have chosen (used by QtVersion)
|
||||
static QStringList possibleQMakeCommands();
|
||||
static QString filterForQmakeFileDialog();
|
||||
};
|
||||
|
||||
} // Utils
|
||||
|
@@ -1196,7 +1196,7 @@ Tasks CMakeConfigurationKitAspect::validate(const Kit *k) const
|
||||
if (!version || !version->isValid()) {
|
||||
addWarning(tr("CMake configuration has a path to a qmake binary set, "
|
||||
"even though the kit has no valid Qt version."));
|
||||
} else if (qmakePath != version->queryToolFilePath() && isQt4) {
|
||||
} else if (qmakePath != version->qmakeFilePath() && isQt4) {
|
||||
addWarning(tr("CMake configuration has a path to a qmake binary set "
|
||||
"that does not match the qmake binary path "
|
||||
"configured in the Qt version."));
|
||||
|
@@ -214,7 +214,7 @@ QtVersions KitDetectorPrivate::autoDetectQtVersions() const
|
||||
QString error;
|
||||
|
||||
const auto handleQmake = [this, &qtVersions, &error](const FilePath &qmake) {
|
||||
if (QtVersion *qtVersion = QtVersionFactory::createQtVersionFromQueryToolPath(qmake,
|
||||
if (QtVersion *qtVersion = QtVersionFactory::createQtVersionFromQMakePath(qmake,
|
||||
false,
|
||||
m_sharedId,
|
||||
&error)) {
|
||||
@@ -227,7 +227,7 @@ QtVersions KitDetectorPrivate::autoDetectQtVersions() const
|
||||
qtVersions.append(qtVersion);
|
||||
QtVersionManager::addVersion(qtVersion);
|
||||
emit q->logOutput(
|
||||
tr("Found \"%1\"").arg(qtVersion->queryToolFilePath().toUserOutput()));
|
||||
tr("Found \"%1\"").arg(qtVersion->qmakeFilePath().toUserOutput()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -181,7 +181,7 @@ void QbsProfileManager::addProfileFromKit(const ProjectExplorer::Kit *k)
|
||||
data = provider->properties(k, data);
|
||||
}
|
||||
if (const QtSupport::QtVersion * const qt = QtSupport::QtKitAspect::qtVersion(k))
|
||||
data.insert("moduleProviders.Qt.qmakeFilePaths", qt->queryToolFilePath().toString());
|
||||
data.insert("moduleProviders.Qt.qmakeFilePaths", qt->qmakeFilePath().toString());
|
||||
|
||||
if (QbsSettings::qbsVersion() < QVersionNumber({1, 20})) {
|
||||
const QString keyPrefix = "profiles." + name + ".";
|
||||
|
@@ -745,9 +745,6 @@ Tasks QmakeProject::projectIssues(const Kit *k) const
|
||||
result.append(createProjectTask(Task::TaskType::Error, tr("Qt version is invalid.")));
|
||||
if (!ToolChainKitAspect::cxxToolChain(k))
|
||||
result.append(createProjectTask(Task::TaskType::Error, tr("No C++ compiler set in kit.")));
|
||||
if (!qtFromKit->qmakeFilePath().isExecutableFile())
|
||||
result.append(createProjectTask(Task::TaskType::Error,
|
||||
tr("Qmake was not found or is not executable.")));
|
||||
|
||||
// A project can be considered part of more than one Qt version, for instance if it is an
|
||||
// example shipped via the installer.
|
||||
|
@@ -103,8 +103,7 @@ QMakeStep::QMakeStep(BuildStepList *bsl, Id id)
|
||||
auto updateSummary = [this] {
|
||||
QtVersion *qtVersion = QtKitAspect::qtVersion(target()->kit());
|
||||
if (!qtVersion)
|
||||
return tr("<b>Query tool:</b> No Qt version set. "
|
||||
"Cannot run neither qmake nor qtpaths.");
|
||||
return tr("<b>qmake:</b> No Qt version set. Cannot run qmake.");
|
||||
const QString program = qtVersion->qmakeFilePath().fileName();
|
||||
return tr("<b>qmake:</b> %1 %2").arg(program, project()->projectFilePath().fileName());
|
||||
};
|
||||
@@ -165,7 +164,7 @@ QString QMakeStep::allArguments(const QtVersion *v, ArgumentFlags flags) const
|
||||
QString args = ProcessArgs::joinArgs(arguments);
|
||||
// User arguments
|
||||
ProcessArgs::addArgs(&args, userArguments());
|
||||
for (const QString &arg : qAsConst(m_extraArgs))
|
||||
for (QString arg : qAsConst(m_extraArgs))
|
||||
ProcessArgs::addArgs(&args, arg);
|
||||
return (flags & ArgumentFlag::Expand) ? bc->macroExpander()->expand(args) : args;
|
||||
}
|
||||
@@ -215,8 +214,7 @@ bool QMakeStep::init()
|
||||
else
|
||||
workingDirectory = qmakeBc->buildDirectory();
|
||||
|
||||
m_qmakeCommand =
|
||||
CommandLine{qtVersion->qmakeFilePath(), allArguments(qtVersion), CommandLine::Raw};
|
||||
m_qmakeCommand = CommandLine{qtVersion->qmakeFilePath(), allArguments(qtVersion), CommandLine::Raw};
|
||||
m_runMakeQmake = (qtVersion->qtVersion() >= QtVersionNumber(5, 0 ,0));
|
||||
|
||||
// The Makefile is used by qmake and make on the build device, from that
|
||||
|
@@ -610,7 +610,7 @@ QString PuppetCreator::qmakeCommand() const
|
||||
{
|
||||
QtSupport::QtVersion *currentQtVersion = QtSupport::QtKitAspect::qtVersion(m_target->kit());
|
||||
if (currentQtVersion)
|
||||
return currentQtVersion->queryToolFilePath().toString();
|
||||
return currentQtVersion->qmakeFilePath().toString();
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
@@ -81,7 +81,6 @@ const char QTVERSIONAUTODETECTED[] = "isAutodetected";
|
||||
const char QTVERSIONDETECTIONSOURCE[] = "autodetectionSource";
|
||||
const char QTVERSION_OVERRIDE_FEATURES[] = "overrideFeatures";
|
||||
const char QTVERSIONQMAKEPATH[] = "QMakePath";
|
||||
const char QTVERSIONQUERYTOOLPATH[] = "QueryToolPath";
|
||||
const char QTVERSIONSOURCEPATH[] = "SourcePath";
|
||||
|
||||
const char QTVERSION_ABIS[] = "Abis";
|
||||
@@ -188,7 +187,7 @@ public:
|
||||
FilePath findHostBinary(HostBinaries binary) const;
|
||||
void updateMkspec();
|
||||
QHash<ProKey, ProString> versionInfo();
|
||||
static bool queryQtPaths(const FilePath &queryTool,
|
||||
static bool queryQMakeVariables(const FilePath &binary,
|
||||
const Environment &env,
|
||||
QHash<ProKey, ProString> *versionInfo,
|
||||
QString *error = nullptr);
|
||||
@@ -198,9 +197,9 @@ public:
|
||||
const QByteArray &name,
|
||||
PropertyVariant variant = PropertyVariantGet);
|
||||
static FilePath mkspecDirectoryFromVersionInfo(const QHash<ProKey, ProString> &versionInfo,
|
||||
const FilePath &queryTool);
|
||||
const FilePath &qmakeCommand);
|
||||
static FilePath mkspecFromVersionInfo(const QHash<ProKey,ProString> &versionInfo,
|
||||
const FilePath &queryTool);
|
||||
const FilePath &qmakeCommand);
|
||||
static FilePath sourcePath(const QHash<ProKey,ProString> &versionInfo);
|
||||
void setId(int id); // used by the qtversionmanager for legacy restore
|
||||
// and by the qtoptionspage to replace Qt versions
|
||||
@@ -222,7 +221,7 @@ public:
|
||||
bool m_defaultConfigIsDebugAndRelease = true;
|
||||
bool m_frameworkBuild = false;
|
||||
bool m_versionInfoUpToDate = false;
|
||||
bool m_queryToolIsExecutable = true;
|
||||
bool m_qmakeIsExecutable = true;
|
||||
|
||||
QString m_detectionSource;
|
||||
QSet<Utils::Id> m_overrideFeatures;
|
||||
@@ -234,7 +233,6 @@ public:
|
||||
|
||||
QHash<ProKey, ProString> m_versionInfo;
|
||||
|
||||
FilePath m_queryTool;
|
||||
FilePath m_qmakeCommand;
|
||||
|
||||
FilePath m_rccPath;
|
||||
@@ -348,12 +346,12 @@ QtVersion::~QtVersion()
|
||||
QString QtVersion::defaultUnexpandedDisplayName() const
|
||||
{
|
||||
QString location;
|
||||
if (queryToolFilePath().isEmpty()) {
|
||||
if (qmakeFilePath().isEmpty()) {
|
||||
location = QCoreApplication::translate("QtVersion", "<unknown>");
|
||||
} else {
|
||||
// Deduce a description from '/foo/qt-folder/[qtbase]/bin/qmake' -> '/foo/qt-folder'.
|
||||
// '/usr' indicates System Qt 4.X on Linux.
|
||||
for (FilePath dir = queryToolFilePath().parentDir(); !dir.isEmpty(); dir = dir.parentDir()) {
|
||||
for (FilePath dir = qmakeFilePath().parentDir(); !dir.isEmpty(); dir = dir.parentDir()) {
|
||||
const QString dirName = dir.fileName();
|
||||
if (dirName == "usr") { // System-installed Qt.
|
||||
location = QCoreApplication::translate("QtVersion", "System");
|
||||
@@ -727,23 +725,20 @@ void QtVersion::fromMap(const QVariantMap &map)
|
||||
d->m_isAutodetected = map.value(QTVERSIONAUTODETECTED).toBool();
|
||||
d->m_detectionSource = map.value(QTVERSIONDETECTIONSOURCE).toString();
|
||||
d->m_overrideFeatures = Utils::Id::fromStringList(map.value(QTVERSION_OVERRIDE_FEATURES).toStringList());
|
||||
d->m_queryTool = FilePath::fromVariant(map.value(QTVERSIONQUERYTOOLPATH,
|
||||
map.value(QTVERSIONQMAKEPATH)));
|
||||
if (!d->m_queryTool.baseName().contains("qtpaths"))
|
||||
d->m_qmakeCommand = d->m_queryTool;
|
||||
d->m_qmakeCommand = FilePath::fromVariant(map.value(QTVERSIONQMAKEPATH));
|
||||
|
||||
FilePath queryTool = d->m_queryTool;
|
||||
FilePath qmake = d->m_qmakeCommand;
|
||||
// FIXME: Check this is still needed or whether ProcessArgs::splitArg handles it.
|
||||
QString string = d->m_queryTool.path();
|
||||
QString string = d->m_qmakeCommand.path();
|
||||
if (string.startsWith('~'))
|
||||
string.remove(0, 1).prepend(QDir::homePath());
|
||||
queryTool.setPath(string);
|
||||
if (!d->m_queryTool.needsDevice()) {
|
||||
if (BuildableHelperLibrary::isQtChooser(queryTool)) {
|
||||
qmake.setPath(string);
|
||||
if (!d->m_qmakeCommand.needsDevice()) {
|
||||
if (BuildableHelperLibrary::isQtChooser(qmake)) {
|
||||
// we don't want to treat qtchooser as a normal qmake
|
||||
// see e.g. QTCREATORBUG-9841, also this lead to users changing what
|
||||
// qtchooser forwards too behind our backs, which will inadvertly lead to bugs
|
||||
d->m_queryTool = BuildableHelperLibrary::qtChooserToQueryToolPath(queryTool);
|
||||
d->m_qmakeCommand = BuildableHelperLibrary::qtChooserToQmakePath(qmake);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -774,7 +769,6 @@ QVariantMap QtVersion::toMap() const
|
||||
result.insert(QTVERSION_OVERRIDE_FEATURES, Utils::Id::toStringList(d->m_overrideFeatures));
|
||||
|
||||
result.insert(QTVERSIONQMAKEPATH, qmakeFilePath().toVariant());
|
||||
result.insert(QTVERSIONQUERYTOOLPATH, queryToolFilePath().toVariant());
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -785,8 +779,8 @@ bool QtVersion::isValid() const
|
||||
d->updateVersionInfo();
|
||||
d->updateMkspec();
|
||||
|
||||
return !queryToolFilePath().isEmpty() && d->m_data.installed && !binPath().isEmpty()
|
||||
&& !d->m_mkspecFullPath.isEmpty() && d->m_queryToolIsExecutable;
|
||||
return !qmakeFilePath().isEmpty() && d->m_data.installed && !binPath().isEmpty()
|
||||
&& !d->m_mkspecFullPath.isEmpty() && d->m_qmakeIsExecutable;
|
||||
}
|
||||
|
||||
QtVersion::Predicate QtVersion::isValidPredicate(const QtVersion::Predicate &predicate)
|
||||
@@ -800,18 +794,15 @@ QString QtVersion::invalidReason() const
|
||||
{
|
||||
if (displayName().isEmpty())
|
||||
return QCoreApplication::translate("QtVersion", "Qt version has no name");
|
||||
if (queryToolFilePath().isEmpty())
|
||||
return QCoreApplication::translate("QtVersion", "No Qt query tool path set");
|
||||
if (!d->m_queryToolIsExecutable)
|
||||
return QCoreApplication::translate("QtVersion", "%1 does not exist or is not executable")
|
||||
.arg(queryToolFilePath().baseName());
|
||||
if (qmakeFilePath().isEmpty())
|
||||
return QCoreApplication::translate("QtVersion", "No qmake path set");
|
||||
if (!d->m_qmakeIsExecutable)
|
||||
return QCoreApplication::translate("QtVersion", "qmake does not exist or is not executable");
|
||||
if (!d->m_data.installed)
|
||||
return QCoreApplication::translate("QtVersion", "Qt version is not properly installed, please run make install");
|
||||
if (binPath().isEmpty())
|
||||
return QCoreApplication::translate("QtVersion",
|
||||
"Could not determine the path to the binaries of the "
|
||||
"Qt installation, maybe the %1 path is wrong?")
|
||||
.arg(queryToolFilePath().baseName());
|
||||
"Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?");
|
||||
if (d->m_mkspecUpToDate && d->m_mkspecFullPath.isEmpty())
|
||||
return QCoreApplication::translate("QtVersion", "The default mkspec symlink is broken.");
|
||||
return QString();
|
||||
@@ -829,20 +820,8 @@ QStringList QtVersion::warningReason() const
|
||||
return ret;
|
||||
}
|
||||
|
||||
FilePath QtVersion::queryToolFilePath() const
|
||||
{
|
||||
return d->m_queryTool;
|
||||
}
|
||||
|
||||
FilePath QtVersion::qmakeFilePath() const
|
||||
{
|
||||
if (d->m_qmakeCommand.isEmpty() && d->m_queryTool.baseName().contains("qtpaths")) {
|
||||
// TODO: might need a less lazy implementation
|
||||
const FilePath qmake =
|
||||
FilePath::fromString(d->m_queryTool.toString().replace("qtpaths", "qmake"));
|
||||
if (qmake.exists())
|
||||
d->m_qmakeCommand = qmake;
|
||||
}
|
||||
return d->m_qmakeCommand;
|
||||
}
|
||||
|
||||
@@ -876,7 +855,7 @@ bool QtVersion::hasAbi(ProjectExplorer::Abi::OS os, ProjectExplorer::Abi::OSFlav
|
||||
|
||||
bool QtVersion::equals(QtVersion *other)
|
||||
{
|
||||
if (d->m_queryTool != other->d->m_queryTool)
|
||||
if (d->m_qmakeCommand != other->d->m_qmakeCommand)
|
||||
return false;
|
||||
if (type() != other->type())
|
||||
return false;
|
||||
@@ -954,15 +933,13 @@ QString QtVersion::toHtml(bool verbose) const
|
||||
str << "<td>" << abis.at(i).toString() << "</td></tr>";
|
||||
}
|
||||
}
|
||||
const OsType osType = d->m_queryTool.osType();
|
||||
const OsType osType = d->m_qmakeCommand.osType();
|
||||
str << "<tr><td><b>" << QCoreApplication::translate("QtVersion", "Source:")
|
||||
<< "</b></td><td>" << sourcePath().toUserOutput() << "</td></tr>";
|
||||
str << "<tr><td><b>" << QCoreApplication::translate("QtVersion", "mkspec:")
|
||||
<< "</b></td><td>" << QDir::toNativeSeparators(mkspec()) << "</td></tr>";
|
||||
str << "<tr><td><b>" << QCoreApplication::translate("QtVersion", "qmake:")
|
||||
<< "</b></td><td>" << qmakeFilePath().toUserOutput() << "</td></tr>";
|
||||
str << "<tr><td><b>" << QCoreApplication::translate("QtVersion", "Query tool:")
|
||||
<< "</b></td><td>" << d->m_queryTool.toUserOutput() << "</td></tr>";
|
||||
<< "</b></td><td>" << d->m_qmakeCommand.toUserOutput() << "</td></tr>";
|
||||
ensureMkSpecParsed();
|
||||
if (!mkspecPath().isEmpty()) {
|
||||
if (d->m_defaultConfigIsDebug || d->m_defaultConfigIsDebugAndRelease) {
|
||||
@@ -1187,13 +1164,13 @@ void QtVersionPrivate::updateMkspec()
|
||||
return;
|
||||
|
||||
m_mkspecUpToDate = true;
|
||||
m_mkspecFullPath = mkspecFromVersionInfo(versionInfo(), m_queryTool);
|
||||
m_mkspecFullPath = mkspecFromVersionInfo(versionInfo(), m_qmakeCommand);
|
||||
|
||||
m_mkspec = m_mkspecFullPath;
|
||||
if (m_mkspecFullPath.isEmpty())
|
||||
return;
|
||||
|
||||
FilePath baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo(), m_queryTool);
|
||||
FilePath baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo(), m_qmakeCommand);
|
||||
|
||||
if (m_mkspec.isChildOf(baseMkspecDir)) {
|
||||
m_mkspec = m_mkspec.relativeChildPath(baseMkspecDir);
|
||||
@@ -1220,7 +1197,7 @@ void QtVersion::ensureMkSpecParsed() const
|
||||
QMakeVfs vfs;
|
||||
QMakeGlobals option;
|
||||
applyProperties(&option);
|
||||
Environment env = d->m_queryTool.deviceEnvironment();
|
||||
Environment env = d->m_qmakeCommand.deviceEnvironment();
|
||||
setupQmakeRunEnvironment(env);
|
||||
option.environment = env.toProcessEnvironment();
|
||||
ProMessageHandler msgHandler(true);
|
||||
@@ -1333,7 +1310,7 @@ QtVersionNumber QtVersion::qtVersion() const
|
||||
|
||||
void QtVersionPrivate::updateVersionInfo()
|
||||
{
|
||||
if (m_versionInfoUpToDate || !m_queryToolIsExecutable || m_isUpdating)
|
||||
if (m_versionInfoUpToDate || !m_qmakeIsExecutable || m_isUpdating)
|
||||
return;
|
||||
|
||||
m_isUpdating = true;
|
||||
@@ -1344,16 +1321,16 @@ void QtVersionPrivate::updateVersionInfo()
|
||||
m_data.hasExamples = false;
|
||||
m_data.hasDocumentation = false;
|
||||
|
||||
if (!queryQtPaths(m_queryTool, q->qmakeRunEnvironment(), &m_versionInfo)) {
|
||||
m_queryToolIsExecutable = false;
|
||||
if (!queryQMakeVariables(m_qmakeCommand, q->qmakeRunEnvironment(), &m_versionInfo)) {
|
||||
m_qmakeIsExecutable = false;
|
||||
qWarning("Cannot update Qt version information: %s cannot be run.",
|
||||
qPrintable(m_queryTool.toString()));
|
||||
qPrintable(m_qmakeCommand.toString()));
|
||||
return;
|
||||
}
|
||||
m_queryToolIsExecutable = true;
|
||||
m_qmakeIsExecutable = true;
|
||||
|
||||
auto fileProperty = [this](const QByteArray &name) {
|
||||
return FilePath::fromUserInput(qmakeProperty(name)).onDevice(m_queryTool);
|
||||
return FilePath::fromUserInput(qmakeProperty(name)).onDevice(m_qmakeCommand);
|
||||
};
|
||||
|
||||
m_data.prefix = fileProperty("QT_INSTALL_PREFIX");
|
||||
@@ -1751,7 +1728,7 @@ void QtVersion::addToEnvironment(const Kit *k, Environment &env) const
|
||||
|
||||
Environment QtVersion::qmakeRunEnvironment() const
|
||||
{
|
||||
Environment env = d->m_queryTool.deviceEnvironment();
|
||||
Environment env = d->m_qmakeCommand.deviceEnvironment();
|
||||
setupQmakeRunEnvironment(env);
|
||||
return env;
|
||||
}
|
||||
@@ -1779,7 +1756,7 @@ Tasks QtVersion::reportIssuesImpl(const QString &proFile, const QString &buildDi
|
||||
results.append(BuildSystemTask(Task::Error, msg));
|
||||
}
|
||||
|
||||
FilePath qmake = queryToolFilePath();
|
||||
FilePath qmake = qmakeFilePath();
|
||||
if (!qmake.isExecutableFile()) {
|
||||
//: %1: Path to qmake executable
|
||||
const QString msg = QCoreApplication::translate("QmakeProjectManager::QtVersion",
|
||||
@@ -1839,21 +1816,20 @@ static QByteArray runQmakeQuery(const FilePath &binary, const Environment &env,
|
||||
return process.readAllStandardOutput();
|
||||
}
|
||||
|
||||
bool QtVersionPrivate::queryQtPaths(const FilePath &queryTool, const Environment &env,
|
||||
bool QtVersionPrivate::queryQMakeVariables(const FilePath &binary, const Environment &env,
|
||||
QHash<ProKey, ProString> *versionInfo, QString *error)
|
||||
{
|
||||
QString tmp;
|
||||
if (!error)
|
||||
error = &tmp;
|
||||
|
||||
if (!queryTool.isExecutableFile()) {
|
||||
*error = QCoreApplication::translate("QtVersion", "\"%1\" is not an executable.")
|
||||
.arg(queryTool.toUserOutput());
|
||||
if (!binary.isExecutableFile()) {
|
||||
*error = QCoreApplication::translate("QtVersion", "qmake \"%1\" is not an executable.").arg(binary.toUserOutput());
|
||||
return false;
|
||||
}
|
||||
|
||||
QByteArray output;
|
||||
output = runQmakeQuery(queryTool, env, error);
|
||||
output = runQmakeQuery(binary, env, error);
|
||||
|
||||
if (!output.contains("QMAKE_VERSION:")) {
|
||||
// Some setups pass error messages via stdout, fooling the logic below.
|
||||
@@ -1871,14 +1847,14 @@ bool QtVersionPrivate::queryQtPaths(const FilePath &queryTool, const Environment
|
||||
// Try running qmake with all kinds of tool chains set up in the environment.
|
||||
// This is required to make non-static qmakes work on windows where every tool chain
|
||||
// tries to be incompatible with any other.
|
||||
const Abis abiList = Abi::abisOfBinary(queryTool);
|
||||
const Abis abiList = Abi::abisOfBinary(binary);
|
||||
const Toolchains tcList = ToolChainManager::toolchains([&abiList](const ToolChain *t) {
|
||||
return abiList.contains(t->targetAbi());
|
||||
});
|
||||
for (ToolChain *tc : tcList) {
|
||||
Environment realEnv = env;
|
||||
tc->addToEnvironment(realEnv);
|
||||
output = runQmakeQuery(queryTool, realEnv, error);
|
||||
output = runQmakeQuery(binary, realEnv, error);
|
||||
if (error->isEmpty())
|
||||
break;
|
||||
}
|
||||
@@ -1900,18 +1876,18 @@ QString QtVersionPrivate::qmakeProperty(const QByteArray &name,
|
||||
}
|
||||
|
||||
FilePath QtVersionPrivate::mkspecDirectoryFromVersionInfo(const QHash<ProKey, ProString> &versionInfo,
|
||||
const FilePath &queryTool)
|
||||
const FilePath &qmakeCommand)
|
||||
{
|
||||
QString dataDir = qmakeProperty(versionInfo, "QT_HOST_DATA", PropertyVariantSrc);
|
||||
if (dataDir.isEmpty())
|
||||
return FilePath();
|
||||
return FilePath::fromUserInput(dataDir + "/mkspecs").onDevice(queryTool);
|
||||
return FilePath::fromUserInput(dataDir + "/mkspecs").onDevice(qmakeCommand);
|
||||
}
|
||||
|
||||
FilePath QtVersionPrivate::mkspecFromVersionInfo(const QHash<ProKey, ProString> &versionInfo,
|
||||
const FilePath &queryTool)
|
||||
const FilePath &qmakeCommand)
|
||||
{
|
||||
FilePath baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo, queryTool);
|
||||
FilePath baseMkspecDir = mkspecDirectoryFromVersionInfo(versionInfo, qmakeCommand);
|
||||
if (baseMkspecDir.isEmpty())
|
||||
return FilePath();
|
||||
|
||||
@@ -2343,16 +2319,14 @@ void QtVersion::resetCache() const
|
||||
|
||||
static QList<QtVersionFactory *> g_qtVersionFactories;
|
||||
|
||||
QtVersion *QtVersionFactory::createQtVersionFromQueryToolPath(const FilePath &queryTool,
|
||||
bool isAutoDetected,
|
||||
const QString &detectionSource,
|
||||
QString *error)
|
||||
QtVersion *QtVersionFactory::createQtVersionFromQMakePath
|
||||
(const FilePath &qmakePath, bool isAutoDetected, const QString &detectionSource, QString *error)
|
||||
{
|
||||
QHash<ProKey, ProString> versionInfo;
|
||||
const Environment env = queryTool.deviceEnvironment();
|
||||
if (!QtVersionPrivate::queryQtPaths(queryTool, env, &versionInfo, error))
|
||||
const Environment env = qmakePath.deviceEnvironment();
|
||||
if (!QtVersionPrivate::queryQMakeVariables(qmakePath, env, &versionInfo, error))
|
||||
return nullptr;
|
||||
FilePath mkspec = QtVersionPrivate::mkspecFromVersionInfo(versionInfo, queryTool);
|
||||
FilePath mkspec = QtVersionPrivate::mkspecFromVersionInfo(versionInfo, qmakePath);
|
||||
|
||||
QMakeVfs vfs;
|
||||
QMakeGlobals globals;
|
||||
@@ -2368,7 +2342,7 @@ QtVersion *QtVersionFactory::createQtVersionFromQueryToolPath(const FilePath &qu
|
||||
return l->m_priority > r->m_priority;
|
||||
});
|
||||
|
||||
if (!queryTool.isExecutableFile())
|
||||
if (!qmakePath.isExecutableFile())
|
||||
return nullptr;
|
||||
|
||||
QtVersionFactory::SetupData setup;
|
||||
@@ -2381,8 +2355,8 @@ QtVersion *QtVersionFactory::createQtVersionFromQueryToolPath(const FilePath &qu
|
||||
QtVersion *ver = factory->create();
|
||||
QTC_ASSERT(ver, continue);
|
||||
ver->d->m_id = QtVersionManager::getUniqueId();
|
||||
QTC_CHECK(ver->d->m_queryTool.isEmpty()); // Should only be used once.
|
||||
ver->d->m_queryTool = queryTool;
|
||||
QTC_CHECK(ver->d->m_qmakeCommand.isEmpty()); // Should only be used once.
|
||||
ver->d->m_qmakeCommand = qmakePath;
|
||||
ver->d->m_detectionSource = detectionSource;
|
||||
ver->d->m_isAutodetected = isAutoDetected;
|
||||
ver->updateDefaultDisplayName();
|
||||
@@ -2393,7 +2367,7 @@ QtVersion *QtVersionFactory::createQtVersionFromQueryToolPath(const FilePath &qu
|
||||
ProFileCacheManager::instance()->decRefCount();
|
||||
if (error) {
|
||||
*error = QCoreApplication::translate("QtSupport::QtVersionFactory",
|
||||
"No factory found for query tool \"%1\"").arg(queryTool.toUserOutput());
|
||||
"No factory found for qmake: \"%1\"").arg(qmakePath.toUserOutput());
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@@ -150,8 +150,6 @@ public:
|
||||
bool hasDocs() const;
|
||||
bool hasDemos() const;
|
||||
|
||||
Utils::FilePath queryToolFilePath() const;
|
||||
|
||||
// former local functions
|
||||
Utils::FilePath qmakeFilePath() const;
|
||||
|
||||
|
@@ -324,11 +324,6 @@ void QtKitAspect::addToMacroExpander(Kit *kit, MacroExpander *expander) const
|
||||
QtVersion *version = qtVersion(kit);
|
||||
return version ? version->qmakeFilePath().path() : QString();
|
||||
});
|
||||
expander->registerVariable("Qt:queryToolExecutable", tr("Path to the query tool executable"),
|
||||
[kit]() -> QString {
|
||||
QtVersion *version = qtVersion(kit);
|
||||
return version ? version->queryToolFilePath().path() : QString();
|
||||
});
|
||||
}
|
||||
|
||||
Id QtKitAspect::id()
|
||||
|
@@ -51,7 +51,6 @@
|
||||
#include <utils/hostosinfo.h>
|
||||
#include <utils/pathchooser.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/qtcprocess.h>
|
||||
#include <utils/runextensions.h>
|
||||
#include <utils/treemodel.h>
|
||||
#include <utils/utilsicons.h>
|
||||
@@ -112,7 +111,7 @@ public:
|
||||
if (column == 0)
|
||||
return m_version->displayName();
|
||||
if (column == 1)
|
||||
return m_version->queryToolFilePath().toUserOutput();
|
||||
return m_version->qmakeFilePath().toUserOutput();
|
||||
}
|
||||
|
||||
if (role == Qt::FontRole && m_changed) {
|
||||
@@ -129,8 +128,7 @@ public:
|
||||
"<dd>%2</dd>";
|
||||
return QString("<dl style=\"white-space:pre\">"
|
||||
+ row.arg(tr("Qt Version"), m_version->qtVersionString())
|
||||
+ row.arg(tr("Location of the query tool"),
|
||||
m_version->queryToolFilePath().toUserOutput())
|
||||
+ row.arg(tr("Location of qmake"), m_version->qmakeFilePath().toUserOutput())
|
||||
+ "</dl>");
|
||||
}
|
||||
|
||||
@@ -602,43 +600,28 @@ QtOptionsPageWidget::~QtOptionsPageWidget()
|
||||
delete m_configurationWidget;
|
||||
}
|
||||
|
||||
static bool isIncompatibleQtPathsTool(const FilePath &tool)
|
||||
{
|
||||
if (!tool.baseName().startsWith("qtpaths"))
|
||||
return false;
|
||||
QtcProcess process;
|
||||
process.setTimeoutS(1);
|
||||
process.setCommand({tool, {"-query"}});
|
||||
process.runBlocking();
|
||||
return process.result() != ProcessResult::FinishedWithSuccess;
|
||||
}
|
||||
|
||||
void QtOptionsPageWidget::addQtDir()
|
||||
{
|
||||
FilePath qtQueryTool =
|
||||
FileUtils::getOpenFilePath(this,
|
||||
tr("Select a qmake or qtpaths Executable"),
|
||||
FilePath qtVersion = FileUtils::getOpenFilePath(this,
|
||||
tr("Select a qmake Executable"),
|
||||
{},
|
||||
BuildableHelperLibrary::filterForQtQueryToolsFileDialog(),
|
||||
BuildableHelperLibrary::filterForQmakeFileDialog(),
|
||||
0,
|
||||
QFileDialog::DontResolveSymlinks);
|
||||
if (qtQueryTool.isEmpty())
|
||||
if (qtVersion.isEmpty())
|
||||
return;
|
||||
|
||||
if (isIncompatibleQtPathsTool(qtQueryTool))
|
||||
qtQueryTool = qtQueryTool.parentDir() / HostOsInfo::withExecutableSuffix("qmake");
|
||||
|
||||
// should add all qt versions here ?
|
||||
if (BuildableHelperLibrary::isQtChooser(qtQueryTool))
|
||||
qtQueryTool = BuildableHelperLibrary::qtChooserToQueryToolPath(qtQueryTool.symLinkTarget());
|
||||
if (BuildableHelperLibrary::isQtChooser(qtVersion))
|
||||
qtVersion = BuildableHelperLibrary::qtChooserToQmakePath(qtVersion.symLinkTarget());
|
||||
|
||||
auto checkAlreadyExists = [qtQueryTool](TreeItem *parent) {
|
||||
auto checkAlreadyExists = [qtVersion](TreeItem *parent) {
|
||||
for (int i = 0; i < parent->childCount(); ++i) {
|
||||
auto item = static_cast<QtVersionItem *>(parent->childAt(i));
|
||||
// Compare parent dirs, since it could be either qmake or qtpaths
|
||||
if (item->version()->queryToolFilePath().parentDir() == qtQueryTool.parentDir())
|
||||
if (item->version()->qmakeFilePath() == qtVersion) {
|
||||
return std::make_pair(true, item->version()->displayName());
|
||||
}
|
||||
}
|
||||
return std::make_pair(false, QString());
|
||||
};
|
||||
|
||||
@@ -657,8 +640,7 @@ void QtOptionsPageWidget::addQtDir()
|
||||
}
|
||||
|
||||
QString error;
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQueryToolPath(qtQueryTool, false,
|
||||
QString(), &error);
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion, false, QString(), &error);
|
||||
if (version) {
|
||||
auto item = new QtVersionItem(version);
|
||||
item->setIcon(version->isValid()? m_validVersionIcon : m_invalidVersionIcon);
|
||||
@@ -668,9 +650,8 @@ void QtOptionsPageWidget::addQtDir()
|
||||
m_versionUi.nameEdit->setFocus();
|
||||
m_versionUi.nameEdit->selectAll();
|
||||
} else {
|
||||
QMessageBox::warning(this, tr("Not Executable"),
|
||||
tr("The executable %1 could not be added: %2").arg(
|
||||
qtQueryTool.toUserOutput()).arg(error));
|
||||
QMessageBox::warning(this, tr("Qmake Not Executable"),
|
||||
tr("The qmake executable %1 could not be added: %2").arg(qtVersion.toUserOutput()).arg(error));
|
||||
return;
|
||||
}
|
||||
updateCleanUpButton();
|
||||
@@ -690,16 +671,16 @@ void QtOptionsPageWidget::removeQtDir()
|
||||
void QtOptionsPageWidget::editPath()
|
||||
{
|
||||
QtVersion *current = currentVersion();
|
||||
const FilePath queryTool =
|
||||
FilePath qtVersion =
|
||||
FileUtils::getOpenFilePath(this,
|
||||
tr("Select a qmake or qtpaths Executable"),
|
||||
current->queryToolFilePath().absolutePath(),
|
||||
BuildableHelperLibrary::filterForQtQueryToolsFileDialog(),
|
||||
tr("Select a qmake Executable"),
|
||||
current->qmakeFilePath().absolutePath(),
|
||||
BuildableHelperLibrary::filterForQmakeFileDialog(),
|
||||
nullptr,
|
||||
QFileDialog::DontResolveSymlinks);
|
||||
if (queryTool.isEmpty())
|
||||
if (qtVersion.isEmpty())
|
||||
return;
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQueryToolPath(queryTool);
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion);
|
||||
if (!version)
|
||||
return;
|
||||
// Same type? then replace!
|
||||
@@ -787,7 +768,7 @@ void QtOptionsPageWidget::updateWidgets()
|
||||
QtVersion *version = currentVersion();
|
||||
if (version) {
|
||||
m_versionUi.nameEdit->setText(version->unexpandedDisplayName());
|
||||
m_versionUi.queryToolPath->setText(version->queryToolFilePath().toUserOutput());
|
||||
m_versionUi.qmakePath->setText(version->qmakeFilePath().toUserOutput());
|
||||
m_configurationWidget = version->createConfigurationWidget();
|
||||
if (m_configurationWidget) {
|
||||
m_versionUi.formLayout->addRow(m_configurationWidget);
|
||||
@@ -797,7 +778,7 @@ void QtOptionsPageWidget::updateWidgets()
|
||||
}
|
||||
} else {
|
||||
m_versionUi.nameEdit->clear();
|
||||
m_versionUi.queryToolPath->clear();
|
||||
m_versionUi.qmakePath->clear();
|
||||
}
|
||||
|
||||
const bool enabled = version != nullptr;
|
||||
|
@@ -57,7 +57,7 @@ QtProjectImporter::QtVersionData
|
||||
QtProjectImporter::findOrCreateQtVersion(const Utils::FilePath &qmakePath) const
|
||||
{
|
||||
QtVersionData result;
|
||||
result.qt = QtVersionManager::version(Utils::equal(&QtVersion::queryToolFilePath, qmakePath));
|
||||
result.qt = QtVersionManager::version(Utils::equal(&QtVersion::qmakeFilePath, qmakePath));
|
||||
if (result.qt) {
|
||||
// Check if version is a temporary qt
|
||||
const int qtId = result.qt->uniqueId();
|
||||
@@ -67,7 +67,7 @@ QtProjectImporter::findOrCreateQtVersion(const Utils::FilePath &qmakePath) const
|
||||
|
||||
// Create a new version if not found:
|
||||
// Do not use the canonical path here...
|
||||
result.qt = QtVersionFactory::createQtVersionFromQueryToolPath(qmakePath);
|
||||
result.qt = QtVersionFactory::createQtVersionFromQMakePath(qmakePath);
|
||||
result.isTemporary = true;
|
||||
if (result.qt) {
|
||||
UpdateGuard guard(*this);
|
||||
@@ -281,7 +281,7 @@ static QStringList additionalFilesToCopy(const QtVersion *qt)
|
||||
} else if (HostOsInfo::isWindowsHost()) {
|
||||
const QString release = QString("bin/Qt%1Core.dll").arg(major);
|
||||
const QString debug = QString("bin/Qt%1Cored.dll").arg(major);
|
||||
const FilePath base = qt->queryToolFilePath().parentDir().parentDir();
|
||||
const FilePath base = qt->qmakeFilePath().parentDir().parentDir();
|
||||
if (base.pathAppended(release).exists())
|
||||
return {release};
|
||||
if (base.pathAppended(debug).exists())
|
||||
@@ -289,7 +289,7 @@ static QStringList additionalFilesToCopy(const QtVersion *qt)
|
||||
return {release};
|
||||
} else if (HostOsInfo::isLinuxHost()) {
|
||||
const QString core = QString("lib/libQt%1Core.so.%1").arg(major);
|
||||
const QDir base(qt->queryToolFilePath().parentDir().parentDir().pathAppended("lib").toString());
|
||||
const QDir base(qt->qmakeFilePath().parentDir().parentDir().pathAppended("lib").toString());
|
||||
const QStringList icuLibs = Utils::transform(base.entryList({"libicu*.so.*"}), [](const QString &lib) { return QString("lib/" + lib); });
|
||||
return QStringList(core) + icuLibs;
|
||||
}
|
||||
@@ -300,7 +300,7 @@ static QStringList additionalFilesToCopy(const QtVersion *qt)
|
||||
static Utils::FilePath setupQmake(const QtVersion *qt, const QString &path)
|
||||
{
|
||||
// This is a hack and only works with local, "standard" installations of Qt
|
||||
const FilePath qmake = qt->queryToolFilePath().canonicalPath();
|
||||
const FilePath qmake = qt->qmakeFilePath().canonicalPath();
|
||||
const QString qmakeFile = "bin/" + qmake.fileName();
|
||||
const FilePath source = qmake.parentDir().parentDir();
|
||||
const FilePath target = FilePath::fromString(path);
|
||||
|
@@ -51,7 +51,7 @@ public:
|
||||
/// the desktop factory claims to handle all paths
|
||||
int priority() const { return m_priority; }
|
||||
|
||||
static QtVersion *createQtVersionFromQueryToolPath(const Utils::FilePath &qmakePath,
|
||||
static QtVersion *createQtVersionFromQMakePath(const Utils::FilePath &qmakePath,
|
||||
bool isAutoDetected = false,
|
||||
const QString &detectionSource = {},
|
||||
QString *error = nullptr);
|
||||
|
@@ -39,14 +39,14 @@
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="pathLabel">
|
||||
<property name="text">
|
||||
<string>Query tool path:</string>
|
||||
<string>qmake path:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="queryToolPath">
|
||||
<widget class="QLabel" name="qmakePath">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
|
@@ -265,8 +265,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
|
||||
if (log().isDebugEnabled()) {
|
||||
qCDebug(log) << "======= Existing Qt versions =======";
|
||||
for (QtVersion *version : qAsConst(m_versions)) {
|
||||
qCDebug(log) << version->queryToolFilePath().toUserOutput()
|
||||
<< "id:" <<version->uniqueId();
|
||||
qCDebug(log) << version->qmakeFilePath().toUserOutput() << "id:"<<version->uniqueId();
|
||||
qCDebug(log) << " autodetection source:" << version->detectionSource();
|
||||
qCDebug(log) << "";
|
||||
}
|
||||
@@ -342,8 +341,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
|
||||
if (log().isDebugEnabled()) {
|
||||
qCDebug(log) << "======= Before removing outdated sdk versions =======";
|
||||
for (QtVersion *version : qAsConst(m_versions)) {
|
||||
qCDebug(log) << version->queryToolFilePath().toUserOutput()
|
||||
<< "id:" << version->uniqueId();
|
||||
qCDebug(log) << version->qmakeFilePath().toUserOutput() << "id:" << version->uniqueId();
|
||||
qCDebug(log) << " autodetection source:" << version->detectionSource();
|
||||
qCDebug(log) << "";
|
||||
}
|
||||
@@ -362,8 +360,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
|
||||
if (log().isDebugEnabled()) {
|
||||
qCDebug(log)<< "======= End result =======";
|
||||
for (QtVersion *version : qAsConst(m_versions)) {
|
||||
qCDebug(log) << version->queryToolFilePath().toUserOutput()
|
||||
<< "id:" << version->uniqueId();
|
||||
qCDebug(log) << version->qmakeFilePath().toUserOutput() << "id:" << version->uniqueId();
|
||||
qCDebug(log) << " autodetection source:" << version->detectionSource();
|
||||
qCDebug(log) << "";
|
||||
}
|
||||
@@ -404,20 +401,14 @@ static QList<QByteArray> runQtChooser(const QString &qtchooser, const QStringLis
|
||||
}
|
||||
|
||||
// Asks qtchooser for the qmake path of a given version
|
||||
// TODO: Extend to qtpaths if qtchooser is also used for Qt 6
|
||||
static QString qmakePath(const QString &qtchooser, const QString &version)
|
||||
{
|
||||
const QList<QByteArray> outputs = runQtChooser(qtchooser,
|
||||
{QStringLiteral("-qt=%1").arg(version),
|
||||
QStringLiteral("-print-env")});
|
||||
// Exemplary output of "qtchooser -qt=qt5-x86_64-linux-gnu -print-env":
|
||||
// QT_SELECT="qt5-x86_64-linux-gnu"
|
||||
// QTTOOLDIR="/usr/lib/qt5/bin"
|
||||
// QTLIBDIR="/usr/lib/x86_64-linux-gnu"
|
||||
const QByteArray qtToolDirPrefix("QTTOOLDIR=\"");
|
||||
for (const QByteArray &output : outputs) {
|
||||
if (output.startsWith(qtToolDirPrefix)) {
|
||||
QByteArray withoutVarName = output.mid(qtToolDirPrefix.size()); // remove QTTOOLDIR="
|
||||
if (output.startsWith("QTTOOLDIR=\"")) {
|
||||
QByteArray withoutVarName = output.mid(11); // remove QTTOOLDIR="
|
||||
withoutVarName.chop(1); // remove trailing quote
|
||||
return QStandardPaths::findExecutable(QStringLiteral("qmake"), QStringList()
|
||||
<< QString::fromLocal8Bit(withoutVarName));
|
||||
@@ -433,15 +424,6 @@ static FilePaths gatherQmakePathsFromQtChooser()
|
||||
return FilePaths();
|
||||
|
||||
const QList<QByteArray> versions = runQtChooser(qtchooser, QStringList("-l"));
|
||||
// Exemplary output of "qtchooser -l":
|
||||
// 4
|
||||
// 5
|
||||
// default
|
||||
// qt4-x86_64-linux-gnu
|
||||
// qt4
|
||||
// qt5-x86_64-linux-gnu
|
||||
// qt5
|
||||
// ""
|
||||
QSet<FilePath> foundQMakes;
|
||||
for (const QByteArray &version : versions) {
|
||||
FilePath possibleQMake = FilePath::fromString(
|
||||
@@ -454,20 +436,19 @@ static FilePaths gatherQmakePathsFromQtChooser()
|
||||
|
||||
static void findSystemQt()
|
||||
{
|
||||
FilePaths systemQueryTools
|
||||
FilePaths systemQMakes
|
||||
= BuildableHelperLibrary::findQtsInEnvironment(Environment::systemEnvironment());
|
||||
systemQueryTools.append(gatherQmakePathsFromQtChooser());
|
||||
for (const FilePath &queryToolPath : qAsConst(systemQueryTools)) {
|
||||
if (BuildableHelperLibrary::isQtChooser(queryToolPath))
|
||||
systemQMakes.append(gatherQmakePathsFromQtChooser());
|
||||
for (const FilePath &qmakePath : qAsConst(systemQMakes)) {
|
||||
if (BuildableHelperLibrary::isQtChooser(qmakePath))
|
||||
continue;
|
||||
const auto isSameQueryTool = [queryToolPath](const QtVersion *version) {
|
||||
const auto isSameQmake = [qmakePath](const QtVersion *version) {
|
||||
return Environment::systemEnvironment().
|
||||
isSameExecutable(queryToolPath.toString(),
|
||||
version->queryToolFilePath().toString());
|
||||
isSameExecutable(qmakePath.toString(), version->qmakeFilePath().toString());
|
||||
};
|
||||
if (contains(m_versions, isSameQueryTool))
|
||||
if (contains(m_versions, isSameQmake))
|
||||
continue;
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQueryToolPath(queryToolPath,
|
||||
QtVersion *version = QtVersionFactory::createQtVersionFromQMakePath(qmakePath,
|
||||
false,
|
||||
"PATH");
|
||||
if (version)
|
||||
|
Reference in New Issue
Block a user