Skip to content

Commit 9452924

Browse files
committed
Add ndk-sys example and fix nested -- handling
1 parent 1e70630 commit 9452924

5 files changed

Lines changed: 34 additions & 8 deletions

File tree

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ jobs:
9797
if: runner.os != 'Windows'
9898
working-directory: example/openssl
9999
run: cargo ndk -t arm64-v8a --platform 28 build
100+
- name: Run ndk-sys example
101+
working-directory: example/ndk-sys
102+
run: cargo ndk --target arm64-v8a --platform 26 -- clippy --all --all-features --tests -- -D warnings
100103
- name: Build release binary
101104
if: ${{ contains(matrix.name, 'Stable') }}
102105
run: cargo build --locked --release --target ${{ matrix.target }}

example/ndk-sys/Cargo.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "ndk-sys-example"
3+
version = "0.1.0"
4+
authors = ["Brendan Molloy <brendan@bbqsrc.net>"]
5+
edition = "2024"
6+
7+
[lib]
8+
crate-type = ["rlib", "cdylib"]
9+
10+
[dependencies]
11+
ndk-sys = "0.6.0"

example/ndk-sys/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// This exists just to cause the ndk-sys crate to be built

src/cargo.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,7 @@ pub(crate) fn run(
273273
std::process::exit(1);
274274
}
275275

276-
let mut cargo_args: Vec<OsString> = cargo_args.iter().map(Into::into).collect();
277-
276+
let cargo_args: Vec<OsString> = cargo_args.iter().map(Into::into).collect();
278277
let clang_target = clang_target(triple, platform);
279278
let cargo_bin = env::var("CARGO").unwrap_or_else(|_| "cargo".into());
280279
let mut cargo_cmd = Command::new(&cargo_bin);
@@ -300,6 +299,17 @@ pub(crate) fn run(
300299

301300
cargo_cmd.current_dir(dir).envs(envs);
302301

302+
let cargo_args = if !cargo_args.is_empty() && cargo_args[0].as_os_str() == "--" {
303+
&cargo_args[1..]
304+
} else {
305+
&cargo_args[..]
306+
};
307+
308+
// Handle the case where `--` is sent to the subcommand
309+
let mid = cargo_args.iter().position(|arg| arg == "--").unwrap_or(cargo_args.len());
310+
let (cargo_args, subcommand_args) = cargo_args.split_at(mid);
311+
let mut cargo_args = cargo_args.to_vec();
312+
303313
match dir.parent() {
304314
Some(parent) => {
305315
if parent != dir {
@@ -319,14 +329,13 @@ pub(crate) fn run(
319329
cargo_args.push("--message-format".into());
320330
cargo_args.push("json-render-diagnostics".into());
321331

322-
let cargo_args = if !cargo_args.is_empty() && cargo_args[0].as_os_str() == "--" {
323-
&cargo_args[1..]
324-
} else {
325-
&cargo_args[..]
326-
};
332+
cargo_cmd.args(&cargo_args);
333+
334+
if !subcommand_args.is_empty() {
335+
cargo_cmd.args(subcommand_args);
336+
}
327337

328338
let mut child = cargo_cmd
329-
.args(cargo_args)
330339
.stdin(Stdio::inherit())
331340
.stderr(Stdio::inherit())
332341
.stdout(Stdio::piped())

src/cli/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,8 @@ pub fn run(args: Vec<String>) -> anyhow::Result<()> {
439439
}
440440
};
441441

442+
println!("args: {args:#?}");
443+
442444
if args.cargo_args.is_empty() {
443445
shell.error("No args found to pass to cargo!")?;
444446
shell.note("You still need to specify build arguments to cargo to achieve anything. :)")?;

0 commit comments

Comments
 (0)