Browse Source

Automatically detect the C dialect from file extensions, and use the

"largest" dialect.
cl-test
Peter Jin 7 years ago
parent
commit
2936d7f0f8
  1. 15
      src/lib.rs

15
src/lib.rs

@ -82,6 +82,7 @@ pub struct Build {
flags: Vec<String>,
flags_supported: Vec<String>,
files: Vec<PathBuf>,
dialect: Dialect,
cpp: bool,
cpp_link_stdlib: Option<Option<String>>,
cpp_set_stdlib: Option<String>,
@ -308,6 +309,7 @@ impl Build {
files: Vec::new(),
shared_flag: None,
static_flag: None,
dialect: Dialect::C,
cpp: false,
cpp_link_stdlib: None,
cpp_set_stdlib: None,
@ -483,6 +485,13 @@ impl Build {
/// Add a file which will be compiled
pub fn file<P: AsRef<Path>>(&mut self, p: P) -> &mut Build {
self.files.push(p.as_ref().to_path_buf());
match (self.dialect, autodetect_ext(p.as_ref())) {
(_, Dialect::C) => {}
(Dialect::C, Dialect::Cpp) |
(Dialect::Cpp, Dialect::Cpp) => { self.cpp(true); }
(Dialect::Cuda, Dialect::Cpp) => {}
(_, Dialect::Cuda) => { self.cuda(true); }
}
self
}
@ -502,6 +511,9 @@ impl Build {
/// `true`.
pub fn cpp(&mut self, cpp: bool) -> &mut Build {
self.cpp = cpp;
if cpp {
self.dialect = Dialect::Cpp;
}
self
}
@ -516,7 +528,8 @@ impl Build {
pub fn cuda(&mut self, cuda: bool) -> &mut Build {
self.cuda = cuda;
if cuda {
self.cpp(true);
self.dialect = Dialect::Cuda;
self.cpp = true;
}
self
}

Loading…
Cancel
Save