aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/makefile/conditional.rs5
-rw-r--r--src/makefile/input.rs19
2 files changed, 23 insertions, 1 deletions
diff --git a/src/makefile/conditional.rs b/src/makefile/conditional.rs
index 989dfc9..95cab9e 100644
--- a/src/makefile/conditional.rs
+++ b/src/makefile/conditional.rs
@@ -168,7 +168,10 @@ impl Line {
StateAction::Replace(State::SkippingUntilEndIf)
}
Some(State::SkippingUntilElseOrEndIf) => {
- inner_condition.action(current_state, is_macro_defined, expand_macro)?
+ match inner_condition.action(current_state, is_macro_defined, expand_macro)? {
+ StateAction::Push(x) => StateAction::Replace(x),
+ x => x,
+ }
}
None => bail!("got an ElseIf but not in a conditional"),
},
diff --git a/src/makefile/input.rs b/src/makefile/input.rs
index 700bf4b..601a159 100644
--- a/src/makefile/input.rs
+++ b/src/makefile/input.rs
@@ -766,6 +766,25 @@ endef
Ok(())
}
+ #[cfg(feature = "full")]
+ #[test]
+ fn elseif() -> R {
+ let file = "
+ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
+ KBUILD_CFLAGS += -O2
+else ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3
+ KBUILD_CFLAGS += -O3
+else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
+ KBUILD_CFLAGS += -Os
+endif
+FOO = bar
+";
+ let args = Args::empty();
+ let makefile = MakefileReader::read(&args, MacroSet::new(), Cursor::new(file))?;
+ assert_eq!(makefile.expand_macros(&TokenString::r#macro("FOO"))?, "bar",);
+ Ok(())
+ }
+
#[test]
#[cfg(feature = "full")]
fn eval() -> R {