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 LIBADD 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# prog.mk will do the rest 66.else 67all: ${FILES} ${PROGS} ${SCRIPTS} 68 69# We cannot capture dependencies for meta mode here 70UPDATE_DEPENDFILE = NO 71# nor can we safely run in parallel. 72.NOTPARALLEL: 73.endif 74.endif 75 76# The non-recursive call to bsd.progs.mk will handle FILES; NUL out 77# FILESGROUPS so recursive calls don't duplicate the work 78.ifdef _RECURSING_PROGS 79FILESGROUPS= 80.endif 81 82# handle being called [bsd.]progs.mk 83.include <bsd.prog.mk> 84 85.ifndef _RECURSING_PROGS 86# tell progs.mk we might want to install things 87PROGS_TARGETS+= checkdpadd clean cleandepend cleandir cleanobj depend install 88 89.for p in ${PROGS} 90.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 91# bsd.prog.mk may need to know this 92x.$p= PROG_CXX=$p 93.endif 94 95$p ${p}_p: .PHONY .MAKE 96 (cd ${.CURDIR} && \ 97 DEPENDFILE=.depend.$p \ 98 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 99 SUBDIR= PROG=$p ${x.$p}) 100 101.for t in ${PROGS_TARGETS:O:u} 102$p.$t: .PHONY .MAKE 103 (cd ${.CURDIR} && \ 104 DEPENDFILE=.depend.$p \ 105 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 106 SUBDIR= PROG=$p ${x.$p} ${@:E}) 107.endfor 108.endfor 109 110.if !empty(PROGS) 111.for t in ${PROGS_TARGETS:O:u} 112$t: ${PROGS:%=%.$t} 113.endfor 114.endif 115 116.if empty(PROGS) && !empty(SCRIPTS) 117 118.for t in ${PROGS_TARGETS:O:u} 119scripts.$t: .PHONY .MAKE 120 (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} SUBDIR= _RECURSING_PROGS= \ 121 $t) 122$t: scripts.$t 123.endfor 124 125.endif 126 127.endif 128