[gnu.utils.bug] Bug in handling of double colon rules

phiggins@ORION.CF.UCI.EDU (Paul Higgins) (05/09/89)

Version 3.48 of Make doesn't handle double colon rules correctly in
some cases.  This simple Makefile produces the correct results with
Make 3.48:

   test::	/bin/true
	   echo "hello 1"

   clean:: 
	   rm myprog

   test::  /bin/echo
	   echo "hello 2"

When I'm using Make version 3.48 to install X11, however, it seems to
only notice the first double colon rule.  In the following Makefile,
incorrect results occur for the targets "relink", "install" and
"clean".

I've tried Make 3.48 on a Sun 3 running SunOS 4.0.1, a Sun 4 running
SunOS 4.0.1, and a Sequent Symmetry S81 running Dynix 3.0.12, each time
comparing Make version 3.48 to the vendor's /bin/make.

By the way, the Makefiles used in generating and installing X11 are full
of double colon rules.

Using the "-p" option when executing Make 3.48 shows that only one of 
each of the double colon rules appears in the data base.

BOOTSTRAPCFLAGS =
        INSTALL = install
           TAGS = ctags
             RM = rm -f
             MV = mv
           MAKE = make
    STD_DEFINES =
CC = gcc
        DESTDIR =
         BINDIR = $(DESTDIR)/usr/bin/X11
        MANPATH = $(DESTDIR)/usr/man
  MANSOURCEPATH = $(MANPATH)/man
         MANDIR = $(MANSOURCEPATH)d
   INSTMANFLAGS = -m 0444
    CDEBUGFLAGS = -O -traditional -finline-functions -fstrength-reduce \
                   -msoft-float -DPURDUE -DUCI
         DEPEND = $(DEPENDSRC)/makedepend
          IMAKE = $(IMAKESRC)/imake
         CFLAGS = $(CDEBUGFLAGS) $(INCLUDES) $(STD_DEFINES) $(DEFINES)
        LDFLAGS = $(CDEBUGFLAGS) $(SYS_LIBRARIES) $(SYSAUX_LIBRARIES)
            TOP = /usr/cfp/sun3-40/X11
        UTILSRC = $(TOP)/util
      DEPENDSRC = $(UTILSRC)/makedepend
       IMAKESRC = $(UTILSRC)/imake
       IRULESRC = $(UTILSRC)/imake.includes
           XLIB = /usr/lib/libX11.a
         XMULIB = /usr/lib/libXmu.a
      MACROFILE = Sun.macros
  IMAKE_DEFINES =
      IMAKE_CMD = $(NEWTOP)$(IMAKE) -TImake.tmpl -I$(NEWTOP)$(IRULESRC) \
			-s Makefile $(IMAKE_DEFINES)
         RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a \
			.emacs_* tags TAGS make.log MakeOut
          SRCS1 = bitmap.c dialog.c
          OBJS1 = bitmap.o dialog.o
          SRCS2 = bmtoa.c
          OBJS2 = bmtoa.o
          SRCS3 = atobm.c
          OBJS3 = atobm.o
       PROGRAMS = bitmap bmtoa atobm
 OBJS = $(OBJS1) $(OBJS2) $(OBJS3)
 SRCS = $(SRCS1) $(SRCS2) $(SRCS3)
all:: $(PROGRAMS)
bitmap: $(OBJS1) $(XMULIB) $(XLIB)
	$(RM) $@
	$(CC) -o $@ $(OBJS1) $(XMULIB) $(XLIB) $(LDFLAGS) -lm $(SYSLAST_LIBRARIES)
install:: bitmap
	$(INSTALL) -c $(INSTALLFLAGS) bitmap $(BINDIR)
install.man:: bitmap.man
	$(INSTALL) -c $(INSTMANFLAGS) bitmap.man $(MANDIR)/bitmap.d
relink::
	$(RM) $(PROGRAMS)
	$(MAKE) $(MFLAGS) $(PROGRAMS)
depend:: $(DEPEND)
depend::
	$(DEPEND) -s "# DO NOT DELETE" -- $(CFLAGS) -- $(SRCS)
$(DEPEND):
	@echo "making $@"; \
	cd $(DEPENDSRC); $(MAKE)
clean::
	$(RM) $(PROGRAMS)
bmtoa: $(OBJS2) $(XMULIB)
	$(RM) $@
	$(CC) -o $@ $(OBJS2) $(XMULIB) $(LDFLAGS)  $(SYSLAST_LIBRARIES)
relink::
	$(RM) bmtoa
	$(MAKE) $(MFLAGS) bmtoa
clean::
	$(RM) bmtoa
atobm: $(OBJS3)
	$(RM) $@
	$(CC) -o $@ $(OBJS3)  $(LDFLAGS)  $(SYSLAST_LIBRARIES)
relink::
	$(RM) atobm
	$(MAKE) $(MFLAGS) atobm
clean::
	$(RM) atobm
install:: bmtoa
	$(INSTALL) -c  bmtoa $(BINDIR)
install:: atobm
	$(INSTALL) -c  atobm $(BINDIR)
emptyrule::
clean::
	$(RM_CMD) \#*
Makefile:: $(IMAKE)
Makefile:: Imakefile \
	$(IRULESRC)/Imake.tmpl \
	$(IRULESRC)/Imake.rules \
	$(IRULESRC)/site.def \
	$(IRULESRC)/$(MACROFILE)
	-@if [ -f Makefile ]; then \
	echo "$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
	$(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
	else exit 0; fi
	$(IMAKE_CMD) -DTOPDIR=$(TOP)
$(IMAKE):
	@echo "making $@"; \
	cd $(IMAKESRC); $(MAKE) BOOTSTRAPCFLAGS=$(BOOTSTRAPCFLAGS)
tags::
	$(TAGS) -w *.[ch]
	$(TAGS) -xw *.[ch] > TAGS
install::
	@echo "install done"
install.man::
	@echo "install.man done"
Makefiles::