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::