Skip to content

Commit f08b25c

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

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,11 @@ 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!(
106+
"{} -query QT_VERSION",
107+
qmake_path.to_string_lossy().to_string()
108+
);
109+
let qmake_version = match utils::native_shell_command(&qmake_command).output() {
109110
Err(e) if e.kind() == ErrorKind::NotFound => Err(QtBuildError::QtMissing),
110111
Err(e) => Err(QtBuildError::QmakeFailed(e)),
111112
Ok(output) if !output.status.success() => Err(QtBuildError::QtMissing),
@@ -373,9 +374,13 @@ impl QtInstallationQMake {
373374
}
374375

375376
fn qmake_query(&self, var_name: &str) -> String {
377+
let qmake_command = format!(
378+
"{} -query {}",
379+
self.qmake_path.to_string_lossy().to_string(),
380+
var_name
381+
);
376382
String::from_utf8_lossy(
377-
&Command::new(&self.qmake_path)
378-
.args(["-query", var_name])
383+
&utils::native_shell_command(&qmake_command)
379384
.output()
380385
.unwrap()
381386
.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)