diff options
Diffstat (limited to 'share/mk/bsd.progs.mk')
-rw-r--r-- | share/mk/bsd.progs.mk | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/share/mk/bsd.progs.mk b/share/mk/bsd.progs.mk new file mode 100644 index 0000000..531c2ef --- /dev/null +++ b/share/mk/bsd.progs.mk @@ -0,0 +1,350 @@ +# 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 |