@@ -4,50 +4,50 @@ use std::net::TcpListener;
4
4
use std:: process:: Command ;
5
5
use std:: thread;
6
6
7
+ use cargo_test_support:: install:: { assert_has_installed_exe, cargo_home} ;
7
8
use cargo_test_support:: { cargo_exe, project} ;
8
9
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;
16
12
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
+ }
25
21
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
+ }
44
40
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 )
51
51
. file ( "src/lib.rs" , "" )
52
52
. build ( ) ;
53
53
@@ -57,6 +57,45 @@ fn jobserver_exists() {
57
57
p. cargo ( "build -j2" ) . run ( ) ;
58
58
}
59
59
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
+
60
99
#[ cargo_test]
61
100
fn makes_jobserver_used ( ) {
62
101
let make = if cfg ! ( windows) {
0 commit comments