Skip to content

Commit cda3a5a

Browse files
committed
qt-build-utils: add error for when a version is requested and no match is found
1 parent 9143dba commit cda3a5a

3 files changed

Lines changed: 28 additions & 2 deletions

File tree

crates/qt-build-utils/src/error.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ pub enum QtBuildError {
1919
/// Qt was not found
2020
#[error("Could not find Qt")]
2121
QtMissing,
22+
/// Qt was not found within the version requirements
23+
#[error("Could not find matching Qt install for requested version(s): {1} from available local version(s): {0}", .available_versions.iter().map(|version| version.to_string()).collect::<Vec<_>>().join(", "), .requested_versions.iter().map(|version| version.to_string()).collect::<Vec<_>>().join(", "))]
24+
QtMissingVersion {
25+
/// The Qt versions found locally
26+
available_versions: Vec<semver::Version>,
27+
/// The Qt versions requested
28+
requested_versions: Vec<semver::Version>,
29+
},
2230
/// Executing `qmake -query` failed
2331
#[error("Executing `qmake -query` failed: {0:?}")]
2432
QmakeFailed(#[from] std::io::Error),

crates/qt-build-utils/src/installation/qt_minimal/artifact.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub(crate) struct ParsedQtManifest {
1414
pub(crate) artifacts: Vec<ParsedQtArtifact>,
1515
}
1616

17-
#[derive(Debug, Serialize, Deserialize, PartialEq)]
17+
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
1818
/// Descriptor for a Qt artifact, included download information
1919
pub(crate) struct ParsedQtArtifact {
2020
pub(crate) version: Version,

crates/qt-build-utils/src/lib.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ impl QtBuild {
122122
}
123123
}
124124

125+
#[cfg(feature = "qt_version")]
126+
let mut local_versions = std::collections::BTreeSet::new();
127+
125128
// Auto determining Qt version from crates is enabled
126129
#[cfg(feature = "qt_version")]
127130
{
@@ -135,6 +138,8 @@ impl QtBuild {
135138
if versions.contains(&qt_installation.version()) {
136139
return Ok(Box::new(qt_installation));
137140
}
141+
142+
local_versions.insert(qt_installation.version());
138143
}
139144
}
140145

@@ -145,7 +150,7 @@ impl QtBuild {
145150
if let Ok(local_artifacts) = QtInstallationQtMinimal::local_artifacts() {
146151
// Find artifacts with the version range for our OS and arch
147152
let artifacts = QtInstallationQtMinimal::match_artifact_requirements(
148-
local_artifacts,
153+
local_artifacts.clone(),
149154
&versions,
150155
);
151156

@@ -165,6 +170,9 @@ impl QtBuild {
165170
return Ok(Box::new(qt_installation));
166171
}
167172
}
173+
174+
local_versions
175+
.extend(local_artifacts.into_iter().map(|artifact| artifact.version));
168176
}
169177

170178
// Download from Qt artifacts
@@ -195,6 +203,16 @@ impl QtBuild {
195203
// so we do not need to check for qt_minimal
196204
}
197205

206+
#[cfg(feature = "qt_version")]
207+
{
208+
Err(QtBuildError::QtMissingVersion {
209+
available_versions: local_versions.into_iter().collect(),
210+
requested_versions: qt_version::qt_versions(),
211+
}
212+
.into())
213+
}
214+
215+
#[cfg(not(feature = "qt_version"))]
198216
Err(QtBuildError::QtMissing.into())
199217
};
200218

0 commit comments

Comments
 (0)