bsd.*.mk: Fix bug when SRCS is explicitly defined empty
authorJohn Marino <draco@marino.st>
Tue, 27 Jan 2015 22:20:44 +0000 (23:20 +0100)
committerJohn Marino <draco@marino.st>
Tue, 27 Jan 2015 22:20:44 +0000 (23:20 +0100)
There exists a valid possibility of setting a makefile to build a program
or library exclusively with OBJS defined.  In the case of bsd.prog.mk,
not defining SRCS will cause the definition of OBJS to be overwritten
with ${PROG}.c or ${PROG}.cc.  Defining SRCS as an empty list will stop
OBJS from being overwritten, but there's a bug.  It adds ".o" to the end
of the list.

For example:
======================
OBJS= first.o second.o
SRCS=
.include <bsd.prog.mk>
======================
make -V OBJS
first.o second.o .o

This is caused by a transformation assuming SRCS has at least one item
in the list.  It's fixed by only performing the transformation if SRCS
is not empty.  I'm adding this check to both bsd.prog.mk and bsd.lib.mk

share/mk/bsd.lib.mk
share/mk/bsd.prog.mk

index 6d8a94a..dd91280 100644 (file)
@@ -121,7 +121,9 @@ LDFLAGS+=   -Wl,--version-script=${VERSION_MAP}
 .include <bsd.patch.mk>
 
 .if defined(LIB) && !empty(LIB) || defined(SHLIB_NAME)
+. if !empty(SRCS)
 OBJS+=  ${SRCS:N*.h:N*.patch:R:S/$/.o/g}
+. endif
 .endif
 
 .if defined(LIB) && !empty(LIB)
index f6567bd..13ef1b8 100644 (file)
@@ -30,7 +30,9 @@ OBJCLIBS?= -lobjc
 LDADD+=        ${OBJCLIBS}
 .endif
 
+.if !empty(SRCS)
 OBJS+=  ${SRCS:N*.h:N*.patch:R:S/$/.o/g}
+.endif
 
 .if !target(${PROG})
 ${PROG}: ${OBJS}