1# $FreeBSD$ 2# $Id: progs.mk,v 1.11 2012/11/06 17:18:54 sjg Exp $ 3# 4# @(#) Copyright (c) 2006, Simon J. Gerraty 5# 6# This file is provided in the hope that it will 7# be of use. There is absolutely NO WARRANTY. 8# Permission to copy, redistribute or otherwise 9# use this file is hereby granted provided that 10# the above copyright notice and this notice are 11# left intact. 12# 13# Please send copies of changes and bug-fixes to: 14# sjg@crufty.net 15# 16 17.MAIN: all 18 19.if defined(PROGS) || defined(PROGS_CXX) 20# we really only use PROGS below... 21PROGS += ${PROGS_CXX} 22 23# In meta mode, we can capture dependenices for _one_ of the progs. 24# if makefile doesn't nominate one, we use the first. 25.if defined(.PARSEDIR) 26.ifndef UPDATE_DEPENDFILE_PROG 27UPDATE_DEPENDFILE_PROG = ${PROGS:[1]} 28.export UPDATE_DEPENDFILE_PROG 29.endif 30.else 31UPDATE_DEPENDFILE_PROG?= no 32.endif 33 34.ifndef PROG 35# They may have asked us to build just one 36.for t in ${PROGS} 37.if make($t) 38PROG ?= $t 39.endif 40.endfor 41.endif 42 43.if defined(PROG) 44# just one of many 45PROG_OVERRIDE_VARS += BINDIR DPSRCS MAN SRCS 46PROG_VARS += CFLAGS CPPFLAGS CXXFLAGS DPADD DPLIBS LDADD LDFLAGS ${PROG_OVERRIDE_VARS} 47.for v in ${PROG_VARS:O:u} 48.if empty(${PROG_OVERRIDE_VARS:M$v}) 49.if defined(${v}.${PROG}) 50$v += ${${v}.${PROG}} 51.elif defined(${v}_${PROG}) 52$v += ${${v}_${PROG}} 53.endif 54.else 55$v ?= 56.endif 57.endfor 58 59# for meta mode, there can be only one! 60.if ${PROG} == ${UPDATE_DEPENDFILE_PROG} 61UPDATE_DEPENDFILE ?= yes 62.endif 63UPDATE_DEPENDFILE ?= NO 64 65# ensure that we don't clobber each other's dependencies 66DEPENDFILE?= .depend.${PROG} 67# prog.mk will do the rest 68.else 69all: ${FILES} ${PROGS} ${SCRIPTS} 70 71# We cannot capture dependencies for meta mode here 72UPDATE_DEPENDFILE = NO 73# nor can we safely run in parallel. 74.NOTPARALLEL: 75.endif 76.endif 77 78# The non-recursive call to bsd.progs.mk will handle FILES; NUL out 79# FILESGROUPS so recursive calls don't duplicate the work 80.ifdef _RECURSING_PROGS 81FILESGROUPS= 82.endif 83 84# handle being called [bsd.]progs.mk 85.include <bsd.prog.mk> 86 87.ifndef _RECURSING_PROGS 88# tell progs.mk we might want to install things 89PROGS_TARGETS+= checkdpadd clean cleandepend cleandir cleanobj depend install 90 91.for p in ${PROGS} 92.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 93# bsd.prog.mk may need to know this 94x.$p= PROG_CXX=$p 95.endif 96 97$p ${p}_p: .PHONY .MAKE 98 (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 99 SUBDIR= PROG=$p \ 100 DEPENDFILE=.depend.$p .MAKE.DEPENDFILE=.depend.$p \ 101 ${x.$p}) 102 103.for t in ${PROGS_TARGETS:O:u} 104$p.$t: .PHONY .MAKE 105 (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 106 SUBDIR= PROG=$p \ 107 DEPENDFILE=.depend.$p .MAKE.DEPENDFILE=.depend.$p \ 108 ${x.$p} ${@:E}) 109.endfor 110.endfor 111 112.if !empty(PROGS) 113.for t in ${PROGS_TARGETS:O:u} 114$t: ${PROGS:%=%.$t} 115.endfor 116.endif 117 118.if empty(PROGS) && !empty(SCRIPTS) 119 120.for t in ${PROGS_TARGETS:O:u} 121scripts.$t: .PHONY .MAKE 122 (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} SUBDIR= _RECURSING_PROGS= \ 123 $t) 124$t: scripts.$t 125.endfor 126 127.endif 128 129.endif 130