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