aboutsummaryrefslogtreecommitdiff
path: root/src/makefile/command_line.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/makefile/command_line.rs')
-rw-r--r--src/makefile/command_line.rs63
1 files changed, 11 insertions, 52 deletions
diff --git a/src/makefile/command_line.rs b/src/makefile/command_line.rs
index c993a10..52693e0 100644
--- a/src/makefile/command_line.rs
+++ b/src/makefile/command_line.rs
@@ -42,44 +42,12 @@ fn execute_command_line(
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct CommandLine {
- /// If the command prefix contains a <hyphen-minus>, or the -i option is present, or
- /// the special target .IGNORE has either the current target as a prerequisite or has
- /// no prerequisites, any error found while executing the command shall be ignored.
- ignore_errors: bool,
- /// If the command prefix contains an at-sign and the make utility command line -n
- /// option is not specified, or the -s option is present, or the special target
- /// .SILENT has either the current target as a prerequisite or has no prerequisites,
- /// the command shall not be written to standard output before it is executed.
- silent: bool,
- /// If the command prefix contains a <plus-sign>, this indicates a makefile command
- /// line that shall be executed even if -n, -q, or -t is specified.
- always_execute: bool,
execution_line: TokenString,
}
impl CommandLine {
- pub fn from(mut line: TokenString) -> Self {
- let mut ignore_errors = false;
- let mut silent = false;
- let mut always_execute = false;
-
- if let Token::Text(text) = line.first_token_mut() {
- let mut text_chars = text.chars().peekable();
- while let Some(x) = text_chars.next_if(|x| matches!(x, '-' | '@' | '+')) {
- match x {
- '-' => ignore_errors = true,
- '@' => silent = true,
- '+' => always_execute = true,
- _ => unreachable!(),
- }
- }
- *text = text_chars.collect();
- }
-
+ pub fn from(line: TokenString) -> Self {
Self {
- ignore_errors,
- silent,
- always_execute,
execution_line: line,
}
}
@@ -113,28 +81,28 @@ impl CommandLine {
}
}
log::trace!("executing {}", &execution_line);
- let mut self_ignore_errors = self.ignore_errors;
- let mut self_silent = self.silent;
- let mut self_always_execute = self.always_execute;
+ let mut ignore_errors = false;
+ let mut silent = false;
+ let mut always_execute = false;
- // apparently some makefiles will just throw this shit in in macros? bruh moment tbh
+ // sometimes this is defined in macros rather than statically
let execution_line: String = {
let mut line_chars = execution_line.chars().peekable();
while let Some(x) = line_chars.next_if(|x| matches!(x, '-' | '@' | '+')) {
match x {
- '-' => self_ignore_errors = true,
- '@' => self_silent = true,
- '+' => self_always_execute = true,
+ '-' => ignore_errors = true,
+ '@' => silent = true,
+ '+' => always_execute = true,
_ => unreachable!(),
}
}
line_chars.collect()
};
- let ignore_error = self_ignore_errors
+ let ignore_error = ignore_errors
|| file.args.ignore_errors
|| file.special_target_has_prereq(".IGNORE", &target.name);
- let silent = (self_silent && !file.args.dry_run)
+ let silent = (silent && !file.args.dry_run)
|| file.args.silent
|| file.special_target_has_prereq(".SILENT", &target.name);
@@ -142,7 +110,7 @@ impl CommandLine {
println!("{}", execution_line);
}
- let should_execute = self_always_execute
+ let should_execute = always_execute
|| is_recursive
|| !(file.args.dry_run || file.args.question || file.args.touch);
if !should_execute {
@@ -169,15 +137,6 @@ impl CommandLine {
impl fmt::Display for CommandLine {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- if self.ignore_errors {
- write!(f, "-")?;
- }
- if self.silent {
- write!(f, "@")?;
- }
- if self.always_execute {
- write!(f, "+")?;
- }
let execution_line = format!("{}", &self.execution_line);
let execution_line = execution_line.replace("\n", "↵\n");
write!(f, "{}", execution_line)?;