cmake_parser/doc/command/project/
link_directories.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    command::common::Append,
5    doc::command_scope::{CommandScope, ToCommandScope},
6    Token,
7};
8
9/// Add directories in which the linker will look for libraries.
10///
11/// Reference: <https://cmake.org/cmake/help/v3.26/command/link_directories.html>
12#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
13#[cmake(pkg = "crate", positional)]
14pub struct LinkDirectories<'t> {
15    pub append: Option<Append>,
16    pub dirs: Vec<Token<'t>>,
17}
18
19impl<'t> ToCommandScope for LinkDirectories<'t> {
20    fn to_command_scope(&self) -> CommandScope {
21        CommandScope::Project
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::doc::cmake_parse::tests::tokens_vec;
29    use crate::*;
30    use pretty_assertions::assert_eq;
31
32    #[test]
33    fn link_directories() {
34        let src = include_bytes!("../../../../../fixture/commands/project/link_directories");
35        let cmakelists = parse_cmakelists(src).unwrap();
36        let doc = Doc::from(cmakelists);
37        assert_eq!(
38            doc.commands(),
39            Ok(vec![
40                Command::LinkDirectories(Box::new(LinkDirectories {
41                    append: None,
42                    dirs: tokens_vec([b"include"])
43                })),
44                Command::LinkDirectories(Box::new(LinkDirectories {
45                    append: Some(Append::Before),
46                    dirs: tokens_vec([b"include1", b"include2"])
47                })),
48                Command::LinkDirectories(Box::new(LinkDirectories {
49                    append: Some(Append::After),
50                    dirs: tokens_vec([b"include1"])
51                })),
52            ])
53        )
54    }
55}