diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2021-02-26 17:01:51 +0100 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2021-03-01 17:37:03 +0100 |
commit | 5dab1e931d20f87fb35812fb64f6a2e344290cfa (patch) | |
tree | bffa7f9b7a5251680db03d6e3abf0787c158c03a /qmake/option.cpp | |
parent | d1101c460e173e3554fa4e5c800ab3e82ddc3aad (diff) |
Improve QMakeLibraryInfo encapsulation
QMakeLibraryInfo uses external data to produce paths. This causes
issues when trying to use it out of the existing qmake environment.
Add data fields that contain the path to the binary that uses
QMakeLibraryInfo and manually specified qtconf.
Task-number: QTBUG-75870
Change-Id: Ic6fa274ede3a9287826ff66c79f155b10d0d455c
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'qmake/option.cpp')
-rw-r--r-- | qmake/option.cpp | 62 |
1 files changed, 8 insertions, 54 deletions
diff --git a/qmake/option.cpp b/qmake/option.cpp index 09d790c9c2..1f9d60d7a8 100644 --- a/qmake/option.cpp +++ b/qmake/option.cpp @@ -202,8 +202,10 @@ Option::parseCommandLine(QStringList &args, QMakeCmdLineParserState &state) continue; default: QMakeGlobals::ArgumentReturn cmdRet = globals->addCommandLineArguments(state, args, &x); - if (cmdRet == QMakeGlobals::ArgumentsOk) + if (cmdRet == QMakeGlobals::ArgumentsOk) { + QMakeLibraryInfo::qtconfManualPath = globals->qtconf; break; + } if (cmdRet == QMakeGlobals::ArgumentMalformed) { fprintf(stderr, "***Option %s requires a parameter\n", qPrintable(args.at(x - 1))); return Option::QMAKE_CMDLINE_SHOW_USAGE | Option::QMAKE_CMDLINE_ERROR; @@ -326,46 +328,19 @@ Option::init(int argc, char **argv) #endif if(Option::qmake_mode == Option::QMAKE_GENERATE_NOTHING) Option::qmake_mode = default_mode(argv0); - if (!argv0.isEmpty() && IoUtils::isAbsolutePath(argv0)) { - globals->qmake_abslocation = argv0; - } else if (argv0.contains(QLatin1Char('/')) -#ifdef Q_OS_WIN - || argv0.contains(QLatin1Char('\\')) -#endif - ) { //relative PWD - globals->qmake_abslocation = QDir::current().absoluteFilePath(argv0); - } else { //in the PATH - QByteArray pEnv = qgetenv("PATH"); - QDir currentDir = QDir::current(); -#ifdef Q_OS_WIN - QStringList paths = QString::fromLocal8Bit(pEnv).split(QLatin1String(";")); - paths.prepend(QLatin1String(".")); -#else - QStringList paths = QString::fromLocal8Bit(pEnv).split(QLatin1String(":")); -#endif - for (QStringList::const_iterator p = paths.constBegin(); p != paths.constEnd(); ++p) { - if ((*p).isEmpty()) - continue; - QString candidate = currentDir.absoluteFilePath(*p + QLatin1Char('/') + argv0); - if (QFile::exists(candidate)) { - globals->qmake_abslocation = candidate; - break; - } - } - } + globals->qmake_abslocation = IoUtils::binaryAbsLocation(argv0); if (Q_UNLIKELY(globals->qmake_abslocation.isNull())) { // This is rather unlikely to ever happen on a modern system ... globals->qmake_abslocation = QMakeLibraryInfo::rawLocation(QMakeLibraryInfo::HostBinariesPath, QMakeLibraryInfo::EffectivePaths) + + "/qmake" #ifdef Q_OS_WIN - + "/qmake.exe"; -#else - + "/qmake"; + ".exe" #endif - } else { - globals->qmake_abslocation = QDir::cleanPath(globals->qmake_abslocation); + ; } + QMakeLibraryInfo::binaryAbsLocation = globals->qmake_abslocation; } else { Option::qmake_mode = Option::QMAKE_GENERATE_MAKEFILE; } @@ -656,25 +631,4 @@ qmakeAddCacheClear(qmakeCacheClearFunc func, void **data) cache_items.append(new QMakeCacheClearItem(func, data)); } -QString qmake_libraryInfoFile() -{ - if (!Option::globals->qtconf.isEmpty()) - return Option::globals->qtconf; - if (!Option::globals->qmake_abslocation.isEmpty()) { - QDir dir(QFileInfo(Option::globals->qmake_abslocation).absolutePath()); - QString qtconfig = dir.filePath("qt" QT_STRINGIFY(QT_VERSION_MAJOR) ".conf"); - if (QFile::exists(qtconfig)) - return qtconfig; - qtconfig = dir.filePath("qt.conf"); - if (QFile::exists(qtconfig)) - return qtconfig; - } - return QString(); -} - -QString qmake_abslocation() -{ - return Option::globals->qmake_abslocation; -} - QT_END_NAMESPACE |