bsd.dep.mk revision 92361
178344Sobrien# $FreeBSD: head/share/mk/bsd.dep.mk 92361 2002-03-15 18:43:59Z obrien $
278344Sobrien#
398184Sgordon# The include file <bsd.dep.mk> handles Makefile dependencies.
478344Sobrien#
578344Sobrien#
678344Sobrien# +++ variables +++
7140339Sobrien#
898184Sgordon# DEPENDFILE	dependencies file [.depend]
978344Sobrien#
1078344Sobrien# MKDEP		Options for ${MKDEPCMD} [not set]
1178344Sobrien#
1278344Sobrien# MKDEPCMD	Makefile dependency list program [mkdep]
1398184Sgordon# 
1478344Sobrien# SRCS          List of source files (c, c++, assembler)
1578344Sobrien#
1678344Sobrien#
1778344Sobrien# +++ targets +++
1878344Sobrien#
19165664Syar#	cleandepend:
20159833Sflz#		Remove depend and tags file
21124618Smtm#
22124618Smtm#	depend:
23124618Smtm#		Make the dependencies for the source files, and store
24124618Smtm#		them in the file ${DEPENDFILE}.
25124618Smtm#
26154114Sdougb#	tags:
27154114Sdougb#		Create a (GLOBAL) gtags file for the source files.
28159833Sflz#		If HTML is defined, htags is also run after gtags.
29159833Sflz
30159833Sflz
31159833SflzMKDEPCMD?=	env CC=${CC} mkdep
32154114SdougbDEPENDFILE?=	.depend
33154114Sdougb
34124618Smtm.if defined(SRCS)
35124618SmtmCLEANFILES?=
36124618Smtm
37124618Smtm.for _LSRC in ${SRCS:M*.l:N*/*}
38124618Smtm.for _LC in ${_LSRC:S/.l/.c/}
39179945Smtm${_LC}: ${_LSRC}
40124618Smtm	${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET}
41124618SmtmSRCS:=	${SRCS:S/${_LSRC}/${_LC}/}
42154114SdougbCLEANFILES:= ${CLEANFILES} ${_LC}
43154114Sdougb.endfor
44154114Sdougb.endfor
45154114Sdougb
46159833Sflz.for _YSRC in ${SRCS:M*.y:N*/*}
47159833Sflz.for _YC in ${_YSRC:S/.y/.c/}
48159833SflzSRCS:=	${SRCS:S/${_YSRC}/${_YC}/}
49159833SflzCLEANFILES:= ${CLEANFILES} ${_YC}
50154114Sdougb.if ${YFLAGS:M-d} != "" && ${SRCS:My.tab.h}
51154114Sdougb.ORDER: ${_YC} y.tab.h
52174567Sjhb${_YC} y.tab.h: ${_YSRC}
53174567Sjhb	${YACC} ${YFLAGS} ${.ALLSRC}
54174567Sjhb	cp y.tab.c ${_YC}
55174567SjhbSRCS:=	${SRCS} y.tab.h
56174567SjhbCLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h
57174567Sjhb.elif ${YFLAGS:M-d} != ""
58179945Smtm.for _YH in ${_YC:S/.c/.h/}
59179945Smtm.ORDER: ${_YC} ${_YH}
60174567Sjhb${_YC} ${_YH}: ${_YSRC}
61154114Sdougb	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
62154114SdougbSRCS:=	${SRCS} ${_YH}
63154114SdougbCLEANFILES:= ${CLEANFILES} ${_YH}
64124618Smtm.endfor
65124618Smtm.else
66124618Smtm${_YC}: ${_YSRC}
67124618Smtm	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
68124618Smtm.endif
69124618Smtm.endfor
70124618Smtm.endfor
71117077Strhodes.endif
72103436Speter
73103436Speter.if !target(depend)
74103436Speter.if defined(SRCS)
75179945Smtmdepend: beforedepend ${DEPENDFILE} afterdepend _SUBDIR
76179945Smtm
77124618Smtm# Different types of sources are compiled with slightly different flags.
78124618Smtm# Split up the sources, and filter out headers and non-applicable flags.
79124618Smtm${DEPENDFILE}: ${SRCS}
80124618Smtm	rm -f ${DEPENDFILE}
8178344Sobrien.if ${SRCS:M*.[sS]} != ""
8278344Sobrien	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
8378344Sobrien	    ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
8478344Sobrien	    ${AINC} \
85	    ${.ALLSRC:M*.[sS]}
86.endif
87.if ${SRCS:M*.c} != ""
88	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
89	    ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
90	    ${.ALLSRC:M*.c}
91.endif
92.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cpp} != "" || \
93    ${SRCS:M*.cxx} != ""
94	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
95	    ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \
96	    ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx}
97.endif
98.if ${SRCS:M*.m} != ""
99	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
100	    ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \
101	    ${OBJCFLAGS:M-Wno-import*} \
102	    ${.ALLSRC:M*.m}
103.endif
104.if target(_EXTRADEPEND)
105	cd ${.CURDIR}; ${MAKE} _EXTRADEPEND
106.endif
107
108.ORDER: ${DEPENDFILE} afterdepend
109.else
110depend: beforedepend afterdepend _SUBDIR
111.endif
112.if !target(beforedepend)
113beforedepend:
114.else
115.ORDER: beforedepend ${DEPENDFILE}
116.ORDER: beforedepend afterdepend
117.endif
118.if !target(afterdepend)
119afterdepend:
120.endif
121.endif
122
123.if defined(NOTAGS)
124tags:
125.endif
126
127.if !target(tags)
128tags: ${SRCS} _SUBDIR
129	@cd ${.CURDIR} && gtags ${GTAGSFLAGS} ${.OBJDIR}
130.if defined(HTML)
131	@cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR}
132.endif
133.endif
134
135.if !target(cleandepend)
136cleandepend: _SUBDIR
137.if defined(SRCS)
138	rm -f ${DEPENDFILE} ${.OBJDIR}/GPATH ${.OBJDIR}/GRTAGS \
139		${.OBJDIR}/GSYMS ${.OBJDIR}/GTAGS
140.if defined(HTML)
141	rm -rf ${.OBJDIR}/HTML
142.endif
143.endif
144.endif
145