Skip to content

Commit b099d39

Browse files
committed
test: external subcommand inherits jobserver
1 parent b1636fc commit b099d39

File tree

1 file changed

+78
-39
lines changed

1 file changed

+78
-39
lines changed

tests/testsuite/jobserver.rs

Lines changed: 78 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,50 +4,50 @@ use std::net::TcpListener;
44
use std::process::Command;
55
use std::thread;
66

7+
use cargo_test_support::install::{assert_has_installed_exe, cargo_home};
78
use cargo_test_support::{cargo_exe, project};
89

9-
#[cargo_test]
10-
fn jobserver_exists() {
11-
let p = project()
12-
.file(
13-
"build.rs",
14-
r#"
15-
use std::env;
10+
const EXE_CONTENT: &str = r#"
11+
use std::env;
1612
17-
fn main() {
18-
let var = env::var("CARGO_MAKEFLAGS").unwrap();
19-
let arg = var.split(' ')
20-
.find(|p| p.starts_with("--jobserver"))
21-
.unwrap();
22-
let val = &arg[arg.find('=').unwrap() + 1..];
23-
validate(val);
24-
}
13+
fn main() {
14+
let var = env::var("CARGO_MAKEFLAGS").unwrap();
15+
let arg = var.split(' ')
16+
.find(|p| p.starts_with("--jobserver"))
17+
.unwrap();
18+
let val = &arg[arg.find('=').unwrap() + 1..];
19+
validate(val);
20+
}
2521
26-
#[cfg(unix)]
27-
fn validate(s: &str) {
28-
use std::fs::File;
29-
use std::io::*;
30-
use std::os::unix::prelude::*;
31-
32-
let fds = s.split(',').collect::<Vec<_>>();
33-
println!("{}", s);
34-
assert_eq!(fds.len(), 2);
35-
unsafe {
36-
let mut read = File::from_raw_fd(fds[0].parse().unwrap());
37-
let mut write = File::from_raw_fd(fds[1].parse().unwrap());
38-
39-
let mut buf = [0];
40-
assert_eq!(read.read(&mut buf).unwrap(), 1);
41-
assert_eq!(write.write(&buf).unwrap(), 1);
42-
}
43-
}
22+
#[cfg(unix)]
23+
fn validate(s: &str) {
24+
use std::fs::File;
25+
use std::io::*;
26+
use std::os::unix::prelude::*;
27+
28+
let fds = s.split(',').collect::<Vec<_>>();
29+
println!("{}", s);
30+
assert_eq!(fds.len(), 2);
31+
unsafe {
32+
let mut read = File::from_raw_fd(fds[0].parse().unwrap());
33+
let mut write = File::from_raw_fd(fds[1].parse().unwrap());
34+
35+
let mut buf = [0];
36+
assert_eq!(read.read(&mut buf).unwrap(), 1);
37+
assert_eq!(write.write(&buf).unwrap(), 1);
38+
}
39+
}
4440
45-
#[cfg(windows)]
46-
fn validate(_: &str) {
47-
// a little too complicated for a test...
48-
}
49-
"#,
50-
)
41+
#[cfg(windows)]
42+
fn validate(_: &str) {
43+
// a little too complicated for a test...
44+
}
45+
"#;
46+
47+
#[cargo_test]
48+
fn jobserver_exists() {
49+
let p = project()
50+
.file("build.rs", EXE_CONTENT)
5151
.file("src/lib.rs", "")
5252
.build();
5353

@@ -57,6 +57,45 @@ fn jobserver_exists() {
5757
p.cargo("build -j2").run();
5858
}
5959

60+
#[cargo_test]
61+
fn external_subcommand_inherits_jobserver() {
62+
let make = if cfg!(windows) {
63+
"mingw32-make"
64+
} else {
65+
"make"
66+
};
67+
if Command::new(make).arg("--version").output().is_err() {
68+
return;
69+
}
70+
71+
let name = "cargo-jobserver-check";
72+
let p = project()
73+
.file(
74+
"Cargo.toml",
75+
&format!(
76+
r#"
77+
[package]
78+
name = "{name}"
79+
version = "0.0.1"
80+
"#
81+
),
82+
)
83+
.file("src/main.rs", EXE_CONTENT)
84+
.file(
85+
"Makefile",
86+
"\
87+
all:
88+
\t+$(CARGO) jobserver-check
89+
",
90+
)
91+
.build();
92+
93+
p.cargo("install --path .").run();
94+
assert_has_installed_exe(cargo_home(), name);
95+
96+
p.process(make).env("CARGO", cargo_exe()).arg("-j2").run();
97+
}
98+
6099
#[cargo_test]
61100
fn makes_jobserver_used() {
62101
let make = if cfg!(windows) {

0 commit comments

Comments
 (0)