With this change, users who have their editor misconfigured when writing
Makefiles without using 8 spaces for one TAB character will also get a
friendly error message.

I used the following 3 test cases:

  echo -e "foo:\n  echo bar" > broken.make
  echo -e "foo:\n        echo bar" > broken.8.make
  echo -e "foo:\n--echo bar" > broken.else.make

Before this commit, running make on these files results in:

  $ make -f broken.make
  broken.make:2: *** missing separator.  Stop.

  $ make -f broken.8.make
  broken.8.make:2: *** missing separator (did you mean TAB instead of 8 
spaces?).  Stop.

  $ make -f broken.else.make
  broken.else.make:2: *** missing separator.  Stop.

After this commit, running make on these files results in:

  $ /tmp/make/make -f broken.make
  broken.make:2: *** missing separator (expected TAB, found SPACE).  Stop.

  $ /tmp/make/make -f broken.8.make
  broken.8.make:2: *** missing separator (did you mean TAB instead of 8 
spaces?).  Stop.

  $ /tmp/make/make -f broken.else.make
  broken.else.make:2: *** missing separator.  Stop.
---
 read.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/read.c b/read.c
index b870aa8..3c67e55 100644
--- a/read.c
+++ b/read.c
@@ -1122,6 +1122,8 @@ eval (struct ebuffer *ebuf, int set_default)
                one of the most common bugs found in makefiles...  */
             if (cmd_prefix == '\t' && strneq (line, "        ", 8))
               O (fatal, fstart, _("missing separator (did you mean TAB instead 
of 8 spaces?)"));
+            else if (cmd_prefix == '\t' && strneq (line, " ", 1))
+              O (fatal, fstart, _("missing separator (expected TAB, found 
SPACE)"));
             else
               O (fatal, fstart, _("missing separator"));
           }
-- 
2.9.3


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to