aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--QtVsTools.Package/Options/QtVersionsPage.cs11
-rw-r--r--QtVsTools.Package/Options/QtVersionsTable.cs38
2 files changed, 37 insertions, 12 deletions
diff --git a/QtVsTools.Package/Options/QtVersionsPage.cs b/QtVsTools.Package/Options/QtVersionsPage.cs
index 551fb334..df612a7b 100644
--- a/QtVsTools.Package/Options/QtVersionsPage.cs
+++ b/QtVsTools.Package/Options/QtVersionsPage.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Windows;
using Microsoft.VisualStudio.Shell;
@@ -109,14 +110,20 @@ namespace QtVsTools.Options
try {
if (version.Host == BuildHost.Windows) {
if (version.State.HasFlag((State)Column.Path)) {
- var versionInfo = VersionInformation.Get(version.Path);
+ var versionPath = version.Path;
+ var ignoreCase = StringComparison.CurrentCultureIgnoreCase;
+ if (Path.GetFileName(versionPath).Equals("qmake.exe", ignoreCase))
+ versionPath = Path.GetDirectoryName(versionPath);
+ if (Path.GetFileName(versionPath).Equals("bin", ignoreCase))
+ versionPath = Path.GetDirectoryName(versionPath);
+ var versionInfo = VersionInformation.Get(versionPath);
var generator = versionInfo.GetQMakeConfEntry("MAKEFILE_GENERATOR");
if (generator != "MSVC.NET" && generator != "MSBUILD")
throw new Exception(string.Format(
"This Qt version uses an unsupported makefile generator (used: "
+ "{0}, supported: MSVC.NET, MSBUILD)", generator));
+ VersionManager.SaveVersion(version.VersionName, versionPath);
}
- VersionManager.SaveVersion(version.VersionName, version.Path);
} else {
string name = version.VersionName;
string access =
diff --git a/QtVsTools.Package/Options/QtVersionsTable.cs b/QtVsTools.Package/Options/QtVersionsTable.cs
index ddcb90d9..c9808c7c 100644
--- a/QtVsTools.Package/Options/QtVersionsTable.cs
+++ b/QtVsTools.Package/Options/QtVersionsTable.cs
@@ -254,13 +254,28 @@ namespace QtVsTools.Options
version.FieldPath.ValidationError = "Path cannot be empty";
IsValid = false;
} else if (version.Host == BuildHost.Windows) {
- var path = NormalizePath(version.Path);
- if (!Directory.Exists(path)) {
- version.FieldPath.ValidationError = "Path does not exist";
- IsValid = false;
- } else if (!File.Exists(Path.Combine(path, "qmake.exe"))) {
- version.FieldPath.ValidationError = "Cannot find qmake.exe";
+ string path = NormalizePath(version.Path);
+ if (path == null) {
+ version.FieldPath.ValidationError = "Invalid path format";
IsValid = false;
+ } else {
+ var possibleQMakePaths = new[] {
+ // Path points to qmake.exe
+ path,
+ // Path points to folder containing qmake.exe
+ Path.Combine(path, "qmake.exe"),
+ // Path points to folder containing bin\qmake.exe
+ Path.Combine(path, "bin", "qmake.exe"),
+ };
+ bool qmakeExists = possibleQMakePaths
+ .Where(p => File.Exists(p)
+ && Path.GetFileName(p).Equals("qmake.exe",
+ StringComparison.CurrentCultureIgnoreCase))
+ .Any();
+ if (!qmakeExists) {
+ version.FieldPath.ValidationError = "Cannot find qmake.exe";
+ IsValid = false;
+ }
}
}
if (previousValidation != version.FieldPath.ValidationError)
@@ -506,10 +521,13 @@ namespace QtVsTools.Options
{
if (string.IsNullOrEmpty(path))
return path;
-
- return Path.GetFullPath(new Uri(path).LocalPath)
- .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
- .ToUpperInvariant();
+ try {
+ return Path.GetFullPath(new Uri(path).LocalPath)
+ .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
+ .ToUpperInvariant();
+ } catch (UriFormatException) {
+ return null;
+ }
}
void Explorer_Click(object sender, RoutedEventArgs e)