17f3dea24SPeter Wemm# $FreeBSD$ 253996fadSWolfram Schneider# 353996fadSWolfram Schneider# The include file <bsd.dep.mk> handles Makefile dependencies. 453996fadSWolfram Schneider# 553996fadSWolfram Schneider# 653996fadSWolfram Schneider# +++ variables +++ 753996fadSWolfram Schneider# 8ccc4bab1SRuslan Ermilov# CTAGS A tags file generation program [gtags] 9ccc4bab1SRuslan Ermilov# 10ccc4bab1SRuslan Ermilov# CTAGSFLAGS Options for ctags(1) [not set] 11ccc4bab1SRuslan Ermilov# 1253996fadSWolfram Schneider# DEPENDFILE dependencies file [.depend] 1353996fadSWolfram Schneider# 14ccc4bab1SRuslan Ermilov# GTAGSFLAGS Options for gtags(1) [-o] 15ccc4bab1SRuslan Ermilov# 16ccc4bab1SRuslan Ermilov# HTAGSFLAGS Options for htags(1) [not set] 17ccc4bab1SRuslan Ermilov# 1853996fadSWolfram Schneider# MKDEP Options for ${MKDEPCMD} [not set] 1953996fadSWolfram Schneider# 2053996fadSWolfram Schneider# MKDEPCMD Makefile dependency list program [mkdep] 2153996fadSWolfram Schneider# 2253996fadSWolfram Schneider# SRCS List of source files (c, c++, assembler) 2353996fadSWolfram Schneider# 2411dc9298SRuslan Ermilov# DPSRCS List of source files which are needed for generating 2511dc9298SRuslan Ermilov# dependencies, ${SRCS} are always part of it. 2653996fadSWolfram Schneider# 2753996fadSWolfram Schneider# +++ targets +++ 2853996fadSWolfram Schneider# 2953996fadSWolfram Schneider# cleandepend: 3053996fadSWolfram Schneider# Remove depend and tags file 3153996fadSWolfram Schneider# 3253996fadSWolfram Schneider# depend: 3353996fadSWolfram Schneider# Make the dependencies for the source files, and store 3453996fadSWolfram Schneider# them in the file ${DEPENDFILE}. 3553996fadSWolfram Schneider# 3653996fadSWolfram Schneider# tags: 37ccc4bab1SRuslan Ermilov# In "ctags" mode, create a tags file for the source files. 38ccc4bab1SRuslan Ermilov# In "gtags" mode, create a (GLOBAL) gtags file for the 39ccc4bab1SRuslan Ermilov# source files. If HTML is defined, htags(1) is also run 40ccc4bab1SRuslan Ermilov# after gtags(1). 4153996fadSWolfram Schneider 425ffdf361SRuslan Ermilov.if !target(__<bsd.init.mk>__) 435ffdf361SRuslan Ermilov.error bsd.dep.mk cannot be included directly. 445ffdf361SRuslan Ermilov.endif 45b16495e7SWolfram Schneider 46ccc4bab1SRuslan ErmilovCTAGS?= gtags 47ccc4bab1SRuslan ErmilovCTAGSFLAGS?= 48ccc4bab1SRuslan ErmilovGTAGSFLAGS?= -o 49ccc4bab1SRuslan ErmilovHTAGSFLAGS?= 50ccc4bab1SRuslan Ermilov 51e16529d3SRuslan Ermilov.if ${CC} != "cc" 528447c44fSBaptiste DaroussinMKDEPCMD?= CC='${CC} ${DEPFLAGS}' mkdep 53e16529d3SRuslan Ermilov.else 54e16529d3SRuslan ErmilovMKDEPCMD?= mkdep 55e16529d3SRuslan Ermilov.endif 56b16495e7SWolfram SchneiderDEPENDFILE?= .depend 57d14f862cSGarrett Wollman 58ccc4bab1SRuslan Ermilov# Keep `tags' here, before SRCS are mangled below for `depend'. 596260f1d8SRuslan Ermilov.if !target(tags) && defined(SRCS) && !defined(NO_TAGS) 60ccc4bab1SRuslan Ermilovtags: ${SRCS} 61213a4447SRuslan Ermilov.if ${CTAGS:T} == "gtags" 62ccc4bab1SRuslan Ermilov @cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR} 63ccc4bab1SRuslan Ermilov.if defined(HTML) 64ccc4bab1SRuslan Ermilov @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 65ccc4bab1SRuslan Ermilov.endif 66213a4447SRuslan Ermilov.else 67213a4447SRuslan Ermilov @${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \ 68213a4447SRuslan Ermilov ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET} 69ccc4bab1SRuslan Ermilov.endif 70ccc4bab1SRuslan Ermilov.endif 71ccc4bab1SRuslan Ermilov 722ec8b6deSBruce Evans.if defined(SRCS) 732ec8b6deSBruce EvansCLEANFILES?= 742ec8b6deSBruce Evans 756b14fdfaSRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE}) 768a152f97SRui Paulo.for _S in ${SRCS:N*.[dhly]} 776b14fdfaSRuslan Ermilov${_S:R}.o: ${_S} 786b14fdfaSRuslan Ermilov.endfor 796b14fdfaSRuslan Ermilov.endif 806b14fdfaSRuslan Ermilov 819f65e34fSRui Paulo# Lexical analyzers 822ec8b6deSBruce Evans.for _LSRC in ${SRCS:M*.l:N*/*} 83484933a9SRuslan Ermilov.for _LC in ${_LSRC:R}.c 842ec8b6deSBruce Evans${_LC}: ${_LSRC} 858f812fecSDag-Erling Smørgrav ${LEX} ${LFLAGS} -o${.TARGET} ${.ALLSRC} 866b14fdfaSRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE}) 876b14fdfaSRuslan Ermilov${_LC:R}.o: ${_LC} 886b14fdfaSRuslan Ermilov.endif 892ec8b6deSBruce EvansSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 90484933a9SRuslan ErmilovCLEANFILES+= ${_LC} 912ec8b6deSBruce Evans.endfor 922ec8b6deSBruce Evans.endfor 932ec8b6deSBruce Evans 949f65e34fSRui Paulo# Yacc grammars 952ec8b6deSBruce Evans.for _YSRC in ${SRCS:M*.y:N*/*} 96484933a9SRuslan Ermilov.for _YC in ${_YSRC:R}.c 972ec8b6deSBruce EvansSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 98484933a9SRuslan ErmilovCLEANFILES+= ${_YC} 9965d2bdc6SRuslan Ermilov.if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h) 1009e0a3441SMarcel Moolenaar.ORDER: ${_YC} y.tab.h 1019e0a3441SMarcel Moolenaar${_YC} y.tab.h: ${_YSRC} 1022ec8b6deSBruce Evans ${YACC} ${YFLAGS} ${.ALLSRC} 1032ec8b6deSBruce Evans cp y.tab.c ${_YC} 104484933a9SRuslan ErmilovCLEANFILES+= y.tab.c y.tab.h 10565d2bdc6SRuslan Ermilov.elif !empty(YFLAGS:M-d) 106484933a9SRuslan Ermilov.for _YH in ${_YC:R}.h 1079e0a3441SMarcel Moolenaar${_YH}: ${_YC} 1089e0a3441SMarcel Moolenaar${_YC}: ${_YSRC} 1092ec8b6deSBruce Evans ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 110484933a9SRuslan ErmilovSRCS+= ${_YH} 111484933a9SRuslan ErmilovCLEANFILES+= ${_YH} 1122ec8b6deSBruce Evans.endfor 1132ec8b6deSBruce Evans.else 1142ec8b6deSBruce Evans${_YC}: ${_YSRC} 1152ec8b6deSBruce Evans ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 1162ec8b6deSBruce Evans.endif 1176b14fdfaSRuslan Ermilov.if !exists(${.OBJDIR}/${DEPENDFILE}) 1186b14fdfaSRuslan Ermilov${_YC:R}.o: ${_YC} 1196b14fdfaSRuslan Ermilov.endif 1202ec8b6deSBruce Evans.endfor 1212ec8b6deSBruce Evans.endfor 1229f65e34fSRui Paulo 1239f65e34fSRui Paulo# DTrace probe definitions 12417b22722SRui Paulo.if ${SRCS:M*.d} 1255439a715SMark JohnstonCFLAGS+= -I${.OBJDIR} 126ff0f36e7SRui Paulo.endif 1279f65e34fSRui Paulo.for _DSRC in ${SRCS:M*.d:N*/*} 128ff0f36e7SRui Paulo.for _D in ${_DSRC:R} 1299c851217SRui PauloDHDRS+= ${_D}.h 130ff0f36e7SRui Paulo${_D}.h: ${_DSRC} 131*0c76c8aaSMark Johnston ${DTRACE} ${DTRACEFLAGS} -h -s ${.ALLSRC} 132e9083b2dSMark JohnstonSRCS:= ${SRCS:S/^${_DSRC}$//} 133d8b63155SRui PauloOBJS+= ${_D}.o 1349b646f25SRui PauloCLEANFILES+= ${_D}.h ${_D}.o 135e9083b2dSMark Johnston${_D}.o: ${_DSRC} ${OBJS:S/^${_D}.o$//} 136*0c76c8aaSMark Johnston ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC} 1379b646f25SRui Paulo.if defined(LIB) 1389b646f25SRui PauloCLEANFILES+= ${_D}.So ${_D}.po 139e9083b2dSMark Johnston${_D}.So: ${_DSRC} ${SOBJS:S/^${_D}.So$//} 140*0c76c8aaSMark Johnston ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC} 141e9083b2dSMark Johnston${_D}.po: ${_DSRC} ${POBJS:S/^${_D}.po$//} 142*0c76c8aaSMark Johnston ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC} 143ff0f36e7SRui Paulo.endif 1449f65e34fSRui Paulo.endfor 1459f65e34fSRui Paulo.endfor 1469c851217SRui Paulobeforedepend: ${DHDRS} 1479c851217SRui Paulobeforebuild: ${DHDRS} 1482ec8b6deSBruce Evans.endif 1492ec8b6deSBruce Evans 150d14f862cSGarrett Wollman.if !target(depend) 151d14f862cSGarrett Wollman.if defined(SRCS) 152b25a566dSRuslan Ermilovdepend: beforedepend ${DEPENDFILE} afterdepend 153b16495e7SWolfram Schneider 1540815243cSMarcel Moolenaar# Tell bmake not to look for generated files via .PATH 1550815243cSMarcel Moolenaar.NOPATH: ${DEPENDFILE} 1560815243cSMarcel Moolenaar 157a813856eSBruce Evans# Different types of sources are compiled with slightly different flags. 158a813856eSBruce Evans# Split up the sources, and filter out headers and non-applicable flags. 1592d122146SDimitry AndricMKDEP_CFLAGS= ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BIDU]*} ${CFLAGS:M-std=*} \ 1602d122146SDimitry Andric ${CFLAGS:M-ansi} 1612d122146SDimitry AndricMKDEP_CXXFLAGS= ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BIDU]*} \ 1622d122146SDimitry Andric ${CXXFLAGS:M-std=*} ${CXXFLAGS:M-ansi} ${CXXFLAGS:M-stdlib=*} 16306d6e4fcSTom Rhodes 16411dc9298SRuslan ErmilovDPSRCS+= ${SRCS} 16511dc9298SRuslan Ermilov${DEPENDFILE}: ${DPSRCS} 166b16495e7SWolfram Schneider rm -f ${DEPENDFILE} 16765d2bdc6SRuslan Ermilov.if !empty(DPSRCS:M*.[cS]) 168a813856eSBruce Evans ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 16906d6e4fcSTom Rhodes ${MKDEP_CFLAGS} ${.ALLSRC:M*.[cS]} 170b16495e7SWolfram Schneider.endif 17165d2bdc6SRuslan Ermilov.if !empty(DPSRCS:M*.cc) || !empty(DPSRCS:M*.C) || !empty(DPSRCS:M*.cpp) || \ 17265d2bdc6SRuslan Ermilov !empty(DPSRCS:M*.cxx) 173b16495e7SWolfram Schneider ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 17406d6e4fcSTom Rhodes ${MKDEP_CXXFLAGS} \ 175c7cbe79eSDmitrij Tejblum ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 176b16495e7SWolfram Schneider.endif 177663e9677SBruce Evans.if target(_EXTRADEPEND) 17870e82473SRuslan Ermilov_EXTRADEPEND: .USE 1790cfacc86SRuslan Ermilov${DEPENDFILE}: _EXTRADEPEND 180663e9677SBruce Evans.endif 181b16495e7SWolfram Schneider 18297fe7f47SJordan K. Hubbard.ORDER: ${DEPENDFILE} afterdepend 183d14f862cSGarrett Wollman.else 184b25a566dSRuslan Ermilovdepend: beforedepend afterdepend 185d14f862cSGarrett Wollman.endif 186d14f862cSGarrett Wollman.if !target(beforedepend) 187d14f862cSGarrett Wollmanbeforedepend: 18897fe7f47SJordan K. Hubbard.else 18997fe7f47SJordan K. Hubbard.ORDER: beforedepend ${DEPENDFILE} 19097fe7f47SJordan K. Hubbard.ORDER: beforedepend afterdepend 191d14f862cSGarrett Wollman.endif 192d14f862cSGarrett Wollman.if !target(afterdepend) 193d14f862cSGarrett Wollmanafterdepend: 194d14f862cSGarrett Wollman.endif 195d14f862cSGarrett Wollman.endif 196d14f862cSGarrett Wollman 197cd9a2f5cSJordan K. Hubbard.if !target(cleandepend) 198b25a566dSRuslan Ermilovcleandepend: 199662773e2SBruce Evans.if defined(SRCS) 200213a4447SRuslan Ermilov.if ${CTAGS:T} == "gtags" 201ccc4bab1SRuslan Ermilov rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS 2026eb5e456SJordan K. Hubbard.if defined(HTML) 203ccc4bab1SRuslan Ermilov rm -rf HTML 204ccc4bab1SRuslan Ermilov.endif 2052f82e3b1SRuslan Ermilov.else 206213a4447SRuslan Ermilov rm -f ${DEPENDFILE} tags 2076eb5e456SJordan K. Hubbard.endif 208cd9a2f5cSJordan K. Hubbard.endif 209cd9a2f5cSJordan K. Hubbard.endif 2106e02167bSRuslan Ermilov 2116e02167bSRuslan Ermilov.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD)) 21241ae64f3SEnji Cooper_LDADD_FROM_DPADD= ${DPADD:R:T:C;^lib(.*)$;-l\1;g} 21341ae64f3SEnji Cooper# Ignore -Wl,--start-group/-Wl,--end-group as it might be required in the 21441ae64f3SEnji Cooper# LDADD list due to unresolved symbols 21541ae64f3SEnji Cooper_LDADD_CANONICALIZED= ${LDADD:N:R:T:C;^lib(.*)$;-l\1;g:N-Wl,--[es]*-group} 2166e02167bSRuslan Ermilovcheckdpadd: 2172e3c6179SBruce Evans.if ${_LDADD_FROM_DPADD} != ${_LDADD_CANONICALIZED} 2182e3c6179SBruce Evans @echo ${.CURDIR} 2192e3c6179SBruce Evans @echo "DPADD -> ${_LDADD_FROM_DPADD}" 2202e3c6179SBruce Evans @echo "LDADD -> ${_LDADD_CANONICALIZED}" 2212e3c6179SBruce Evans.endif 2226e02167bSRuslan Ermilov.endif 223