c175365cec
but committing it helps to get everyone on the same page and makes sure we make progress. Tinderbox breakages that are the result of this commit are entirely the committer's fault -- in other words: buildworld testing on amd64 only. Credits follow: Submitted by: Garrett Cooper <yanegomi@gmail.com> Sponsored by: Isilon Systems Based on work by: keramida@ Thanks to: gnn@, mdf@, mlaier@, sjg@ Special thanks to: keramida@
351 lines
7.2 KiB
Makefile
351 lines
7.2 KiB
Makefile
# from: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
|
|
# $FreeBSD$
|
|
|
|
.include <bsd.init.mk>
|
|
|
|
.SUFFIXES: .out .o .c .cc .cpp .cxx .C .m .y .l .ln .s .S .asm
|
|
|
|
.if ${MK_MAN} == "no"
|
|
NO_MAN=
|
|
.endif
|
|
|
|
# Legacy knobs
|
|
.if defined(PROG) || defined(PROG_CXX)
|
|
. if defined(PROG)
|
|
PROGS= ${PROG}
|
|
. endif
|
|
. if defined(PROG_CXX)
|
|
PROGS= ${PROG_CXX}
|
|
PROGS_CXX= ${PROG_CXX}
|
|
. endif
|
|
# Loop once to keep pattern and avoid namespace pollution
|
|
. for _P in ${PROGS}
|
|
. if defined(INTERNALPROG)
|
|
INTERNALPROG.${_P}=
|
|
. endif
|
|
. if !defined(NO_MAN)
|
|
. if defined(MAN)
|
|
MAN.${_P}= ${MAN}
|
|
. else
|
|
. for sect in 1 1aout 2 3 4 5 6 7 8 9
|
|
. if defined(MAN${sect})
|
|
MAN.${_P}= ${MAN${sect}}
|
|
. endif
|
|
. endfor
|
|
. endif
|
|
. endif # defined(NO_MAN)
|
|
. if defined(NLSNAME) && !empty(NLSNAME)
|
|
NLSNAME.${P}:= ${NLSNAME}
|
|
. endif
|
|
. if defined(OBJS)
|
|
OBJS.${_P}:= ${OBJS}
|
|
. endif
|
|
. if defined(PRECIOUSPROG)
|
|
PRECIOUSPROG.${_P}=
|
|
. endif
|
|
. if defined(PROGNAME)
|
|
PROGNAME.${_P}= ${PROGNAME}
|
|
. endif
|
|
. if defined(SRCS)
|
|
SRCS.${_P}:= ${SRCS}
|
|
. endif
|
|
. endfor
|
|
.else # !defined(PROG) && !defined(PROG_CXX)
|
|
. if defined(PROGS_CXX) && !empty(PROGS_CXX)
|
|
PROGS+= ${PROGS_CXX}
|
|
. endif
|
|
.endif # defined(PROG) || defined(PROG_CXX)
|
|
|
|
.if defined(PROGS_CXX) && !empty(PROGS_CXX)
|
|
. for _P in ${PROGS_CXX}
|
|
PROG_CXX.${_P}=
|
|
. endfor
|
|
.endif
|
|
|
|
# Avoid recursive variables
|
|
.undef NLSNAME
|
|
|
|
.if defined(COPTS)
|
|
CFLAGS+=${COPTS}
|
|
.endif
|
|
|
|
.if defined(DEBUG_FLAGS)
|
|
. if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != ""
|
|
CTFFLAGS+= -g
|
|
. endif
|
|
CFLAGS+=${DEBUG_FLAGS}
|
|
CXXFLAGS+=${DEBUG_FLAGS}
|
|
.endif
|
|
|
|
STRIP?= -s
|
|
|
|
.if ${MK_ASSERT_DEBUG} == "no"
|
|
CFLAGS+= -DNDEBUG
|
|
NO_WERROR=
|
|
.endif
|
|
|
|
.for _P in ${PROGS}
|
|
|
|
BINDIR.${_P}?= ${BINDIR}
|
|
BINGRP.${_P}?= ${BINGRP}
|
|
BINMODE.${_P}?= ${BINMODE}
|
|
BINOWN.${_P}?= ${BINOWN}
|
|
|
|
CFLAGS.${_P}+= ${CFLAGS}
|
|
CXXFLAGS.${_P}+= ${CXXFLAGS}
|
|
DPADD.${_P}+= ${DPADD}
|
|
LDADD.${_P}+= ${LDADD}
|
|
LDFLAGS.${_P}+= ${LDFLAGS}
|
|
|
|
INSTALLFLAGS.${_P}?= ${INSTALLFLAGS}
|
|
|
|
. if defined(PRECIOUSPROG.${_P})
|
|
. if !defined(NO_FSCHG) && !defined(NO_FSCHG.${_P})
|
|
INSTALLFLAGS.${_P}+= -fschg
|
|
. endif
|
|
INSTALLFLAGS.${_P}+= -S
|
|
. endif
|
|
|
|
NO_SHARED.${_P}?= ${NO_SHARED}
|
|
|
|
. if !defined(NLSDIR.${_P})
|
|
NLSDIR.${_P}:= ${NLSDIR}
|
|
. endif
|
|
. undef NLSDIR
|
|
|
|
. if !empty(NO_SHARED.${_P}) && ${NO_SHARED.${_P}:tl} != "no"
|
|
LDFLAGS.${_P}+= -static
|
|
. endif
|
|
|
|
. if defined(SRCS.${_P})
|
|
|
|
_SRCS:= ${SRCS.${_P}}
|
|
OBJS.${_P}+= ${_SRCS:N*.h:R:S/$/.o/g}
|
|
|
|
. if target(beforelinking)
|
|
${_P}: ${OBJS.${_P}} beforelinking
|
|
. else
|
|
${_P}: ${OBJS.${_P}}
|
|
. endif
|
|
. if defined(PROG_CXX.${_P})
|
|
${CXX} ${CXXFLAGS.${_P}} ${LDFLAGS.${_P}} -o ${.TARGET} ${OBJS.${_P}} \
|
|
${LDADD.${_P}}
|
|
. else
|
|
${CC} ${CFLAGS.${_P}} ${LDFLAGS.${_P}} -o ${.TARGET} ${OBJS.${_P}} \
|
|
${LDADD.${_P}}
|
|
. endif
|
|
. if ${MK_CTF} != "no"
|
|
${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS.${_P}}
|
|
. endif
|
|
|
|
. else # !defined(SRCS.${_P})
|
|
|
|
. if !target(${_P})
|
|
. if defined(PROG_CXX.${_P})
|
|
SRCS.${_P}?= ${_P}.cc
|
|
. else
|
|
SRCS.${_P}?= ${_P}.c
|
|
. endif
|
|
|
|
# Always make an intermediate object file because:
|
|
# - it saves time rebuilding when only the library has changed
|
|
# - the name of the object gets put into the executable symbol table instead of
|
|
# the name of a variable temporary object.
|
|
# - it's useful to keep objects around for crunching.
|
|
OBJS.${_P}:= ${_P}.o
|
|
|
|
. if target(beforelinking)
|
|
${_P}: ${OBJS.${_P}} beforelinking
|
|
. else
|
|
${_P}: ${OBJS.${_P}}
|
|
. endif # target(beforelinking)
|
|
. if defined(PROG_CXX.${_P})
|
|
${CXX} ${CXXFLAGS.${_P}} ${LDFLAGS.${_P}} -o ${.TARGET} ${OBJS.${_P}} \
|
|
${LDADD.${_P}}
|
|
. else
|
|
${CC} ${CFLAGS.${_P}} ${LDFLAGS.${_P}} -o ${.TARGET} ${OBJS.${_P}} \
|
|
${LDADD.${_P}}
|
|
. endif
|
|
. if ${MK_CTF} != "no"
|
|
${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS.${_P}}
|
|
. endif
|
|
|
|
. endif # !target(${_P})
|
|
|
|
. endif # defined(SRCS.${_P})
|
|
|
|
CLEANFILES+= ${OBJS.${_P}}
|
|
|
|
.endfor # for _P in ${PROGS}
|
|
|
|
all: objwarn ${PROGS} ${SCRIPTS}
|
|
|
|
.if !defined(NO_MAN)
|
|
. for _P in ${PROGS}
|
|
MAN.${_P}?= ${_P}.1
|
|
MAN:= ${MAN.${_P}}
|
|
. include <bsd.man.mk>
|
|
. endfor
|
|
. if target(_manpages) # bsd.man.mk was included
|
|
all: _manpages
|
|
. endif
|
|
.endif
|
|
|
|
CLEANFILES+= ${PROGS}
|
|
|
|
.include <bsd.libnames.mk>
|
|
|
|
_EXTRADEPEND:
|
|
.for _P in ${PROGS}
|
|
. if !empty(LDFLAGS.${P}:M-nostdlib)
|
|
. if !empty(DPADD.${_P})
|
|
echo ${_P}: ${DPADD.${_P}} >> ${DEPENDFILE}
|
|
. endif
|
|
. else
|
|
echo ${_P}: ${LIBC} ${DPADD.${_P}} >> ${DEPENDFILE}
|
|
. if defined(PROG_CXX.${_P})
|
|
. if !empty(CXXFLAGS.${P}:M-stdlib=libc++)
|
|
echo ${_P}: ${LIBCPLUSPLUS} >> ${DEPENDFILE}
|
|
. else
|
|
echo ${_P}: ${LIBSTDCPLUSPLUS} >> ${DEPENDFILE}
|
|
. endif
|
|
. endif
|
|
. endif
|
|
.endfor
|
|
|
|
.if !target(install)
|
|
|
|
. if !target(realinstall)
|
|
|
|
. for _P in ${PROGS}
|
|
|
|
. if !defined(INTERNALPROG.${_P})
|
|
|
|
.ORDER: beforeinstall _proginstall.${_P}
|
|
_proginstall.${_P}:
|
|
. if defined(PROGNAME.${_P})
|
|
${INSTALL} ${STRIP} -o ${BINOWN.${_P}} -g ${BINGRP.${_P}} \
|
|
-m ${BINMODE.${_P}} ${INSTALLFLAGS.${_P}} ${_P} \
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}
|
|
. else
|
|
${INSTALL} ${STRIP} -o ${BINOWN.${_P}} -g ${BINGRP.${_P}} \
|
|
-m ${BINMODE.${_P}} ${INSTALLFLAGS.${_P}} ${_P} \
|
|
${DESTDIR}${BINDIR.${_P}}
|
|
. endif
|
|
|
|
realinstall: _proginstall.${_P}
|
|
|
|
. endif # !defined(INTERNALPROG.${_P})
|
|
|
|
. endfor # for _P in ${PROGS}
|
|
|
|
. endif # !target(realinstall)
|
|
|
|
. if defined(SCRIPTS) && !empty(SCRIPTS)
|
|
SCRIPTSDIR?= ${BINDIR}
|
|
SCRIPTSOWN?= ${BINOWN}
|
|
SCRIPTSGRP?= ${BINGRP}
|
|
SCRIPTSMODE?= ${BINMODE}
|
|
|
|
. for S in ${SCRIPTS}
|
|
|
|
realinstall: scriptsinstall
|
|
.ORDER: beforeinstall scriptsinstall
|
|
|
|
. if defined(SCRIPTSNAME)
|
|
SCRIPTSNAME_${S}?= ${SCRIPTSNAME}
|
|
. else
|
|
SCRIPTSNAME_${S}?= ${S:T:R}
|
|
. endif
|
|
|
|
SCRIPTSDIR_${S}?= ${SCRIPTSDIR}
|
|
SCRIPTSOWN_${S}?= ${SCRIPTSOWN}
|
|
SCRIPTSGRP_${S}?= ${SCRIPTSGRP}
|
|
SCRIPTSMODE_${S}?= ${SCRIPTSMODE}
|
|
|
|
scriptsinstall: ${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}
|
|
|
|
${DESTDIR}${SCRIPTSDIR_${S}}/${SCRIPTSNAME_${S}}: ${S}
|
|
${INSTALL} -o ${SCRIPTSOWN_${S}} \
|
|
-g ${SCRIPTSGRP_${S}} \
|
|
-m ${SCRIPTSMODE_${S}} \
|
|
${.ALLSRC} \
|
|
${.TARGET}
|
|
|
|
. endfor # for S in ${SCRIPTS}
|
|
|
|
. endif # defined(SCRIPTS) && !empty(SCRIPTS)
|
|
|
|
.endif # !target(install)
|
|
|
|
.if !defined(NO_MAN)
|
|
. if target(_manpages) # bsd.man.mk was included
|
|
realinstall: _maninstall
|
|
. endif
|
|
.endif
|
|
|
|
# Wrap bsd.nls.mk because I can't force that Makefile snippet to work only with
|
|
# ${PROGS}.
|
|
.for _P in ${PROGS}
|
|
NLSNAME.${_P}?= ${_P}
|
|
NLS:= ${NLS.${_P}}
|
|
NLSDIR:= ${NLSDIR.${_P}}
|
|
NLSNAME:= ${NLSNAME.${_P}}
|
|
.include <bsd.nls.mk>
|
|
.endfor
|
|
|
|
.include <bsd.files.mk>
|
|
.include <bsd.incs.mk>
|
|
.include <bsd.links.mk>
|
|
|
|
.if !target(lint)
|
|
. for _P in ${PROGS}
|
|
. if !target(lint.${_P})
|
|
. if defined(PROG_CXX.${_P})
|
|
lint.${_P}:
|
|
. else
|
|
_CFLAGS:= ${CFLAGS.${_P}}
|
|
_SRCS:= ${SRCS.${_P}}
|
|
lint.${_P}: ${_SRCS:M*.c}
|
|
${LINT} ${LINTFLAGS} ${_CFLAGS:M-[DIU]*} ${.ALLSRC}
|
|
. endif
|
|
. endif
|
|
lint: lint.${_P}
|
|
|
|
. endfor
|
|
.endif # !target(lint)
|
|
|
|
.for _P in ${PROGS}
|
|
CFLAGS:= ${CFLAGS.${_P}}
|
|
CXXFLAGS:= ${CXXFLAGS.${_P}}
|
|
# XXX: Pollutes DPADD.${_P} and LDADD.${_P} above
|
|
#DPADD:= ${DPADD.${_P}}
|
|
#LDADD:= ${LDADD.${_P}}
|
|
SRCS:= ${SRCS.${_P}}
|
|
. include <bsd.dep.mk>
|
|
# bsd.dep.mk mangles SRCS
|
|
SRCS.${_P}:= ${SRCS}
|
|
. undef DPADD LDADD
|
|
.endfor
|
|
|
|
# XXX: emulate the old bsd.prog.mk by allowing Makefiles that didn't set
|
|
# ${PROG*} to function with this Makefile snippet.
|
|
.if empty(PROGS)
|
|
. include <bsd.dep.mk>
|
|
.endif
|
|
|
|
.if !exists(${.OBJDIR}/${DEPENDFILE})
|
|
. for _P in ${PROGS}
|
|
_SRCS:= ${SRCS.${_P}}
|
|
${OBJS.${_P}}: ${_SRCS:M*.h}
|
|
. endfor
|
|
.endif
|
|
|
|
.include <bsd.obj.mk>
|
|
|
|
.include <bsd.sys.mk>
|
|
|
|
.if defined(PORTNAME)
|
|
.include <bsd.pkg.mk>
|
|
.endif
|