summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorsjg <sjg@FreeBSD.org>2012-11-07 21:44:04 +0000
committersjg <sjg@FreeBSD.org>2012-11-07 21:44:04 +0000
commit84d54d6b8787269fe865f4b9d801936e28705da8 (patch)
treef9c06c5fb017ee81b8bc10d5eccb285c93eb245b /share
parent7e9001b55aa35989ccd20045caaaf41d7ad03f5a (diff)
downloadFreeBSD-src-84d54d6b8787269fe865f4b9d801936e28705da8.zip
FreeBSD-src-84d54d6b8787269fe865f4b9d801936e28705da8.tar.gz
Latest progs.mk from crufty.net for ATF
Approved by: marcel (mentor)
Diffstat (limited to 'share')
-rw-r--r--share/mk/bsd.progs.mk396
1 files changed, 67 insertions, 329 deletions
diff --git a/share/mk/bsd.progs.mk b/share/mk/bsd.progs.mk
index 531c2ef..b6236fe 100644
--- a/share/mk/bsd.progs.mk
+++ b/share/mk/bsd.progs.mk
@@ -1,350 +1,88 @@
-# 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=
+# $Id: progs.mk,v 1.11 2012/11/06 17:18:54 sjg Exp $
+#
+# @(#) Copyright (c) 2006, Simon J. Gerraty
+#
+# This file is provided in the hope that it will
+# be of use. There is absolutely NO WARRANTY.
+# Permission to copy, redistribute or otherwise
+# use this file is hereby granted provided that
+# the above copyright notice and this notice are
+# left intact.
+#
+# Please send copies of changes and bug-fixes to:
+# sjg@crufty.net
+#
+
+.MAIN: all
+
+.if defined(PROGS)
+
+# In meta mode, we can capture dependenices for _one_ of the progs.
+# if makefile doesn't nominate one, we use the first.
+.ifndef UPDATE_DEPENDFILE_PROG
+UPDATE_DEPENDFILE_PROG = ${PROGS:[1]}
+.export UPDATE_DEPENDFILE_PROG
.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
+.ifndef PROG
+# They may have asked us to build just one
+.for t in ${PROGS}
+.if make($t)
+PROG ?= $t
+.endif
+.endfor
.endif
-# Avoid recursive variables
-.undef NLSNAME
+.if defined(PROG)
+# just one of many
+PROG_VARS += CFLAGS CPPFLAGS CXXFLAGS DPADD DPLIBS LDADD MAN SRCS
+.for v in ${PROG_VARS:O:u}
+$v += ${${v}_${PROG}:U${${v}.${PROG}}}
+.endfor
-.if defined(COPTS)
-CFLAGS+=${COPTS}
+# for meta mode, there can be only one!
+.if ${PROG} == ${UPDATE_DEPENDFILE_PROG:Uno}
+UPDATE_DEPENDFILE ?= yes
.endif
-
-.if defined(DEBUG_FLAGS)
-. if ${MK_CTF} != "no" && ${DEBUG_FLAGS:M-g} != ""
-CTFFLAGS+= -g
-. endif
-CFLAGS+=${DEBUG_FLAGS}
-CXXFLAGS+=${DEBUG_FLAGS}
+UPDATE_DEPENDFILE ?= NO
+
+# ensure that we don't clobber each other's dependencies
+DEPENDFILE?= .depend.${PROG}
+# prog.mk will do the rest
+.else
+all: ${PROGS}
+
+# We cannot capture dependencies for meta mode here
+UPDATE_DEPENDFILE = NO
+# nor can we safely run in parallel.
+.NOTPARALLEL:
.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}
+# handle being called [bsd.]progs.mk
+.include <${.PARSEFILE:S,progs,prog,}>
-. if !defined(NLSDIR.${_P})
-NLSDIR.${_P}:= ${NLSDIR}
-. endif
-. undef NLSDIR
+.ifndef PROG
+PROGS_TARGETS += clean
-. 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
+.for p in ${PROGS}
+.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p)
+# bsd.prog.mk may need to know this
+x.$p= PROG_CXX=$p
.endif
-CLEANFILES+= ${PROGS}
-
-.include <bsd.libnames.mk>
+$p ${p}_p: .PHONY .MAKE
+ (cd ${.CURDIR} && ${.MAKE} -f ${MAKEFILE} PROG=$p ${x.$p})
-_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
+.for t in ${PROGS_TARGETS:O:u}
+$p.$t: .PHONY .MAKE
+ (cd ${.CURDIR} && ${.MAKE} -f ${MAKEFILE} PROG=$p ${x.$p} ${@:E})
.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
+.for t in ${PROGS_TARGETS:O:u}
+$t: ${PROGS:%=%.$t}
.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
OpenPOWER on IntegriCloud