forked from qt-creator/qt-creator
MsvcToolChain: Add installationFromPathAndVersion helper function
In preparation for an upcoming patch the creation of VisualStudioInstallations from installationPath and version is moved to a helper function. Change-Id: I0c5973028be22b229d45f20045cf47b5da44f682 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Miguel Costa <miguel.costa@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -179,6 +179,36 @@ static QString windowsProgramFilesDir()
|
|||||||
return QDir::fromNativeSeparators(QFile::decodeName(qgetenv(programFilesC)));
|
return QDir::fromNativeSeparators(QFile::decodeName(qgetenv(programFilesC)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Utils::optional<VisualStudioInstallation> installationFromPathAndVersion(
|
||||||
|
const QString &installationPath,
|
||||||
|
const QVersionNumber &version)
|
||||||
|
{
|
||||||
|
QString vcVarsPath = QDir::fromNativeSeparators(installationPath);
|
||||||
|
if (!vcVarsPath.endsWith('/'))
|
||||||
|
vcVarsPath += '/';
|
||||||
|
if (version.majorVersion() > 14)
|
||||||
|
vcVarsPath += QStringLiteral("VC/Auxiliary/Build");
|
||||||
|
else
|
||||||
|
vcVarsPath += QStringLiteral("VC");
|
||||||
|
|
||||||
|
const QString vcVarsAllPath = vcVarsPath + QStringLiteral("/vcvarsall.bat");
|
||||||
|
if (!QFileInfo(vcVarsAllPath).isFile()) {
|
||||||
|
qWarning().noquote() << "Unable to find MSVC setup script "
|
||||||
|
<< QDir::toNativeSeparators(vcVarsPath) << " in version "
|
||||||
|
<< version;
|
||||||
|
return Utils::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString versionString = version.toString();
|
||||||
|
VisualStudioInstallation installation;
|
||||||
|
installation.path = installationPath;
|
||||||
|
installation.version = version;
|
||||||
|
installation.vsName = versionString;
|
||||||
|
installation.vcVarsPath = vcVarsPath;
|
||||||
|
installation.vcVarsAll = vcVarsAllPath;
|
||||||
|
return std::move(installation);
|
||||||
|
}
|
||||||
|
|
||||||
// Detect build tools introduced with MSVC2017
|
// Detect build tools introduced with MSVC2017
|
||||||
static Utils::optional<VisualStudioInstallation> detectCppBuildTools2017()
|
static Utils::optional<VisualStudioInstallation> detectCppBuildTools2017()
|
||||||
{
|
{
|
||||||
@@ -210,34 +240,15 @@ static QVector<VisualStudioInstallation> detectVisualStudio()
|
|||||||
#endif
|
#endif
|
||||||
QSettings vsRegistry(keyRoot + QStringLiteral("VS7"), QSettings::NativeFormat);
|
QSettings vsRegistry(keyRoot + QStringLiteral("VS7"), QSettings::NativeFormat);
|
||||||
QScopedPointer<QSettings> vcRegistry;
|
QScopedPointer<QSettings> vcRegistry;
|
||||||
const QString vcvarsall = QStringLiteral("/vcvarsall.bat");
|
|
||||||
foreach (const QString &vsName, vsRegistry.allKeys()) {
|
foreach (const QString &vsName, vsRegistry.allKeys()) {
|
||||||
const QVersionNumber version = QVersionNumber::fromString(vsName);
|
const QVersionNumber version = QVersionNumber::fromString(vsName);
|
||||||
if (!version.isNull()) {
|
if (!version.isNull()) {
|
||||||
VisualStudioInstallation installation;
|
const QString installationPath = fixRegistryPath(vsRegistry.value(vsName).toString());
|
||||||
installation.vsName = vsName;
|
|
||||||
installation.version = version;
|
Utils::optional<VisualStudioInstallation> installation
|
||||||
if (version.majorVersion() > 14) {
|
= installationFromPathAndVersion(installationPath, version);
|
||||||
// Starting with 15 (MSVC2017): There are no more VC entries,
|
if (installation)
|
||||||
// build path from VS installation
|
result.append(*installation);
|
||||||
installation.path = fixRegistryPath(vsRegistry.value(vsName).toString());
|
|
||||||
installation.vcVarsPath = installation.path + QStringLiteral("/VC/Auxiliary/Build");
|
|
||||||
installation.vcVarsAll = installation.vcVarsPath + vcvarsall;
|
|
||||||
} else {
|
|
||||||
// Up to 14 (MSVC2015): Look up via matching VC entry
|
|
||||||
if (vcRegistry.isNull())
|
|
||||||
vcRegistry.reset(new QSettings(keyRoot + QStringLiteral("VC7"), QSettings::NativeFormat));
|
|
||||||
installation.path = fixRegistryPath(vcRegistry->value(vsName).toString());
|
|
||||||
installation.vcVarsPath = installation.path;
|
|
||||||
installation.vcVarsAll = installation.vcVarsPath + vcvarsall;
|
|
||||||
}
|
|
||||||
if (QFileInfo(installation.vcVarsAll).isFile()) {
|
|
||||||
result.append(installation);
|
|
||||||
} else {
|
|
||||||
qWarning().noquote() << "Unable to find MSVC setup script "
|
|
||||||
<< QDir::toNativeSeparators(installation.vcVarsPath) << " in version "
|
|
||||||
<< version;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user