bsd.dep.mk revision 36054
1275970Scy#	$Id: bsd.dep.mk,v 1.22 1998/05/11 15:37:13 bde Exp $
2275970Scy#
3275970Scy# The include file <bsd.dep.mk> handles Makefile dependencies.
4275970Scy#
5275970Scy#
6275970Scy# +++ variables +++
7275970Scy#
8275970Scy# DEPENDFILE	dependencies file [.depend]
9280849Scy#
10275970Scy# MKDEP		Options for ${MKDEPCMD} [not set]
11275970Scy#
12275970Scy# MKDEPCMD	Makefile dependency list program [mkdep]
13275970Scy# 
14275970Scy# SRCS          List of source files (c, c++, assembler)
15275970Scy#
16275970Scy#
17275970Scy# +++ targets +++
18275970Scy#
19275970Scy#	cleandepend:
20275970Scy#		Remove depend and tags file
21275970Scy#
22275970Scy#	depend:
23275970Scy#		Make the dependencies for the source files, and store
24275970Scy#		them in the file ${DEPENDFILE}.
25275970Scy#
26275970Scy#	tags:
27275970Scy#		Create a (GLOBAL) gtags file for the source files.
28275970Scy#		If HTML is defined, htags is also run after gtags.
29275970Scy
30275970Scy
31275970ScyMKDEPCMD?=	mkdep
32275970ScyDEPENDFILE?=	.depend
33275970Scy
34275970Scy.if defined(SRCS)
35275970ScyCLEANFILES?=
36275970Scy
37275970Scy.for _LSRC in ${SRCS:M*.l:N*/*}
38275970Scy.for _LC in ${_LSRC:S/.l/.c/}
39275970Scy${_LC}: ${_LSRC}
40275970Scy	${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET}
41275970ScySRCS:=	${SRCS:S/${_LSRC}/${_LC}/}
42275970ScyCLEANFILES:= ${CLEANFILES} ${_LC}
43275970Scy.endfor
44275970Scy.endfor
45275970Scy
46275970Scy.for _YSRC in ${SRCS:M*.y:N*/*}
47275970Scy.for _YC in ${_YSRC:S/.y/.c/}
48275970ScySRCS:=	${SRCS:S/${_YSRC}/${_YC}/}
49275970ScyCLEANFILES:= ${CLEANFILES} ${_YC}
50275970Scy.if ${YFLAGS:M-d} != "" && ${SRCS:My.tab.h}
51275970Scy.ORDER: ${_YC} y.tab.h
52275970Scy${_YC} y.tab.h: ${_YSRC}
53275970Scy	${YACC} ${YFLAGS} ${.ALLSRC}
54275970Scy	cp y.tab.c ${_YC}
55275970ScySRCS:=	${SRCS} y.tab.h
56275970ScyCLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h
57275970Scy.elif ${YFLAGS:M-d} != ""
58275970Scy.for _YH in ${_YC:S/.c/.h/}
59275970Scy.ORDER: ${_YC} ${_YH}
60275970Scy${_YC} ${_YH}: ${_YSRC}
61275970Scy	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
62275970ScySRCS:=	${SRCS} ${_YH}
63275970ScyCLEANFILES:= ${CLEANFILES} ${_YH}
64275970Scy.endfor
65275970Scy.else
66275970Scy${_YC}: ${_YSRC}
67275970Scy	${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC}
68275970Scy.endif
69275970Scy.endfor
70275970Scy.endfor
71275970Scy.endif
72275970Scy
73275970Scy.if !target(depend)
74275970Scy.if defined(SRCS)
75275970Scydepend: beforedepend ${DEPENDFILE} afterdepend _SUBDIR
76275970Scy
77275970Scy# Different types of sources are compiled with slightly different flags.
78275970Scy# Split up the sources, and filter out headers and non-applicable flags.
79275970Scy${DEPENDFILE}: ${SRCS}
80275970Scy	rm -f ${DEPENDFILE}
81275970Scy.if ${SRCS:M*.[sS]} != ""
82275970Scy	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
83275970Scy	    ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
84275970Scy	    ${AINC} \
85275970Scy	    ${.ALLSRC:M*.[sS]}
86275970Scy.endif
87275970Scy.if ${SRCS:M*.c} != ""
88275970Scy	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
89275970Scy	    ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
90275970Scy	    ${.ALLSRC:M*.c}
91275970Scy.endif
92275970Scy.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cxx} != ""
93275970Scy	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
94275970Scy	    ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \
95275970Scy	    ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}
96275970Scy.endif
97275970Scy.if ${SRCS:M*.m} != ""
98275970Scy	${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
99275970Scy	    ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \
100275970Scy	    ${OBJCFLAGS:M-Wno-import*} \
101275970Scy	    ${.ALLSRC:M*.m}
102275970Scy.endif
103275970Scy.if target(_EXTRADEPEND)
104275970Scy	cd ${.CURDIR}; ${MAKE} _EXTRADEPEND
105275970Scy.endif
106275970Scy
107275970Scy.ORDER: ${DEPENDFILE} afterdepend
108275970Scy.else
109275970Scydepend: beforedepend afterdepend _SUBDIR
110275970Scy.endif
111275970Scy.if !target(beforedepend)
112275970Scybeforedepend:
113275970Scy.else
114275970Scy.ORDER: beforedepend ${DEPENDFILE}
115275970Scy.ORDER: beforedepend afterdepend
116275970Scy.endif
117275970Scy.if !target(afterdepend)
118275970Scyafterdepend:
119275970Scy.endif
120275970Scy.endif
121275970Scy
122275970Scy.if defined(NOTAGS)
123275970Scytags:
124275970Scy.endif
125275970Scy
126275970Scy.if !target(tags)
127275970Scytags: ${SRCS} _SUBDIR
128275970Scy	@cd ${.CURDIR} && gtags ${GTAGSFLAGS} ${.OBJDIR}
129275970Scy.if defined(HTML)
130275970Scy	@cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR}
131275970Scy.endif
132275970Scy.endif
133275970Scy
134275970Scy.if !target(cleandepend)
135275970Scycleandepend: _SUBDIR
136275970Scy.if defined(SRCS)
137275970Scy	rm -f ${DEPENDFILE} ${.OBJDIR}/GRTAGS ${.OBJDIR}/GSYMS ${.OBJDIR}/GTAGS
138275970Scy.if defined(HTML)
139275970Scy	rm -rf ${.OBJDIR}/HTML
140275970Scy.endif
141275970Scy.endif
142275970Scy.endif
143275970Scy