Skip to content

Commit 581ea58

Browse files
committed
Add test case for 'cargo:rustc-link-arg=-defaultlib:oldnames'.
1 parent 9680ff6 commit 581ea58

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

cc-test/build.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ fn main() {
77
fs::remove_dir_all(&out).unwrap();
88
fs::create_dir(&out).unwrap();
99

10+
let target = std::env::var("TARGET").unwrap();
11+
12+
if target.ends_with("msvc") {
13+
env::set_var("CL", "-Zl"); // drop linker directives
14+
}
15+
1016
cc::Build::new()
1117
.file("src/foo.c")
1218
.flag_if_supported("-Wall")
@@ -21,7 +27,6 @@ fn main() {
2127
.include("src/include")
2228
.compile("bar");
2329

24-
let target = std::env::var("TARGET").unwrap();
2530
let file = target.split("-").next().unwrap();
2631
let file = format!(
2732
"src/{}.{}",
@@ -55,6 +60,14 @@ fn main() {
5560

5661
if target.contains("windows") {
5762
cc::Build::new().file("src/windows.c").compile("windows");
63+
if target.ends_with("msvc") && which::which("clang").is_ok() {
64+
cc::Build::new()
65+
.compiler("clang")
66+
.define("_CRT_NONSTDC_NO_WARNINGS", None)
67+
.file("src/msvcrt.c")
68+
.compile("nonstdcrt");
69+
println!("cargo:rustc-cfg=feature=\"msvcrt\"");
70+
}
5871
}
5972

6073
// Test that the `windows_registry` module will set PATH by looking for

cc-test/src/NMakefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ all: $(OUT_DIR)/msvc.lib $(OUT_DIR)/msvc.exe
22

33
$(OUT_DIR)/msvc.lib: $(OUT_DIR)/msvc.o
44
lib -nologo -out:$(OUT_DIR)/msvc.lib $(OUT_DIR)/msvc.o
5-
rc -h
65

76
$(OUT_DIR)/msvc.o: src/msvc.c
87
$(CC) -nologo -c -Fo:$@ src/msvc.c -MD
98

109
$(OUT_DIR)/msvc.exe: $(OUT_DIR)/msvc2.o
11-
$(CC) -nologo -Fo:$@ $(OUT_DIR)/msvc2.o
10+
$(CC) -nologo -Fo:$@ $(OUT_DIR)/msvc2.o /link msvcrt.lib
1211

1312
$(OUT_DIR)/msvc2.o: src/msvc.c
1413
$(CC) -nologo -c -Fo:$@ src/msvc.c -DMAIN -MD

cc-test/src/msvcrt.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#include <stdlib.h>
2+
#include <string.h>
3+
void msvcrt() { free(strdup("")); }

cc-test/tests/all.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,17 @@ fn msvc_here() {
5050
}
5151
}
5252

53+
#[test]
54+
#[cfg(feature = "msvcrt")]
55+
fn msvcrt_here() {
56+
extern "C" {
57+
fn msvcrt();
58+
}
59+
unsafe {
60+
msvcrt();
61+
}
62+
}
63+
5364
#[test]
5465
fn opt_linkage() {
5566
unsafe {

0 commit comments

Comments
 (0)