diff options
Diffstat (limited to 'gcc/tests')
-rw-r--r-- | gcc/tests/support/mod.rs | 6 | ||||
-rw-r--r-- | gcc/tests/test.rs | 128 |
2 files changed, 110 insertions, 24 deletions
diff --git a/gcc/tests/support/mod.rs b/gcc/tests/support/mod.rs index 135a663..2f3e44c 100644 --- a/gcc/tests/support/mod.rs +++ b/gcc/tests/support/mod.rs @@ -36,7 +36,7 @@ impl Test { pub fn gnu() -> Test { let t = Test::new(); - t.shim("cc").shim("ar"); + t.shim("cc").shim("c++").shim("ar"); t } @@ -55,8 +55,8 @@ impl Test { self } - pub fn gcc(&self) -> gcc::Config { - let mut cfg = gcc::Config::new(); + pub fn gcc(&self) -> gcc::Build { + let mut cfg = gcc::Build::new(); let mut path = env::split_paths(&env::var_os("PATH").unwrap()).collect::<Vec<_>>(); path.insert(0, self.td.path().to_owned()); let target = if self.msvc { diff --git a/gcc/tests/test.rs b/gcc/tests/test.rs index 8fda3ed..dd60f94 100644 --- a/gcc/tests/test.rs +++ b/gcc/tests/test.rs @@ -10,7 +10,7 @@ fn gnu_smoke() { let test = Test::gnu(); test.gcc() .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("-O2") @@ -28,7 +28,7 @@ fn gnu_opt_level_1() { test.gcc() .opt_level(1) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("-O1") @@ -41,7 +41,7 @@ fn gnu_opt_level_s() { test.gcc() .opt_level_str("s") .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("-Os") @@ -57,11 +57,34 @@ fn gnu_debug() { test.gcc() .debug(true) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("-g"); } #[test] +fn gnu_warnings_into_errors() { + let test = Test::gnu(); + test.gcc() + .warnings_into_errors(true) + .file("foo.c") + .compile("foo"); + + test.cmd(0).must_have("-Werror"); +} + +#[test] +fn gnu_warnings() { + let test = Test::gnu(); + test.gcc() + .warnings(true) + .file("foo.c") + .compile("foo"); + + test.cmd(0).must_have("-Wall") + .must_have("-Wextra"); +} + +#[test] fn gnu_x86_64() { for vendor in &["unknown-linux-gnu", "apple-darwin"] { let target = format!("x86_64-{}", vendor); @@ -70,7 +93,7 @@ fn gnu_x86_64() { .target(&target) .host(&target) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("-fPIC") @@ -88,7 +111,7 @@ fn gnu_x86_64_no_pic() { .target(&target) .host(&target) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_not_have("-fPIC"); } @@ -103,7 +126,7 @@ fn gnu_i686() { .target(&target) .host(&target) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("-m32"); @@ -120,7 +143,7 @@ fn gnu_i686_pic() { .target(&target) .host(&target) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("-fPIC"); } @@ -132,7 +155,7 @@ fn gnu_set_stdlib() { test.gcc() .cpp_set_stdlib(Some("foo")) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_not_have("-stdlib=foo"); } @@ -143,7 +166,7 @@ fn gnu_include() { test.gcc() .include("foo/bar") .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("-I").must_have("foo/bar"); } @@ -152,10 +175,10 @@ fn gnu_include() { fn gnu_define() { let test = Test::gnu(); test.gcc() - .define("FOO", Some("bar")) + .define("FOO", "bar") .define("BAR", None) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("-DFOO=bar").must_have("-DBAR"); } @@ -165,16 +188,79 @@ fn gnu_compile_assembly() { let test = Test::gnu(); test.gcc() .file("foo.S") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("foo.S"); } #[test] +fn gnu_shared() { + let test = Test::gnu(); + test.gcc() + .file("foo.c") + .shared_flag(true) + .static_flag(false) + .compile("foo"); + + test.cmd(0) + .must_have("-shared") + .must_not_have("-static"); +} + +#[test] +fn gnu_flag_if_supported() { + if cfg!(windows) { + return + } + let test = Test::gnu(); + test.gcc() + .file("foo.c") + .flag_if_supported("-Wall") + .flag_if_supported("-Wflag-does-not-exist") + .flag_if_supported("-std=c++11") + .compile("foo"); + + test.cmd(0) + .must_have("-Wall") + .must_not_have("-Wflag-does-not-exist") + .must_not_have("-std=c++11"); +} + +#[test] +fn gnu_flag_if_supported_cpp() { + if cfg!(windows) { + return + } + let test = Test::gnu(); + test.gcc() + .cpp(true) + .file("foo.cpp") + .flag_if_supported("-std=c++11") + .compile("foo"); + + test.cmd(0) + .must_have("-std=c++11"); +} + +#[test] +fn gnu_static() { + let test = Test::gnu(); + test.gcc() + .file("foo.c") + .shared_flag(false) + .static_flag(true) + .compile("foo"); + + test.cmd(0) + .must_have("-static") + .must_not_have("-shared"); +} + +#[test] fn msvc_smoke() { let test = Test::msvc(); test.gcc() .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0) .must_have("/O2") @@ -191,7 +277,7 @@ fn msvc_opt_level_0() { test.gcc() .opt_level(0) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_not_have("/O2"); } @@ -202,7 +288,7 @@ fn msvc_debug() { test.gcc() .debug(true) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("/Z7"); } @@ -212,7 +298,7 @@ fn msvc_include() { test.gcc() .include("foo/bar") .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("/I").must_have("foo/bar"); } @@ -221,10 +307,10 @@ fn msvc_include() { fn msvc_define() { let test = Test::msvc(); test.gcc() - .define("FOO", Some("bar")) + .define("FOO", "bar") .define("BAR", None) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("/DFOO=bar").must_have("/DBAR"); } @@ -235,7 +321,7 @@ fn msvc_static_crt() { test.gcc() .static_crt(true) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("/MT"); } @@ -246,7 +332,7 @@ fn msvc_no_static_crt() { test.gcc() .static_crt(false) .file("foo.c") - .compile("libfoo.a"); + .compile("foo"); test.cmd(0).must_have("/MD"); } |