cmake_parser/doc/command/project/
enable_language.rs

1use ::cmake_parser_derive::CMake;
2
3use crate::{CommandScope, ToCommandScope, Token};
4
5/// Enable languages (CXX/C/OBJC/OBJCXX/Fortran/etc)
6///
7/// Reference: <https://cmake.org/cmake/help/v3.26/command/enable_language.html>
8#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
9#[cmake(pkg = "crate", default = "langs")]
10pub struct EnableLanguage<'t> {
11    #[cmake(rename = "")]
12    pub langs: Vec<Token<'t>>,
13    pub optional: bool,
14}
15
16impl<'t> ToCommandScope for EnableLanguage<'t> {
17    fn to_command_scope(&self) -> CommandScope {
18        CommandScope::Project
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25    use crate::doc::cmake_parse::tests::tokens;
26    use crate::*;
27
28    #[test]
29    fn enable_language() {
30        let src = include_bytes!("../../../../../fixture/commands/project/enable_language");
31        let cmakelists = parse_cmakelists(src).unwrap();
32        let doc = Doc::from(cmakelists);
33
34        assert_eq!(
35            doc.commands(),
36            Ok(vec![
37                Command::EnableLanguage(Box::new(EnableLanguage {
38                    langs: tokens([b"CUDA"]).to_vec(),
39                    optional: false,
40                })),
41                Command::EnableLanguage(Box::new(EnableLanguage {
42                    langs: tokens([b"CSharp", b"ASM_NASM",]).to_vec(),
43                    optional: true,
44                })),
45            ])
46        )
47    }
48}