@@ -2154,6 +2154,66 @@ fn crate_library_path_env_var() {
2154
2154
setenv_for_removing_empty_component ( p. cargo ( "run" ) ) . run ( ) ;
2155
2155
}
2156
2156
2157
+ // See https://github.com/rust-lang/cargo/issues/14194
2158
+ #[ cargo_test]
2159
+ fn issue_14194_deduplicate_library_path_env_var ( ) {
2160
+ let p = project ( )
2161
+ . file (
2162
+ "src/main.rs" ,
2163
+ & format ! (
2164
+ r#"
2165
+ use std::process::Command;
2166
+ fn main() {{
2167
+ let level: i32 = std::env::args().nth(1).unwrap().parse().unwrap();
2168
+ let txt = "var.txt";
2169
+ let lib_path = std::env::var("{}").unwrap();
2170
+
2171
+ // Make sure we really have something in dylib search path.
2172
+ let count = std::env::split_paths(&lib_path).count();
2173
+ assert!(count > 0);
2174
+
2175
+ if level >= 3 {{
2176
+ std::fs::write(txt, &lib_path).unwrap();
2177
+ }} else {{
2178
+ let prev_lib_path = std::fs::read_to_string(txt).unwrap();
2179
+ // Ensure no duplicate insertion to dylib search paths
2180
+ // when calling `cargo run` recursively.
2181
+ assert_ne!(lib_path, prev_lib_path);
2182
+ }}
2183
+
2184
+ if level == 0 {{
2185
+ return;
2186
+ }}
2187
+
2188
+ let _ = Command::new(std::env!("CARGO"))
2189
+ .arg("run")
2190
+ .arg("--")
2191
+ .arg((level - 1).to_string())
2192
+ .status()
2193
+ .unwrap();
2194
+ }}
2195
+ "# ,
2196
+ dylib_path_envvar( ) ,
2197
+ ) ,
2198
+ )
2199
+ . build ( ) ;
2200
+
2201
+ setenv_for_removing_empty_component ( p. cargo ( "run -- 3" ) )
2202
+ . with_stderr_data ( str![ [ r#"
2203
+ [COMPILING] foo v0.0.1 ([ROOT]/foo)
2204
+ [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2205
+ [RUNNING] `target/debug/foo[EXE] 3`
2206
+ [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2207
+ [RUNNING] `target/debug/foo[EXE] 2`
2208
+ [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2209
+ [RUNNING] `target/debug/foo[EXE] 1`
2210
+ [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s
2211
+ [RUNNING] `target/debug/foo[EXE] 0`
2212
+
2213
+ "# ] ] )
2214
+ . run ( ) ;
2215
+ }
2216
+
2157
2217
// Regression test for #4277
2158
2218
#[ cargo_test]
2159
2219
fn build_with_fake_libc_not_loading ( ) {
0 commit comments