diff options
| author | Melody Horn <melody@boringcactus.com> | 2021-03-25 20:01:56 -0600 | 
|---|---|---|
| committer | Melody Horn <melody@boringcactus.com> | 2021-03-25 20:01:56 -0600 | 
| commit | b387cba85947db7101726a9f743f272d6dcea269 (patch) | |
| tree | 460e84de2cce2bba96ec6bae9953cf26f5620621 | |
| parent | 31aafd958390d3325206c2b9043a380acb49e00d (diff) | |
| download | yapymake-b387cba85947db7101726a9f743f272d6dcea269.tar.gz yapymake-b387cba85947db7101726a9f743f272d6dcea269.zip  | |
allow (but lint for) inferring commands on explicit targets
| -rw-r--r-- | yapymake/makefile/__init__.py | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/yapymake/makefile/__init__.py b/yapymake/makefile/__init__.py index 0290e9f..4617047 100644 --- a/yapymake/makefile/__init__.py +++ b/yapymake/makefile/__init__.py @@ -254,7 +254,9 @@ class Makefile:      def target(self, name: str) -> 'Target':          # TODO implement .DEFAULT -        if name not in self._targets: +        # it's not POSIXful, but GNU make will use inference rules for defined targets with no commands, +        follow_gnu = True # TODO implement .POSIX and scope it properly +        if name not in self._targets or (follow_gnu and len(self._targets[name].commands) == 0):              # > When no target rule is found to update a target, the inference rules shall be checked. The suffix of              # > the target (.s1) to be built...              suffix = PurePath(name).suffix @@ -269,6 +271,10 @@ class Makefile:                          # > whose prerequisite file ($*.s2) exists.                          prerequisite_path = PurePath(name).with_suffix(rule.s2)                          if ImpurePath(prerequisite_path).exists(): +                            if name in self._targets: +                                # we got here by following GNU +                                print('warning: non-POSIX use of inference rule', f'{rule.s1}{rule.s2}', +                                      'on explicit target', name)                              self._targets[name] = Target(name, [str(prerequisite_path)], rule.commands)                              break          if name not in self._targets:  |