cmake_parser/doc/command/scripting/
execute_process.rs1use cmake_parser_derive::CMake;
2
3use crate::{
4 command::common::CustomCommand,
5 doc::command_scope::{CommandScope, ToCommandScope},
6 Token,
7};
8
9#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
13#[cmake(pkg = "crate")]
14pub struct ExecuteProcess<'t> {
15 #[cmake(rename = "COMMAND")]
16 pub commands: Vec<CustomCommand<'t>>,
17 pub working_directory: Option<Token<'t>>,
18 pub timeout: Option<Token<'t>>,
19 pub result_variable: Option<Token<'t>>,
20 pub results_variable: Option<Token<'t>>,
21 pub output_variable: Option<Token<'t>>,
22 pub error_variable: Option<Token<'t>>,
23 pub input_file: Option<Token<'t>>,
24 pub output_file: Option<Token<'t>>,
25 pub error_file: Option<Token<'t>>,
26 pub output_quiet: bool,
27 pub error_quiet: bool,
28 pub command_echo: Option<Token<'t>>,
29 pub output_strip_trailing_whitespace: bool,
30 pub error_strip_trailing_whitespace: bool,
31 pub encoding: Option<WindowsEncoding>,
32 pub echo_output_variable: bool,
33 pub echo_error_variable: bool,
34 pub command_error_is_fatal: Option<ErrorFatal>,
35}
36
37impl<'t> ToCommandScope for ExecuteProcess<'t> {
38 fn to_command_scope(&self) -> CommandScope {
39 CommandScope::Scripting
40 }
41}
42
43#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
44#[cmake(pkg = "crate", list)]
45pub enum ErrorFatal {
46 Any,
47 Last,
48}
49
50#[derive(CMake, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
51#[cmake(pkg = "crate", list)]
52pub enum WindowsEncoding {
53 None,
54 Auto,
55 Ansi,
56 Oem,
57 #[cmake(rename = ["UTF8", "UTF-8"])]
58 Utf8,
59}
60
61#[cfg(test)]
62mod tests {
63 use super::*;
64 use crate::doc::cmake_parse::tests::{token, tokens_vec};
65 use crate::*;
66 use pretty_assertions::assert_eq;
67
68 #[test]
69 fn execute_process() {
70 let src = include_bytes!("../../../../../fixture/commands/scripting/execute_process");
71 let cmakelists = parse_cmakelists(src).unwrap();
72 let doc = Doc::from(cmakelists);
73 assert_eq!(
74 doc.commands(),
75 Ok(vec![
76 Command::ExecuteProcess(Box::new(ExecuteProcess {
77 commands: vec![CustomCommand {
78 name: token(b"cmd1"),
79 args: Some(tokens_vec([b"arg1", b"arg2"])),
80 }],
81 ..Default::default()
82 })),
83 Command::ExecuteProcess(Box::new(ExecuteProcess {
84 commands: vec![CustomCommand {
85 name: token(b"cmd1"),
86 args: None,
87 }],
88 encoding: Some(WindowsEncoding::None),
89 ..Default::default()
90 })),
91 Command::ExecuteProcess(Box::new(ExecuteProcess {
92 commands: vec![CustomCommand {
93 name: token(b"cmd1"),
94 args: None,
95 }],
96 encoding: Some(WindowsEncoding::Auto),
97 ..Default::default()
98 })),
99 Command::ExecuteProcess(Box::new(ExecuteProcess {
100 commands: vec![CustomCommand {
101 name: token(b"cmd1"),
102 args: None,
103 }],
104 encoding: Some(WindowsEncoding::Ansi),
105 ..Default::default()
106 })),
107 Command::ExecuteProcess(Box::new(ExecuteProcess {
108 commands: vec![CustomCommand {
109 name: token(b"cmd1"),
110 args: None,
111 }],
112 encoding: Some(WindowsEncoding::Oem),
113 ..Default::default()
114 })),
115 Command::ExecuteProcess(Box::new(ExecuteProcess {
116 commands: vec![CustomCommand {
117 name: token(b"cmd1"),
118 args: None,
119 }],
120 encoding: Some(WindowsEncoding::Utf8),
121 ..Default::default()
122 })),
123 Command::ExecuteProcess(Box::new(ExecuteProcess {
124 commands: vec![CustomCommand {
125 name: token(b"cmd1"),
126 args: None,
127 }],
128 encoding: Some(WindowsEncoding::Utf8),
129 ..Default::default()
130 })),
131 Command::ExecuteProcess(Box::new(ExecuteProcess {
132 commands: vec![CustomCommand {
133 name: token(b"cmd1"),
134 args: None,
135 }],
136 command_error_is_fatal: Some(ErrorFatal::Any),
137 ..Default::default()
138 })),
139 Command::ExecuteProcess(Box::new(ExecuteProcess {
140 commands: vec![CustomCommand {
141 name: token(b"cmd1"),
142 args: None,
143 }],
144 command_error_is_fatal: Some(ErrorFatal::Last),
145 ..Default::default()
146 })),
147 Command::ExecuteProcess(Box::new(ExecuteProcess {
148 commands: vec![
149 CustomCommand {
150 name: token(b"cmd1"),
151 args: Some(tokens_vec([b"arg1", b"arg2"])),
152 },
153 CustomCommand {
154 name: token(b"cmd2"),
155 args: None,
156 }
157 ],
158 working_directory: Some(token(b"working_directory1")),
159 timeout: Some(token(b"timeout1")),
160 result_variable: Some(token(b"result_variable1")),
161 results_variable: Some(token(b"results_variable1")),
162 output_variable: Some(token(b"output_variable1")),
163 error_variable: Some(token(b"error_variable1")),
164 input_file: Some(token(b"input_file1")),
165 output_file: Some(token(b"output_file1")),
166 error_file: Some(token(b"error_file1")),
167 output_quiet: true,
168 error_quiet: true,
169 command_echo: Some(token(b"command_echo1")),
170 output_strip_trailing_whitespace: true,
171 error_strip_trailing_whitespace: true,
172 encoding: Some(WindowsEncoding::Utf8),
173 echo_output_variable: true,
174 echo_error_variable: true,
175 command_error_is_fatal: Some(ErrorFatal::Any),
176 })),
177 ])
178 )
179 }
180}