cmake_parser/doc/command/deprecated/
install_programs.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    doc::command_scope::{CommandScope, ToCommandScope},
5    Token,
6};
7
8/// Specifies rules for installing programs for a project.
9///
10/// Reference: <https://cmake.org/cmake/help/v3.26/command/install_programs.html>
11#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cmake(pkg = "crate", untagged)]
13pub enum InstallPrograms<'t> {
14    RegEx(InstallProgramsRegEx<'t>),
15    Files(InstallProgramsFiles<'t>),
16    FilesAlt(InstallProgramsFilesAlt<'t>),
17}
18
19impl<'t> ToCommandScope for InstallPrograms<'t> {
20    fn to_command_scope(&self) -> CommandScope {
21        CommandScope::Deprecated
22    }
23}
24
25#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
26#[cmake(pkg = "crate")]
27pub struct InstallProgramsFiles<'t> {
28    #[cmake(positional)]
29    pub dir: Token<'t>,
30    pub files: Vec<Token<'t>>,
31}
32
33#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
34#[cmake(pkg = "crate", positional)]
35pub struct InstallProgramsFilesAlt<'t> {
36    pub dir: Token<'t>,
37    pub files: Vec<Token<'t>>,
38}
39
40#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
41#[cmake(pkg = "crate", positional, complete)]
42pub struct InstallProgramsRegEx<'t> {
43    pub dir: Token<'t>,
44    pub regex: Token<'t>,
45}
46
47#[cfg(test)]
48mod tests {
49    use super::*;
50    use crate::doc::cmake_parse::tests::{token, tokens_vec};
51    use crate::*;
52    use pretty_assertions::assert_eq;
53
54    #[test]
55    fn install_programs() {
56        let src = include_bytes!("../../../../../fixture/commands/deprecated/install_programs");
57        let cmakelists = parse_cmakelists(src).unwrap();
58        let doc = Doc::from(cmakelists);
59        assert_eq!(
60            doc.commands(),
61            Ok(vec![
62                Command::InstallPrograms(Box::new(InstallPrograms::Files(InstallProgramsFiles {
63                    dir: token(b"dir1"),
64                    files: tokens_vec([b"file1", b"file2"]),
65                }))),
66                Command::InstallPrograms(Box::new(InstallPrograms::RegEx(InstallProgramsRegEx {
67                    dir: token(b"dir1"),
68                    regex: token(b"regex1"),
69                }))),
70                Command::InstallPrograms(Box::new(InstallPrograms::FilesAlt(
71                    InstallProgramsFilesAlt {
72                        dir: token(b"dir1"),
73                        files: tokens_vec([b"file1", b"file2"]),
74                    }
75                ))),
76            ])
77        )
78    }
79}