150476Speter# $FreeBSD$ 215903Swosch# 315903Swosch# The include file <bsd.dep.mk> handles Makefile dependencies. 415903Swosch# 515903Swosch# 615903Swosch# +++ variables +++ 715903Swosch# 8105327Sru# CTAGS A tags file generation program [gtags] 9105327Sru# 10105327Sru# CTAGSFLAGS Options for ctags(1) [not set] 11105327Sru# 1215903Swosch# DEPENDFILE dependencies file [.depend] 1315903Swosch# 14105327Sru# GTAGSFLAGS Options for gtags(1) [-o] 15105327Sru# 16105327Sru# HTAGSFLAGS Options for htags(1) [not set] 17105327Sru# 1815903Swosch# MKDEP Options for ${MKDEPCMD} [not set] 1915903Swosch# 2015903Swosch# MKDEPCMD Makefile dependency list program [mkdep] 21139761Skrion# 2215903Swosch# SRCS List of source files (c, c++, assembler) 2315903Swosch# 24124490Sru# DPSRCS List of source files which are needed for generating 25124490Sru# dependencies, ${SRCS} are always part of it. 2615903Swosch# 2715903Swosch# +++ targets +++ 2815903Swosch# 2915903Swosch# cleandepend: 3015903Swosch# Remove depend and tags file 3115903Swosch# 3215903Swosch# depend: 3315903Swosch# Make the dependencies for the source files, and store 3415903Swosch# them in the file ${DEPENDFILE}. 3515903Swosch# 3615903Swosch# tags: 37105327Sru# In "ctags" mode, create a tags file for the source files. 38105327Sru# In "gtags" mode, create a (GLOBAL) gtags file for the 39105327Sru# source files. If HTML is defined, htags(1) is also run 40105327Sru# after gtags(1). 411845Swollman 4295255Sru.if !target(__<bsd.init.mk>__) 4395255Sru.error bsd.dep.mk cannot be included directly. 4495255Sru.endif 4515903Swosch 46105327SruCTAGS?= gtags 47105327SruCTAGSFLAGS?= 48105327SruGTAGSFLAGS?= -o 49105327SruHTAGSFLAGS?= 50105327Sru 5194768Sru.if ${CC} != "cc" 5296132SbdeMKDEPCMD?= CC='${CC}' mkdep 5394768Sru.else 5494768SruMKDEPCMD?= mkdep 5594768Sru.endif 5614986SwoschDEPENDFILE?= .depend 5714986Swosch 58105327Sru# Keep `tags' here, before SRCS are mangled below for `depend'. 59139108Sru.if !target(tags) && defined(SRCS) && !defined(NO_TAGS) 60105327Srutags: ${SRCS} 61202579Sru.if ${CTAGS:T} == "gtags" 62105327Sru @cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR} 63105327Sru.if defined(HTML) 64105327Sru @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 65105327Sru.endif 66202579Sru.else 67202579Sru @${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \ 68202579Sru ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET} 69105327Sru.endif 70105327Sru.endif 71105327Sru 7235951Sbde.if defined(SRCS) 7335951SbdeCLEANFILES?= 7435951Sbde 75124637Sru.if !exists(${.OBJDIR}/${DEPENDFILE}) 76269946Srpaulo.for _S in ${SRCS:N*.[dhly]} 77124637Sru${_S:R}.o: ${_S} 78124637Sru.endfor 79124637Sru.endif 80124637Sru 81269324Srpaulo# Lexical analyzers 8235951Sbde.for _LSRC in ${SRCS:M*.l:N*/*} 83124435Sru.for _LC in ${_LSRC:R}.c 8435951Sbde${_LC}: ${_LSRC} 85270408Sdes ${LEX} ${LFLAGS} -o${.TARGET} ${.ALLSRC} 86124637Sru.if !exists(${.OBJDIR}/${DEPENDFILE}) 87124637Sru${_LC:R}.o: ${_LC} 88124637Sru.endif 8935951SbdeSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 90124435SruCLEANFILES+= ${_LC} 9135951Sbde.endfor 9235951Sbde.endfor 9335951Sbde 94269324Srpaulo# Yacc grammars 9535951Sbde.for _YSRC in ${SRCS:M*.y:N*/*} 96124435Sru.for _YC in ${_YSRC:R}.c 9735951SbdeSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 98124435SruCLEANFILES+= ${_YC} 99125119Sru.if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h) 100241790Smarcel.ORDER: ${_YC} y.tab.h 101241790Smarcel${_YC} y.tab.h: ${_YSRC} 10235951Sbde ${YACC} ${YFLAGS} ${.ALLSRC} 10335951Sbde cp y.tab.c ${_YC} 104124435SruCLEANFILES+= y.tab.c y.tab.h 105125119Sru.elif !empty(YFLAGS:M-d) 106124435Sru.for _YH in ${_YC:R}.h 107296763Sbdrewery.ORDER: ${_YC} ${_YH} 108296763Sbdrewery${_YC} ${_YH}: ${_YSRC} 10935951Sbde ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 110124435SruSRCS+= ${_YH} 111124435SruCLEANFILES+= ${_YH} 11235951Sbde.endfor 11335951Sbde.else 11435951Sbde${_YC}: ${_YSRC} 11535951Sbde ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 11635951Sbde.endif 117124637Sru.if !exists(${.OBJDIR}/${DEPENDFILE}) 118124637Sru${_YC:R}.o: ${_YC} 119124637Sru.endif 12035951Sbde.endfor 12135951Sbde.endfor 122269324Srpaulo 123269324Srpaulo# DTrace probe definitions 124269946Srpaulo# libelf is currently needed for drti.o 125269946Srpaulo.if ${SRCS:M*.d} 126269946SrpauloLDFLAGS+= -lelf 127269946SrpauloLDADD+= ${LIBELF} 128269946SrpauloCFLAGS+= -D_DTRACE_VERSION=1 -I${.OBJDIR} 129269946Srpaulo.endif 130269324Srpaulo.for _DSRC in ${SRCS:M*.d:N*/*} 131269946Srpaulo.for _D in ${_DSRC:R} 132269946SrpauloDHDRS+= ${_D}.h 133269946Srpaulo${_D}.h: ${_DSRC} 134269946Srpaulo ${DTRACE} -xnolibs -h -s ${.ALLSRC} 135269946SrpauloSRCS:= ${SRCS:S/${_DSRC}/${_D}.h/} 136269946SrpauloOBJS+= ${_D}.o 137269946SrpauloCLEANFILES+= ${_D}.h ${_D}.o 138269946Srpaulo${_D}.o: ${_D}.h ${OBJS:S/${_D}.o//} 139269946Srpaulo ${DTRACE} -xnolibs -G -o ${.TARGET} -s ${.CURDIR}/${_DSRC} \ 140269946Srpaulo ${OBJS:S/${_D}.o//} 141269946Srpaulo.if defined(LIB) 142269946SrpauloCLEANFILES+= ${_D}.So ${_D}.po 143269946Srpaulo${_D}.So: ${_D}.h ${SOBJS:S/${_D}.So//} 144269946Srpaulo ${DTRACE} -xnolibs -G -o ${.TARGET} -s ${.CURDIR}/${_DSRC} \ 145269946Srpaulo ${SOBJS:S/${_D}.So//} 146269946Srpaulo${_D}.po: ${_D}.h ${POBJS:S/${_D}.po//} 147269946Srpaulo ${DTRACE} -xnolibs -G -o ${.TARGET} -s ${.CURDIR}/${_DSRC} \ 148269946Srpaulo ${POBJS:S/${_D}.po//} 149269946Srpaulo.endif 150269324Srpaulo.endfor 151269324Srpaulo.endfor 152269946Srpaulobeforedepend: ${DHDRS} 153269946Srpaulobeforebuild: ${DHDRS} 15435951Sbde.endif 15535951Sbde 1561845Swollman.if !target(depend) 15730113Sjkh.if defined(SRCS) 15895306Srudepend: beforedepend ${DEPENDFILE} afterdepend 15914986Swosch 160241298Smarcel# Tell bmake not to look for generated files via .PATH 161241298Smarcel.NOPATH: ${DEPENDFILE} 162241298Smarcel 163294737Sbdrewery# Capture -include from CFLAGS. 164294737Sbdrewery# This could be simpler with bmake :tW but needs to support fmake for MFC. 165294737Sbdrewery_CFLAGS_INCLUDES= ${CFLAGS:Q:S/\\ /,/g:C/-include,/-include%/g:C/,/ /g:M-include*:C/%/ /g} 166294737Sbdrewery_CXXFLAGS_INCLUDES= ${CXXFLAGS:Q:S/\\ /,/g:C/-include,/-include%/g:C/,/ /g:M-include*:C/%/ /g} 167294737Sbdrewery 16834181Sbde# Different types of sources are compiled with slightly different flags. 16934181Sbde# Split up the sources, and filter out headers and non-applicable flags. 170239613SdimMKDEP_CFLAGS= ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BIDU]*} ${CFLAGS:M-std=*} \ 171294737Sbdrewery ${CFLAGS:M-ansi} ${_CFLAGS_INCLUDES} 172239613SdimMKDEP_CXXFLAGS= ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BIDU]*} \ 173294737Sbdrewery ${CXXFLAGS:M-std=*} ${CXXFLAGS:M-ansi} ${CXXFLAGS:M-stdlib=*} \ 174294737Sbdrewery ${_CXXFLAGS_INCLUDES} 175126890Strhodes 176124490SruDPSRCS+= ${SRCS} 177124490Sru${DEPENDFILE}: ${DPSRCS} 17814986Swosch rm -f ${DEPENDFILE} 179125119Sru.if !empty(DPSRCS:M*.[cS]) 18034181Sbde ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 181126890Strhodes ${MKDEP_CFLAGS} ${.ALLSRC:M*.[cS]} 18214986Swosch.endif 183125119Sru.if !empty(DPSRCS:M*.cc) || !empty(DPSRCS:M*.C) || !empty(DPSRCS:M*.cpp) || \ 184125119Sru !empty(DPSRCS:M*.cxx) 18514986Swosch ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 186126890Strhodes ${MKDEP_CXXFLAGS} \ 18736673Sdt ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 18814986Swosch.endif 18924750Sbde.if target(_EXTRADEPEND) 19094922Sru_EXTRADEPEND: .USE 19194841Sru${DEPENDFILE}: _EXTRADEPEND 19224750Sbde.endif 19314986Swosch 19430113Sjkh.ORDER: ${DEPENDFILE} afterdepend 1951845Swollman.else 19695306Srudepend: beforedepend afterdepend 1971845Swollman.endif 1981845Swollman.if !target(beforedepend) 1991845Swollmanbeforedepend: 20030113Sjkh.else 20130113Sjkh.ORDER: beforedepend ${DEPENDFILE} 20230113Sjkh.ORDER: beforedepend afterdepend 2031845Swollman.endif 2041845Swollman.if !target(afterdepend) 2051845Swollmanafterdepend: 2061845Swollman.endif 2071845Swollman.endif 2081845Swollman 20916663Sjkh.if !target(cleandepend) 21095306Srucleandepend: 21128806Sbde.if defined(SRCS) 212202579Sru.if ${CTAGS:T} == "gtags" 213105327Sru rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS 21424861Sjkh.if defined(HTML) 215105327Sru rm -rf HTML 21616663Sjkh.endif 217202578Sru.else 218202579Sru rm -f ${DEPENDFILE} tags 21916663Sjkh.endif 22024861Sjkh.endif 221105327Sru.endif 22299344Sru 22399344Sru.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD)) 224273500Sngie_LDADD_FROM_DPADD= ${DPADD:R:T:C;^lib(.*)$;-l\1;g} 225273500Sngie# Ignore -Wl,--start-group/-Wl,--end-group as it might be required in the 226273500Sngie# LDADD list due to unresolved symbols 227273500Sngie_LDADD_CANONICALIZED= ${LDADD:N:R:T:C;^lib(.*)$;-l\1;g:N-Wl,--[es]*-group} 22899344Srucheckdpadd: 229117195Sbde.if ${_LDADD_FROM_DPADD} != ${_LDADD_CANONICALIZED} 230117195Sbde @echo ${.CURDIR} 231117195Sbde @echo "DPADD -> ${_LDADD_FROM_DPADD}" 232117195Sbde @echo "LDADD -> ${_LDADD_CANONICALIZED}" 23399344Sru.endif 234117195Sbde.endif 235