diff options
Diffstat (limited to 'src/makefile')
| -rw-r--r-- | src/makefile/input.rs | 22 | 
1 files changed, 17 insertions, 5 deletions
| diff --git a/src/makefile/input.rs b/src/makefile/input.rs index 6860e80..e2bff65 100644 --- a/src/makefile/input.rs +++ b/src/makefile/input.rs @@ -166,6 +166,7 @@ pub struct MakefileReader<'a, 'parent, R: BufRead> {      pub inference_rules: Vec<InferenceRule>,      pub macros: MacroSet<'parent, 'static>,      pub targets: HashMap<String, Target>, +    built_in_targets: HashMap<String, Target>,      pub first_non_special_target: Option<String>,      pub failed_includes: Vec<String>,      args: &'a Args, @@ -221,6 +222,7 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> {              inference_rules: Vec::new(),              macros,              targets: HashMap::new(), +            built_in_targets: HashMap::new(),              first_non_special_target: None,              failed_includes: Vec::new(),              args, @@ -229,9 +231,9 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> {              #[cfg(feature = "full")]              conditional_stack: Vec::new(),          }; -        // TODO be smart about this instead +        // TODO be smart about this instead, please          if !args.no_builtin_rules { -            reader.targets.insert( +            reader.built_in_targets.insert(                  ".SUFFIXES".to_owned(),                  Target {                      name: ".SUFFIXES".into(), @@ -528,7 +530,11 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> {      }      fn special_target_has_prereq(&self, target: &str, name: &str, empty_counts: bool) -> bool { -        match self.targets.get(target) { +        match self +            .targets +            .get(target) +            .or_else(|| self.built_in_targets.get(target)) +        {              Some(target) => {                  (empty_counts && target.prerequisites.is_empty())                      || target.prerequisites.iter().any(|e| e == name) @@ -683,9 +689,14 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> {                  Some(inference)              } else {                  log::info!( -                    "looks like {:?} is not a suffix rule because .SUFFIXES is {:?}", +                    "{}:{}: looks like {:?} is not a suffix rule because .SUFFIXES is {:?}", +                    &self.file_name, +                    line_number,                      inference, -                    self.targets.get(".SUFFIXES").map(|x| &x.prerequisites) +                    self.targets +                        .get(".SUFFIXES") +                        .or_else(|| self.built_in_targets.get(".SUFFIXES")) +                        .map(|x| &x.prerequisites)                  );                  None              } @@ -713,6 +724,7 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> {                  if self.first_non_special_target.is_none() && !target.starts_with('.') {                      self.first_non_special_target = Some(target.into());                  } +                // TODO handle appending to built-in (it's Complicated)                  match self.targets.get_mut(target) {                      Some(old_target)                          if commands.is_empty() |