aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/makefile/command_line.rs31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/makefile/command_line.rs b/src/makefile/command_line.rs
index 45ac181..7d4915d 100644
--- a/src/makefile/command_line.rs
+++ b/src/makefile/command_line.rs
@@ -88,18 +88,27 @@ impl CommandLine {
});
log::trace!("executing {}", &self.execution_line);
let execution_line = file.expand_macros(&self.execution_line, Some(target))?;
- // unfortunately, if we had a multiline macro somewhere with non-escaped newlines, now we have to run each of them as separate lines
- lazy_static! {
- static ref UNESCAPED_NEWLINE: Regex = Regex::new(r"([^\\])\n").unwrap();
- }
- if UNESCAPED_NEWLINE.is_match(&execution_line) {
- let lines = UNESCAPED_NEWLINE
- .split(&execution_line)
- .map(|x| Self::from(TokenString::text(x.trim_start())));
- for line in lines {
- line.execute(file, target)?;
+ #[cfg(feature = "full")]
+ {
+ let is_just_one_macro_expansion = self.execution_line.tokens().count() == 1
+ && self.execution_line.tokens().all(|x| match x {
+ Token::MacroExpansion { .. } => true,
+ Token::FunctionCall { .. } => true,
+ _ => false,
+ });
+ // unfortunately, if we had a multiline macro somewhere with non-escaped newlines, now we have to run each of them as separate lines
+ lazy_static! {
+ static ref UNESCAPED_NEWLINE: Regex = Regex::new(r"([^\\])\n").unwrap();
+ }
+ if is_just_one_macro_expansion && UNESCAPED_NEWLINE.is_match(&execution_line) {
+ let lines = UNESCAPED_NEWLINE
+ .split(&execution_line)
+ .map(|x| Self::from(TokenString::text(x.trim_start())));
+ for line in lines {
+ line.execute(file, target)?;
+ }
+ return Ok(());
}
- return Ok(());
}
log::trace!("executing {}", &execution_line);
let mut self_ignore_errors = self.ignore_errors;