aboutsummaryrefslogtreecommitdiff
path: root/src/makefile
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2021-04-06 15:23:21 -0600
committerMelody Horn <melody@boringcactus.com>2021-04-06 15:23:21 -0600
commit64ba56eda176e22351331c76d78a7238c6e7189f (patch)
treed92acd788621543488efba1649e532b01052b9a7 /src/makefile
parentec5fbe5227edc53bb02ac0896ac62e9e21f8e92a (diff)
downloadmakers-64ba56eda176e22351331c76d78a7238c6e7189f.tar.gz
makers-64ba56eda176e22351331c76d78a7238c6e7189f.zip
handle else ifs correctly
Diffstat (limited to 'src/makefile')
-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 {