@@ -5,50 +5,50 @@ use std::net::TcpListener;
5
5
use std:: process:: Command ;
6
6
use std:: thread;
7
7
8
+ use cargo_test_support:: install:: { assert_has_installed_exe, cargo_home} ;
8
9
use cargo_test_support:: { cargo_exe, project} ;
9
10
10
- #[ cargo_test]
11
- fn jobserver_exists ( ) {
12
- let p = project ( )
13
- . file (
14
- "build.rs" ,
15
- r#"
16
- use std::env;
11
+ const EXE_CONTENT : & str = r#"
12
+ use std::env;
17
13
18
- fn main() {
19
- let var = env::var("CARGO_MAKEFLAGS").unwrap();
20
- let arg = var.split(' ')
21
- .find(|p| p.starts_with("--jobserver"))
22
- .unwrap();
23
- let val = &arg[arg.find('=').unwrap() + 1..];
24
- validate(val);
25
- }
14
+ fn main() {
15
+ let var = env::var("CARGO_MAKEFLAGS").unwrap();
16
+ let arg = var.split(' ')
17
+ .find(|p| p.starts_with("--jobserver"))
18
+ .unwrap();
19
+ let val = &arg[arg.find('=').unwrap() + 1..];
20
+ validate(val);
21
+ }
26
22
27
- #[cfg(unix)]
28
- fn validate(s: &str) {
29
- use std::fs::File;
30
- use std::io::*;
31
- use std::os::unix::prelude::*;
32
-
33
- let fds = s.split(',').collect::<Vec<_>>();
34
- println!("{}", s);
35
- assert_eq!(fds.len(), 2);
36
- unsafe {
37
- let mut read = File::from_raw_fd(fds[0].parse().unwrap());
38
- let mut write = File::from_raw_fd(fds[1].parse().unwrap());
39
-
40
- let mut buf = [0];
41
- assert_eq!(read.read(&mut buf).unwrap(), 1);
42
- assert_eq!(write.write(&buf).unwrap(), 1);
43
- }
44
- }
23
+ #[cfg(unix)]
24
+ fn validate(s: &str) {
25
+ use std::fs::File;
26
+ use std::io::*;
27
+ use std::os::unix::prelude::*;
28
+
29
+ let fds = s.split(',').collect::<Vec<_>>();
30
+ println!("{}", s);
31
+ assert_eq!(fds.len(), 2);
32
+ unsafe {
33
+ let mut read = File::from_raw_fd(fds[0].parse().unwrap());
34
+ let mut write = File::from_raw_fd(fds[1].parse().unwrap());
35
+
36
+ let mut buf = [0];
37
+ assert_eq!(read.read(&mut buf).unwrap(), 1);
38
+ assert_eq!(write.write(&buf).unwrap(), 1);
39
+ }
40
+ }
45
41
46
- #[cfg(windows)]
47
- fn validate(_: &str) {
48
- // a little too complicated for a test...
49
- }
50
- "# ,
51
- )
42
+ #[cfg(windows)]
43
+ fn validate(_: &str) {
44
+ // a little too complicated for a test...
45
+ }
46
+ "# ;
47
+
48
+ #[ cargo_test]
49
+ fn jobserver_exists ( ) {
50
+ let p = project ( )
51
+ . file ( "build.rs" , EXE_CONTENT )
52
52
. file ( "src/lib.rs" , "" )
53
53
. build ( ) ;
54
54
@@ -58,6 +58,45 @@ fn jobserver_exists() {
58
58
p. cargo ( "build -j2" ) . run ( ) ;
59
59
}
60
60
61
+ #[ cargo_test]
62
+ fn external_subcommand_inherits_jobserver ( ) {
63
+ let make = if cfg ! ( windows) {
64
+ "mingw32-make"
65
+ } else {
66
+ "make"
67
+ } ;
68
+ if Command :: new ( make) . arg ( "--version" ) . output ( ) . is_err ( ) {
69
+ return ;
70
+ }
71
+
72
+ let name = "cargo-jobserver-check" ;
73
+ let p = project ( )
74
+ . file (
75
+ "Cargo.toml" ,
76
+ & format ! (
77
+ r#"
78
+ [package]
79
+ name = "{name}"
80
+ version = "0.0.1"
81
+ "#
82
+ ) ,
83
+ )
84
+ . file ( "src/main.rs" , EXE_CONTENT )
85
+ . file (
86
+ "Makefile" ,
87
+ "\
88
+ all:
89
+ \t +$(CARGO) jobserver-check
90
+ " ,
91
+ )
92
+ . build ( ) ;
93
+
94
+ p. cargo ( "install --path ." ) . run ( ) ;
95
+ assert_has_installed_exe ( cargo_home ( ) , name) ;
96
+
97
+ p. process ( make) . env ( "CARGO" , cargo_exe ( ) ) . arg ( "-j2" ) . run ( ) ;
98
+ }
99
+
61
100
#[ cargo_test]
62
101
fn makes_jobserver_used ( ) {
63
102
let make = if cfg ! ( windows) {
0 commit comments