I'm trying to work on 9.1, for work.  Of course, one of the first
things I tried to do was install various of my tools.

make(1) appears to be misbehaving.  But I'm not sure enough it isn't
PEBKAC to just file a PR.

Specifically, I run my "bootstrap the tools" script and everything goes
normally until it tries to build a particular program, at which point

make: Unclosed substitution for  (; missing)
make: Unclosed substitution for  (; missing)
make: "/home/mouse/..local/lib/make/local-prog" line 115: Need an operator
make: Unclosed substitution for  (; missing)
make: Unclosed substitution for  (; missing)
make: "/home/mouse/..local/lib/make/local-prog" line 121: Need an operator
make: Unclosed substitution for  (; missing)
make: "/home/mouse/..local/lib/make/local-prog" line 125: Need an operator
make: Fatal errors encountered -- cannot continue

There are exactly two spaces between "for" and "(" on the "Unclosed
substitution" lines (verified with hexdump -C).  The Makefile in
question is

CC_ADD = -g
BUILDBINS = ccwrapper
OBJ_ccwrapper = ccwrapper.o
INSTALLMAN = ccwrapper.1

.MAIN: ccwrapper ccwrapper.cat1

.include <local-prog>

and make is being run as...well, to let ktrace -t aceinsu tell it:

  3662      1 make     NAMI  "/usr/bin/make"
  3662      1 make     NAMI  "/usr/libexec/ld.elf_so"
  3662      1 make     ARG   "/usr/bin/make"
  3662      1 make     ARG   "-m"
  3662      1 make     ARG   "/home/mouse/..local/lib/make"
  3662      1 make     ARG   "-m"
  3662      1 make     ARG   "/usr/share/mk"

(local-prog is the only thing in /home/.mouse/..local/lib/make.)

The relevant part of local-prog is (line numbers added, of course - the
whole file is on ftp.rodents-montreal.org in
/pub/mouse/local/src/makefiles/makefiles-20230221/local-prog in case
anyone wants the whole thing):

   109  .PHONY: install_dirs_MAN
   110  .for x in $(INSTALLMAN)
   111  install_files:: $(x:C;^(.*)\.([0-9].*)$$;$(INSTMANDIR)/cat\2/\1.0;)
   112  install_dirs:: install_dirs_MAN
   113  $(x:C;^(.*)\.([0-9].*)$$;$(INSTMANDIR)/cat\2/\1.0;):            \
   114                  $(x:C;^.*\.([0-9].*)$$;$(INSTMANDIR)/cat\1;)    \
   115                  $(x:C;\.([0-9].*)$$;.cat\1;)
   116          cp $(x:C;\.([0-9].*)$$;.cat\1;) $(.TARGET)
   117  CLEANFILES_ += $(x:C;\.([0-9].*)$$;.cat\1;)
   118  .if !exists($(x:C;^.*\.([0-9].*)$$;$(INSTMANDIR)/cat\1;)) && \
   119      !target($(x:C;^.*\.([0-9].*)$$;$(INSTMANDIR)/cat\1;))
   120  install_dirs_MAN:: $(x:C;^.*\.([0-9].*)$$;$(INSTMANDIR)/cat\1;)
   121  $(x:C;^.*\.([0-9].*)$$;$(INSTMANDIR)/cat\1;):
   122          mkdir -p $(.TARGET)
   123  .endif
   124  .if !target($(x:C;\.([0-9].*)$$;.cat\1;))
   125  $(x:C;\.([0-9].*)$$;.cat\1;): $(x)
   126          nroff -mandoc $(.ALLSRC) > $(.TARGET) || (rm -f $(.TARGET); 
false)
   127  .endif
   128  .endfor

The same code works with 5.2's make (which, of course, says only
moderately little for its correctness...).

So, I'm wondering, is this a bug in 9.1's make, or am I doing something
wrong here?

/~\ The ASCII                             Mouse
\ / Ribbon Campaign
 X  Against HTML                mo...@rodents-montreal.org
/ \ Email!           7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B

Reply via email to