diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/makefile/command_line.rs | 31 |
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; |