Skip to content

Commit 031f080

Browse files
SanderVockeSander Vocke
authored andcommitted
qt-build-utils: support qmake wrapper scripts
1 parent 96d3233 commit 031f080

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

crates/qt-build-utils/src/installation/qmake.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,8 @@ impl TryFrom<PathBuf> for QtInstallationQMake {
102102

103103
fn try_from(qmake_path: PathBuf) -> anyhow::Result<Self> {
104104
// Attempt to read the QT_VERSION from qmake
105-
let qmake_version = match Command::new(&qmake_path)
106-
.args(["-query", "QT_VERSION"])
107-
.output()
108-
{
105+
let qmake_command: String = format!("{} -query QT_VERSION", qmake_path.to_string_lossy());
106+
let qmake_version = match utils::native_shell_command(&qmake_command).output() {
109107
Err(e) if e.kind() == ErrorKind::NotFound => Err(QtBuildError::QtMissing),
110108
Err(e) => Err(QtBuildError::QmakeFailed(e)),
111109
Ok(output) if !output.status.success() => Err(QtBuildError::QtMissing),
@@ -373,9 +371,9 @@ impl QtInstallationQMake {
373371
}
374372

375373
fn qmake_query(&self, var_name: &str) -> String {
374+
let qmake_command = format!("{} -query {}", self.qmake_path.to_string_lossy(), var_name);
376375
String::from_utf8_lossy(
377-
&Command::new(&self.qmake_path)
378-
.args(["-query", var_name])
376+
&utils::native_shell_command(&qmake_command)
379377
.output()
380378
.unwrap()
381379
.stdout,

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
//
44
// SPDX-License-Identifier: MIT OR Apache-2.0
55

6+
use std::process::Command;
7+
68
/// Whether apple is the current target
79
pub(crate) fn is_apple_target() -> bool {
810
std::env::var("TARGET")
@@ -14,3 +16,16 @@ pub(crate) fn is_apple_target() -> bool {
1416
pub(crate) fn is_emscripten_target() -> bool {
1517
std::env::var("CARGO_CFG_TARGET_OS") == Ok("emscripten".to_owned())
1618
}
19+
20+
/// Wrap a command in a native subshell
21+
pub(crate) fn native_shell_command(command: &str) -> Command {
22+
let mut result: Command;
23+
if cfg!(target_os = "windows") {
24+
result = Command::new("cmd");
25+
result.args(["/C", command]);
26+
} else {
27+
result = Command::new("sh");
28+
result.args(["-c", command]);
29+
}
30+
result
31+
}

0 commit comments

Comments
 (0)