1241823Smarcel# $FreeBSD$ 2242710Ssjg# $Id: progs.mk,v 1.11 2012/11/06 17:18:54 sjg Exp $ 3242710Ssjg# 4242710Ssjg# @(#) Copyright (c) 2006, Simon J. Gerraty 5242710Ssjg# 6242710Ssjg# This file is provided in the hope that it will 7242710Ssjg# be of use. There is absolutely NO WARRANTY. 8242710Ssjg# Permission to copy, redistribute or otherwise 9242710Ssjg# use this file is hereby granted provided that 10242710Ssjg# the above copyright notice and this notice are 11242710Ssjg# left intact. 12242710Ssjg# 13242710Ssjg# Please send copies of changes and bug-fixes to: 14242710Ssjg# sjg@crufty.net 15242710Ssjg# 16241823Smarcel 17242710Ssjg.MAIN: all 18241823Smarcel 19260005Sjmmv.if defined(PROGS) || defined(PROGS_CXX) 20260005Sjmmv# we really only use PROGS below... 21260005SjmmvPROGS += ${PROGS_CXX} 22241823Smarcel 23242710Ssjg# In meta mode, we can capture dependenices for _one_ of the progs. 24242710Ssjg# if makefile doesn't nominate one, we use the first. 25260005Sjmmv.if defined(.PARSEDIR) 26242710Ssjg.ifndef UPDATE_DEPENDFILE_PROG 27242710SsjgUPDATE_DEPENDFILE_PROG = ${PROGS:[1]} 28242710Ssjg.export UPDATE_DEPENDFILE_PROG 29241823Smarcel.endif 30260005Sjmmv.else 31260005SjmmvUPDATE_DEPENDFILE_PROG?= no 32260005Sjmmv.endif 33241823Smarcel 34242710Ssjg.ifndef PROG 35242710Ssjg# They may have asked us to build just one 36242710Ssjg.for t in ${PROGS} 37242710Ssjg.if make($t) 38242710SsjgPROG ?= $t 39241823Smarcel.endif 40242710Ssjg.endfor 41242710Ssjg.endif 42241823Smarcel 43242710Ssjg.if defined(PROG) 44242710Ssjg# just one of many 45249770SsjgPROG_VARS += BINDIR CFLAGS CPPFLAGS CXXFLAGS DPADD DPLIBS LDADD MAN SRCS 46242710Ssjg.for v in ${PROG_VARS:O:u} 47260005Sjmmv.if defined(${v}.${PROG}) || defined(${v}_${PROG}) 48242710Ssjg$v += ${${v}_${PROG}:U${${v}.${PROG}}} 49260005Sjmmv.else 50260005Sjmmv$v ?= 51249770Ssjg.endif 52242710Ssjg.endfor 53241823Smarcel 54242710Ssjg# for meta mode, there can be only one! 55260005Sjmmv.if ${PROG} == ${UPDATE_DEPENDFILE_PROG} 56242710SsjgUPDATE_DEPENDFILE ?= yes 57241823Smarcel.endif 58242710SsjgUPDATE_DEPENDFILE ?= NO 59241823Smarcel 60242710Ssjg# ensure that we don't clobber each other's dependencies 61242710SsjgDEPENDFILE?= .depend.${PROG} 62242710Ssjg# prog.mk will do the rest 63242710Ssjg.else 64242710Ssjgall: ${PROGS} 65241823Smarcel 66242710Ssjg# We cannot capture dependencies for meta mode here 67242710SsjgUPDATE_DEPENDFILE = NO 68242710Ssjg# nor can we safely run in parallel. 69242710Ssjg.NOTPARALLEL: 70241823Smarcel.endif 71242710Ssjg.endif 72241823Smarcel 73242710Ssjg# handle being called [bsd.]progs.mk 74260005Sjmmv.include <bsd.prog.mk> 75241823Smarcel 76260005Sjmmv.ifndef _RECURSING_PROGS 77249770Ssjg# tell progs.mk we might want to install things 78249770SsjgPROGS_TARGETS+= cleandepend cleandir cleanobj depend install 79241823Smarcel 80242710Ssjg.for p in ${PROGS} 81242710Ssjg.if defined(PROGS_CXX) && !empty(PROGS_CXX:M$p) 82242710Ssjg# bsd.prog.mk may need to know this 83242710Ssjgx.$p= PROG_CXX=$p 84241823Smarcel.endif 85241823Smarcel 86242710Ssjg$p ${p}_p: .PHONY .MAKE 87260005Sjmmv (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 88260005Sjmmv SUBDIR= PROG=$p ${x.$p}) 89241823Smarcel 90242710Ssjg.for t in ${PROGS_TARGETS:O:u} 91242710Ssjg$p.$t: .PHONY .MAKE 92260005Sjmmv (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 93260005Sjmmv SUBDIR= PROG=$p ${x.$p} ${@:E}) 94241823Smarcel.endfor 95241823Smarcel.endfor 96241823Smarcel 97242710Ssjg.for t in ${PROGS_TARGETS:O:u} 98242710Ssjg$t: ${PROGS:%=%.$t} 99241823Smarcel.endfor 100241823Smarcel 101260005SjmmvSCRIPTS_TARGETS+= cleandepend cleandir cleanobj depend install 102260005Sjmmv 103260005Sjmmv.for p in ${SCRIPTS} 104260005Sjmmv.for t in ${SCRIPTS_TARGETS:O:u} 105260005Sjmmv$p.$t: .PHONY .MAKE 106260005Sjmmv (cd ${.CURDIR} && ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \ 107260005Sjmmv SUBDIR= SCRIPT=$p ${x.$p} ${@:E}) 108260005Sjmmv.endfor 109260005Sjmmv.endfor 110260005Sjmmv 111260005Sjmmv.for t in ${SCRIPTS_TARGETS:O:u} 112260005Sjmmv$t: ${SCRIPTS:%=%.$t} 113260005Sjmmv.endfor 114260005Sjmmv 115241823Smarcel.endif 116