cmake_parser/doc/command/project/
set_target_properties.rs

1use cmake_parser_derive::CMake;
2
3use crate::{
4    command::common::Property,
5    doc::command_scope::{CommandScope, ToCommandScope},
6    Token,
7};
8
9/// Sets properties on targets.
10///
11/// Reference: <https://cmake.org/cmake/help/v3.26/command/set_target_properties.html>
12#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
13#[cmake(pkg = "crate", default = "targets")]
14pub struct SetTargetProperties<'t> {
15    #[cmake(rename = "")]
16    pub targets: Vec<Token<'t>>,
17    pub properties: Vec<Property<'t>>,
18}
19
20impl<'t> ToCommandScope for SetTargetProperties<'t> {
21    fn to_command_scope(&self) -> CommandScope {
22        CommandScope::Project
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    use crate::doc::cmake_parse::tests::{token, tokens_vec};
30    use crate::*;
31    use pretty_assertions::assert_eq;
32
33    #[test]
34    fn set_target_properties() {
35        let src = include_bytes!("../../../../../fixture/commands/project/set_target_properties");
36        let cmakelists = parse_cmakelists(src).unwrap();
37        let doc = Doc::from(cmakelists);
38        assert_eq!(
39            doc.commands(),
40            Ok(vec![Command::SetTargetProperties(Box::new(
41                SetTargetProperties {
42                    targets: tokens_vec([b"_python"]),
43                    properties: vec![Property {
44                        prop: token(b"OUTPUT_NAME"),
45                        value: token(b"${PROJECT_NAME}"),
46                    }]
47                }
48            )),])
49        )
50    }
51}