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# 8ae038fc3SBryan Drewery# CLEANDEPENDDIRS Additional directories to remove for the cleandepend 9ae038fc3SBryan Drewery# target. 10ae038fc3SBryan Drewery# 11ae038fc3SBryan Drewery# CLEANDEPENDFILES Additional files to remove for the cleandepend target. 12ae038fc3SBryan Drewery# 13ccc4bab1SRuslan Ermilov# CTAGS A tags file generation program [gtags] 14ccc4bab1SRuslan Ermilov# 15ccc4bab1SRuslan Ermilov# CTAGSFLAGS Options for ctags(1) [not set] 16ccc4bab1SRuslan Ermilov# 1753996fadSWolfram Schneider# DEPENDFILE dependencies file [.depend] 1853996fadSWolfram Schneider# 19ccc4bab1SRuslan Ermilov# GTAGSFLAGS Options for gtags(1) [-o] 20ccc4bab1SRuslan Ermilov# 21ccc4bab1SRuslan Ermilov# HTAGSFLAGS Options for htags(1) [not set] 22ccc4bab1SRuslan Ermilov# 2353996fadSWolfram Schneider# MKDEP Options for ${MKDEPCMD} [not set] 2453996fadSWolfram Schneider# 2553996fadSWolfram Schneider# MKDEPCMD Makefile dependency list program [mkdep] 2653996fadSWolfram Schneider# 2753996fadSWolfram Schneider# SRCS List of source files (c, c++, assembler) 2853996fadSWolfram Schneider# 2911dc9298SRuslan Ermilov# DPSRCS List of source files which are needed for generating 3011dc9298SRuslan Ermilov# dependencies, ${SRCS} are always part of it. 3153996fadSWolfram Schneider# 3253996fadSWolfram Schneider# +++ targets +++ 3353996fadSWolfram Schneider# 3453996fadSWolfram Schneider# cleandepend: 35ae038fc3SBryan Drewery# remove ${CLEANDEPENDFILES}; remove ${CLEANDEPENDDIRS} and all 36ae038fc3SBryan Drewery# contents. 3753996fadSWolfram Schneider# 3853996fadSWolfram Schneider# depend: 3953996fadSWolfram Schneider# Make the dependencies for the source files, and store 4053996fadSWolfram Schneider# them in the file ${DEPENDFILE}. 4153996fadSWolfram Schneider# 4253996fadSWolfram Schneider# tags: 43ccc4bab1SRuslan Ermilov# In "ctags" mode, create a tags file for the source files. 44ccc4bab1SRuslan Ermilov# In "gtags" mode, create a (GLOBAL) gtags file for the 45ccc4bab1SRuslan Ermilov# source files. If HTML is defined, htags(1) is also run 46ccc4bab1SRuslan Ermilov# after gtags(1). 4753996fadSWolfram Schneider 485ffdf361SRuslan Ermilov.if !target(__<bsd.init.mk>__) 495ffdf361SRuslan Ermilov.error bsd.dep.mk cannot be included directly. 505ffdf361SRuslan Ermilov.endif 51b16495e7SWolfram Schneider 52ccc4bab1SRuslan ErmilovCTAGS?= gtags 53ccc4bab1SRuslan ErmilovCTAGSFLAGS?= 54ccc4bab1SRuslan ErmilovGTAGSFLAGS?= -o 55ccc4bab1SRuslan ErmilovHTAGSFLAGS?= 56ccc4bab1SRuslan Ermilov 579160419cSBryan Drewery_MKDEPCC:= ${CC:N${CCACHE_BIN}} 589160419cSBryan Drewery# XXX: DEPFLAGS can come out once Makefile.inc1 properly passes down 599160419cSBryan Drewery# CXXFLAGS. 609160419cSBryan Drewery.if !empty(DEPFLAGS) 619160419cSBryan Drewery_MKDEPCC+= ${DEPFLAGS} 62e16529d3SRuslan Ermilov.endif 639160419cSBryan DreweryMKDEPCMD?= CC='${_MKDEPCC}' mkdep 64369737d7SBryan Drewery.if ${MK_DIRDEPS_BUILD} == "no" 65fc2c2cd9SBryan Drewery.MAKE.DEPENDFILE= ${DEPENDFILE} 66369737d7SBryan Drewery.endif 67*caf1fb32SBryan DreweryCLEANDEPENDFILES+= ${DEPENDFILE} ${DEPENDFILE}.* 68d14f862cSGarrett Wollman 69ccc4bab1SRuslan Ermilov# Keep `tags' here, before SRCS are mangled below for `depend'. 706260f1d8SRuslan Ermilov.if !target(tags) && defined(SRCS) && !defined(NO_TAGS) 71ccc4bab1SRuslan Ermilovtags: ${SRCS} 72213a4447SRuslan Ermilov.if ${CTAGS:T} == "gtags" 73ccc4bab1SRuslan Ermilov @cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR} 74ccc4bab1SRuslan Ermilov.if defined(HTML) 75ccc4bab1SRuslan Ermilov @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 76ccc4bab1SRuslan Ermilov.endif 77213a4447SRuslan Ermilov.else 78213a4447SRuslan Ermilov @${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \ 79213a4447SRuslan Ermilov ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET} 80ccc4bab1SRuslan Ermilov.endif 81ccc4bab1SRuslan Ermilov.endif 82ccc4bab1SRuslan Ermilov 839fb02a70SBryan Drewery# Skip reading .depend when not needed to speed up tree-walks 849fb02a70SBryan Drewery# and simple lookups. 859fb02a70SBryan Drewery.if !empty(.MAKEFLAGS:M-V${_V_READ_DEPEND}) || make(obj) || make(clean*) || \ 869fb02a70SBryan Drewery make(install*) 879fb02a70SBryan Drewery_SKIP_READ_DEPEND= 1 889fb02a70SBryan Drewery.if ${MK_DIRDEPS_BUILD} == "no" 899fb02a70SBryan Drewery.MAKE.DEPENDFILE= /dev/null 909fb02a70SBryan Drewery.endif 919fb02a70SBryan Drewery.endif 929fb02a70SBryan Drewery 932ec8b6deSBruce Evans.if defined(SRCS) 942ec8b6deSBruce EvansCLEANFILES?= 952ec8b6deSBruce Evans 968a152f97SRui Paulo.for _S in ${SRCS:N*.[dhly]} 97d7beff08SBryan DreweryOBJS_DEPEND_GUESS.${_S:R}.o= ${_S} 98d7beff08SBryan Drewery.if ${MK_FAST_DEPEND} == "no" && !exists(${.OBJDIR}/${DEPENDFILE}) 99d7beff08SBryan Drewery${_S:R}.o: ${OBJS_DEPEND_GUESS.${_S:R}.o} 1006b14fdfaSRuslan Ermilov.endif 101d7beff08SBryan Drewery.endfor 1026b14fdfaSRuslan Ermilov 1039f65e34fSRui Paulo# Lexical analyzers 1042ec8b6deSBruce Evans.for _LSRC in ${SRCS:M*.l:N*/*} 105484933a9SRuslan Ermilov.for _LC in ${_LSRC:R}.c 1062ec8b6deSBruce Evans${_LC}: ${_LSRC} 1078f812fecSDag-Erling Smørgrav ${LEX} ${LFLAGS} -o${.TARGET} ${.ALLSRC} 108d7beff08SBryan DreweryOBJS_DEPEND_GUESS.${_LC:R}.o= ${_LC} 109d7beff08SBryan Drewery.if ${MK_FAST_DEPEND} == "no" && !exists(${.OBJDIR}/${DEPENDFILE}) 110d7beff08SBryan Drewery${_LC:R}.o: ${OBJS_DEPEND_GUESS.${_LC:R}.o} 1116b14fdfaSRuslan Ermilov.endif 1122ec8b6deSBruce EvansSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 113484933a9SRuslan ErmilovCLEANFILES+= ${_LC} 1142ec8b6deSBruce Evans.endfor 1152ec8b6deSBruce Evans.endfor 1162ec8b6deSBruce Evans 1179f65e34fSRui Paulo# Yacc grammars 1182ec8b6deSBruce Evans.for _YSRC in ${SRCS:M*.y:N*/*} 119484933a9SRuslan Ermilov.for _YC in ${_YSRC:R}.c 1202ec8b6deSBruce EvansSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 121484933a9SRuslan ErmilovCLEANFILES+= ${_YC} 12265d2bdc6SRuslan Ermilov.if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h) 1232ec8b6deSBruce Evans.ORDER: ${_YC} y.tab.h 1242ec8b6deSBruce Evans${_YC} y.tab.h: ${_YSRC} 1252ec8b6deSBruce Evans ${YACC} ${YFLAGS} ${.ALLSRC} 1262ec8b6deSBruce Evans cp y.tab.c ${_YC} 127484933a9SRuslan ErmilovCLEANFILES+= y.tab.c y.tab.h 12865d2bdc6SRuslan Ermilov.elif !empty(YFLAGS:M-d) 129484933a9SRuslan Ermilov.for _YH in ${_YC:R}.h 1305444d429SBryan Drewery.ORDER: ${_YC} ${_YH} 1315444d429SBryan Drewery${_YC} ${_YH}: ${_YSRC} 1322ec8b6deSBruce Evans ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 133484933a9SRuslan ErmilovSRCS+= ${_YH} 134484933a9SRuslan ErmilovCLEANFILES+= ${_YH} 1352ec8b6deSBruce Evans.endfor 1362ec8b6deSBruce Evans.else 1372ec8b6deSBruce Evans${_YC}: ${_YSRC} 1382ec8b6deSBruce Evans ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 1392ec8b6deSBruce Evans.endif 140d7beff08SBryan DreweryOBJS_DEPEND_GUESS.${_YC:R}.o= ${_YC} 141d7beff08SBryan Drewery.if ${MK_FAST_DEPEND} == "no" && !exists(${.OBJDIR}/${DEPENDFILE}) 142d7beff08SBryan Drewery${_YC:R}.o: ${OBJS_DEPEND_GUESS.${_YC:R}.o} 1436b14fdfaSRuslan Ermilov.endif 1442ec8b6deSBruce Evans.endfor 1452ec8b6deSBruce Evans.endfor 1469f65e34fSRui Paulo 1479f65e34fSRui Paulo# DTrace probe definitions 148ff0f36e7SRui Paulo.if ${SRCS:M*.d} 1495439a715SMark JohnstonCFLAGS+= -I${.OBJDIR} 150ff0f36e7SRui Paulo.endif 1519f65e34fSRui Paulo.for _DSRC in ${SRCS:M*.d:N*/*} 152ff0f36e7SRui Paulo.for _D in ${_DSRC:R} 153cfa5f2beSBryan DrewerySRCS+= ${_D}.h 154ff0f36e7SRui Paulo${_D}.h: ${_DSRC} 1550c76c8aaSMark Johnston ${DTRACE} ${DTRACEFLAGS} -h -s ${.ALLSRC} 156e9083b2dSMark JohnstonSRCS:= ${SRCS:S/^${_DSRC}$//} 157d8b63155SRui PauloOBJS+= ${_D}.o 1589b646f25SRui PauloCLEANFILES+= ${_D}.h ${_D}.o 159e9083b2dSMark Johnston${_D}.o: ${_DSRC} ${OBJS:S/^${_D}.o$//} 160a298c279SBryan Drewery @rm -f ${.TARGET} 161cfa5f2beSBryan Drewery ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC:N*.h} 1629b646f25SRui Paulo.if defined(LIB) 1639b646f25SRui PauloCLEANFILES+= ${_D}.So ${_D}.po 164e9083b2dSMark Johnston${_D}.So: ${_DSRC} ${SOBJS:S/^${_D}.So$//} 165a298c279SBryan Drewery @rm -f ${.TARGET} 166cfa5f2beSBryan Drewery ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC:N*.h} 167e9083b2dSMark Johnston${_D}.po: ${_DSRC} ${POBJS:S/^${_D}.po$//} 168a298c279SBryan Drewery @rm -f ${.TARGET} 169cfa5f2beSBryan Drewery ${DTRACE} ${DTRACEFLAGS} -G -o ${.TARGET} -s ${.ALLSRC:N*.h} 170ff0f36e7SRui Paulo.endif 1719f65e34fSRui Paulo.endfor 1729f65e34fSRui Paulo.endfor 173b9964333SBryan Drewery 174b9964333SBryan Drewery 17570ca9ec4SBryan Drewery.if !empty(.MAKE.MODE:Mmeta) && empty(.MAKE.MODE:Mnofilemon) 17670ca9ec4SBryan Drewery_meta_filemon= 1 17770ca9ec4SBryan Drewery.endif 17870ca9ec4SBryan Drewery.if ${MK_FAST_DEPEND} == "yes" 179b9964333SBryan DreweryDEPEND_MP?= -MP 180b9964333SBryan Drewery# Handle OBJS=../somefile.o hacks. Just replace '/' rather than use :T to 181b9964333SBryan Drewery# avoid collisions. 182b9964333SBryan DreweryDEPEND_FILTER= C,/,_,g 18370ca9ec4SBryan DreweryDEPENDSRCS= ${SRCS:M*.[cSC]} ${SRCS:M*.cxx} ${SRCS:M*.cpp} ${SRCS:M*.cc} 18470ca9ec4SBryan Drewery.if !empty(DEPENDSRCS) 18570ca9ec4SBryan DreweryDEPENDOBJS+= ${DEPENDSRCS:R:S,$,.o,} 18670ca9ec4SBryan Drewery.endif 18770ca9ec4SBryan DreweryDEPENDFILES_OBJS= ${DEPENDOBJS:O:u:${DEPEND_FILTER}:C/^/${DEPENDFILE}./} 188b9964333SBryan DreweryDEPEND_CFLAGS+= -MD ${DEPEND_MP} -MF${DEPENDFILE}.${.TARGET:${DEPEND_FILTER}} 189b9964333SBryan DreweryDEPEND_CFLAGS+= -MT${.TARGET} 19070ca9ec4SBryan Drewery# Skip generating or including .depend.* files if in meta+filemon mode since 19170ca9ec4SBryan Drewery# it will track dependencies itself. OBJS_DEPEND_GUESS is still used though. 19270ca9ec4SBryan Drewery.if !defined(_meta_filemon) 19310f696a5SBryan Drewery.if defined(.PARSEDIR) 19410f696a5SBryan Drewery# Only add in DEPEND_CFLAGS for CFLAGS on files we expect from DEPENDOBJS 19510f696a5SBryan Drewery# as those are the only ones we will include. 19610f696a5SBryan DreweryDEPEND_CFLAGS_CONDITION= !empty(DEPENDOBJS:M${.TARGET:${DEPEND_FILTER}}) 19710f696a5SBryan DreweryCFLAGS+= ${${DEPEND_CFLAGS_CONDITION}:?${DEPEND_CFLAGS}:} 19810f696a5SBryan Drewery.else 199b9964333SBryan DreweryCFLAGS+= ${DEPEND_CFLAGS} 20010f696a5SBryan Drewery.endif 2019fb02a70SBryan Drewery.if !defined(_SKIP_READ_DEPEND) 2029f286e82SBryan Drewery.for __depend_obj in ${DEPENDFILES_OBJS} 2039f286e82SBryan Drewery.sinclude "${__depend_obj}" 204b9964333SBryan Drewery.endfor 205d7beff08SBryan Drewery.endif # !defined(_SKIP_READ_DEPEND) 20670ca9ec4SBryan Drewery.endif # !defined(_meta_filemon) 207b9964333SBryan Drewery.endif # ${MK_FAST_DEPEND} == "yes" 208b9964333SBryan Drewery.endif # defined(SRCS) 2092ec8b6deSBruce Evans 210948f327eSSimon J. Gerraty.if ${MK_DIRDEPS_BUILD} == "yes" 211b9cd412eSBryan Drewery# Prevent meta.autodep.mk from tracking "local dependencies". 212b9cd412eSBryan Drewery.depend: 2137750ad47SMarcel Moolenaar.include <meta.autodep.mk> 21470ca9ec4SBryan Drewery# If using filemon then _EXTRADEPEND is skipped since it is not needed. 21570ca9ec4SBryan Drewery.if empty(.MAKE.MODE:Mnofilemon) 2167750ad47SMarcel Moolenaar# this depend: bypasses that below 2177750ad47SMarcel Moolenaar# the dependency helps when bootstrapping 2187750ad47SMarcel Moolenaardepend: beforedepend ${DPSRCS} ${SRCS} afterdepend 2197750ad47SMarcel Moolenaarbeforedepend: 2207750ad47SMarcel Moolenaarafterdepend: beforedepend 2217750ad47SMarcel Moolenaar.endif 22270ca9ec4SBryan Drewery.endif 2237750ad47SMarcel Moolenaar 224d7beff08SBryan Drewery# Guess some dependencies for when no ${DEPENDFILE}.OBJ is generated yet. 22570ca9ec4SBryan Drewery# For meta+filemon the .meta file is checked for since it is the dependency 22670ca9ec4SBryan Drewery# file used. 227d7beff08SBryan Drewery.if ${MK_FAST_DEPEND} == "yes" 228d7beff08SBryan Drewery.for __obj in ${DEPENDOBJS:O:u} 22970ca9ec4SBryan Drewery.if (defined(_meta_filemon) && !exists(${.OBJDIR}/${__obj}.meta)) || \ 23070ca9ec4SBryan Drewery (!defined(_meta_filemon) && !exists(${.OBJDIR}/${DEPENDFILE}.${__obj})) 231d7beff08SBryan Drewery${__obj}: ${OBJS_DEPEND_GUESS} 232d7beff08SBryan Drewery${__obj}: ${OBJS_DEPEND_GUESS.${__obj}} 233d7beff08SBryan Drewery.endif 234d7beff08SBryan Drewery.endfor 235b9cd412eSBryan Drewery 236b9cd412eSBryan Drewery# Always run 'make depend' to generate dependencies early and to avoid the 237b9cd412eSBryan Drewery# need for manually running it. The dirdeps build should only do this in 238b9cd412eSBryan Drewery# sub-makes though since MAKELEVEL0 is for dirdeps calculations. 239b9cd412eSBryan Drewery.if ${MK_DIRDEPS_BUILD} == "no" || ${.MAKE.LEVEL} > 0 240b9cd412eSBryan Drewerybeforebuild: depend 241d7beff08SBryan Drewery.endif 242b9cd412eSBryan Drewery.endif # ${MK_FAST_DEPEND} == "yes" 243d7beff08SBryan Drewery 244d14f862cSGarrett Wollman.if !target(depend) 245d14f862cSGarrett Wollman.if defined(SRCS) 246b25a566dSRuslan Ermilovdepend: beforedepend ${DEPENDFILE} afterdepend 247b16495e7SWolfram Schneider 2487750ad47SMarcel Moolenaar# Tell bmake not to look for generated files via .PATH 249cf1eeb33SBryan Drewery.NOPATH: ${DEPENDFILE} ${DEPENDFILES_OBJS} 2507750ad47SMarcel Moolenaar 251473bcb01SBryan Drewery.if ${MK_FAST_DEPEND} == "no" 252473bcb01SBryan Drewery# Capture -include from CFLAGS. 253473bcb01SBryan Drewery# This could be simpler with bmake :tW but needs to support fmake for MFC. 254473bcb01SBryan Drewery_CFLAGS_INCLUDES= ${CFLAGS:Q:S/\\ /,/g:C/-include,/-include%/g:C/,/ /g:M-include*:C/%/ /g} 255473bcb01SBryan Drewery_CXXFLAGS_INCLUDES= ${CXXFLAGS:Q:S/\\ /,/g:C/-include,/-include%/g:C/,/ /g:M-include*:C/%/ /g} 256473bcb01SBryan Drewery 257a813856eSBruce Evans# Different types of sources are compiled with slightly different flags. 258a813856eSBruce Evans# Split up the sources, and filter out headers and non-applicable flags. 2592d122146SDimitry AndricMKDEP_CFLAGS= ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BIDU]*} ${CFLAGS:M-std=*} \ 260473bcb01SBryan Drewery ${CFLAGS:M-ansi} ${_CFLAGS_INCLUDES} 2612d122146SDimitry AndricMKDEP_CXXFLAGS= ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BIDU]*} \ 262473bcb01SBryan Drewery ${CXXFLAGS:M-std=*} ${CXXFLAGS:M-ansi} ${CXXFLAGS:M-stdlib=*} \ 263473bcb01SBryan Drewery ${_CXXFLAGS_INCLUDES} 264473bcb01SBryan Drewery.endif # ${MK_FAST_DEPEND} == "no" 26506d6e4fcSTom Rhodes 26611dc9298SRuslan ErmilovDPSRCS+= ${SRCS} 26768add213SBryan Drewery# FAST_DEPEND will only generate a .depend if _EXTRADEPEND is used but 26868add213SBryan Drewery# the target is created to allow 'make depend' to generate files. 26911dc9298SRuslan Ermilov${DEPENDFILE}: ${DPSRCS} 27080f9a973SBryan Drewery.if exists(${.OBJDIR}/${DEPENDFILE}) 271b16495e7SWolfram Schneider rm -f ${DEPENDFILE} 27280f9a973SBryan Drewery.endif 27380f9a973SBryan Drewery.if ${MK_FAST_DEPEND} == "no" 27465d2bdc6SRuslan Ermilov.if !empty(DPSRCS:M*.[cS]) 275a813856eSBruce Evans ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 27606d6e4fcSTom Rhodes ${MKDEP_CFLAGS} ${.ALLSRC:M*.[cS]} 277b16495e7SWolfram Schneider.endif 27865d2bdc6SRuslan Ermilov.if !empty(DPSRCS:M*.cc) || !empty(DPSRCS:M*.C) || !empty(DPSRCS:M*.cpp) || \ 27965d2bdc6SRuslan Ermilov !empty(DPSRCS:M*.cxx) 280b16495e7SWolfram Schneider ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 28106d6e4fcSTom Rhodes ${MKDEP_CXXFLAGS} \ 282c7cbe79eSDmitrij Tejblum ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 283cf1eeb33SBryan Drewery.else 284b16495e7SWolfram Schneider.endif 285cf1eeb33SBryan Drewery.endif # ${MK_FAST_DEPEND} == "no" 286663e9677SBruce Evans.if target(_EXTRADEPEND) 28770e82473SRuslan Ermilov_EXTRADEPEND: .USE 2880cfacc86SRuslan Ermilov${DEPENDFILE}: _EXTRADEPEND 289663e9677SBruce Evans.endif 290b16495e7SWolfram Schneider 29197fe7f47SJordan K. Hubbard.ORDER: ${DEPENDFILE} afterdepend 292d14f862cSGarrett Wollman.else 293b25a566dSRuslan Ermilovdepend: beforedepend afterdepend 294d14f862cSGarrett Wollman.endif 295d14f862cSGarrett Wollman.if !target(beforedepend) 296d14f862cSGarrett Wollmanbeforedepend: 29797fe7f47SJordan K. Hubbard.else 29897fe7f47SJordan K. Hubbard.ORDER: beforedepend ${DEPENDFILE} 29997fe7f47SJordan K. Hubbard.ORDER: beforedepend afterdepend 300d14f862cSGarrett Wollman.endif 301d14f862cSGarrett Wollman.if !target(afterdepend) 302d14f862cSGarrett Wollmanafterdepend: 303d14f862cSGarrett Wollman.endif 304d14f862cSGarrett Wollman.endif 305d14f862cSGarrett Wollman 3063d437ee2SBryan Drewery.if defined(SRCS) 307ae038fc3SBryan Drewery.if ${CTAGS:T} == "gtags" 308ae038fc3SBryan DreweryCLEANDEPENDFILES+= GPATH GRTAGS GSYMS GTAGS 309ae038fc3SBryan Drewery.if defined(HTML) 310ae038fc3SBryan DreweryCLEANDEPENDDIRS+= HTML 311ae038fc3SBryan Drewery.endif 312ae038fc3SBryan Drewery.else 313ae038fc3SBryan DreweryCLEANDEPENDFILES+= tags 314ae038fc3SBryan Drewery.endif 3153d437ee2SBryan Drewery.endif 316cd9a2f5cSJordan K. Hubbard.if !target(cleandepend) 317b25a566dSRuslan Ermilovcleandepend: 3183d437ee2SBryan Drewery.if !empty(CLEANDEPENDFILES) 319ae038fc3SBryan Drewery rm -f ${CLEANDEPENDFILES} 3203d437ee2SBryan Drewery.endif 321ae038fc3SBryan Drewery.if !empty(CLEANDEPENDDIRS) 322ae038fc3SBryan Drewery rm -rf ${CLEANDEPENDDIRS} 3236eb5e456SJordan K. Hubbard.endif 324cd9a2f5cSJordan K. Hubbard.endif 3256e02167bSRuslan Ermilov 3266e02167bSRuslan Ermilov.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD)) 32741ae64f3SEnji Cooper_LDADD_FROM_DPADD= ${DPADD:R:T:C;^lib(.*)$;-l\1;g} 32841ae64f3SEnji Cooper# Ignore -Wl,--start-group/-Wl,--end-group as it might be required in the 32941ae64f3SEnji Cooper# LDADD list due to unresolved symbols 33041ae64f3SEnji Cooper_LDADD_CANONICALIZED= ${LDADD:N:R:T:C;^lib(.*)$;-l\1;g:N-Wl,--[es]*-group} 3316e02167bSRuslan Ermilovcheckdpadd: 3322e3c6179SBruce Evans.if ${_LDADD_FROM_DPADD} != ${_LDADD_CANONICALIZED} 3332e3c6179SBruce Evans @echo ${.CURDIR} 3342e3c6179SBruce Evans @echo "DPADD -> ${_LDADD_FROM_DPADD}" 3352e3c6179SBruce Evans @echo "LDADD -> ${_LDADD_CANONICALIZED}" 3362e3c6179SBruce Evans.endif 3376e02167bSRuslan Ermilov.endif 338