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");  } | 
