bsd.dep.mk revision 240006
1139743Simp# $FreeBSD: stable/9/share/mk/bsd.dep.mk 240006 2012-09-02 11:44:30Z dim $ 239213Sgibbs# 339213Sgibbs# The include file <bsd.dep.mk> handles Makefile dependencies. 439213Sgibbs# 539213Sgibbs# 639213Sgibbs# +++ variables +++ 739213Sgibbs# 839213Sgibbs# CTAGS A tags file generation program [gtags] 939213Sgibbs# 1039213Sgibbs# CTAGSFLAGS Options for ctags(1) [not set] 1139213Sgibbs# 1239213Sgibbs# DEPENDFILE dependencies file [.depend] 1339213Sgibbs# 1439213Sgibbs# GTAGSFLAGS Options for gtags(1) [-o] 1539213Sgibbs# 1639213Sgibbs# HTAGSFLAGS Options for htags(1) [not set] 1739213Sgibbs# 1839213Sgibbs# MKDEP Options for ${MKDEPCMD} [not set] 1939213Sgibbs# 2039213Sgibbs# MKDEPCMD Makefile dependency list program [mkdep] 2139213Sgibbs# 2239213Sgibbs# SRCS List of source files (c, c++, assembler) 2339213Sgibbs# 2439213Sgibbs# DPSRCS List of source files which are needed for generating 2539213Sgibbs# dependencies, ${SRCS} are always part of it. 2639213Sgibbs# 2739213Sgibbs# +++ targets +++ 2839213Sgibbs# 29116162Sobrien# cleandepend: 30116162Sobrien# Remove depend and tags file 31116162Sobrien# 3239213Sgibbs# depend: 3360767Sken# Make the dependencies for the source files, and store 3460767Sken# them in the file ${DEPENDFILE}. 3539213Sgibbs# 3639213Sgibbs# tags: 3760041Sphk# In "ctags" mode, create a tags file for the source files. 3879483Smjacob# In "gtags" mode, create a (GLOBAL) gtags file for the 39119718Sken# source files. If HTML is defined, htags(1) is also run 40168752Sscottl# after gtags(1). 41168752Sscottl 42168982Sscottl.if !target(__<bsd.init.mk>__) 4339213Sgibbs.error bsd.dep.mk cannot be included directly. 4450107Smsmith.endif 4539213Sgibbs 4649558SphkCTAGS?= gtags 47249939SsmhCTAGSFLAGS?= 48251792SmavGTAGSFLAGS?= -o 49300207SkenHTAGSFLAGS?= 50223089Sgibbs 51112946Sphk.if ${CC} != "cc" 52168982SscottlMKDEPCMD?= CC='${CC}' mkdep 53112946Sphk.else 5460767SkenMKDEPCMD?= mkdep 5560767Sken.endif 5660767SkenDEPENDFILE?= .depend 5760767Sken 5860767Sken# Keep `tags' here, before SRCS are mangled below for `depend'. 5939213Sgibbs.if !target(tags) && defined(SRCS) && !defined(NO_TAGS) 6039213Sgibbstags: ${SRCS} 6139213Sgibbs.if ${CTAGS:T} == "gtags" 6239213Sgibbs @cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR} 63168752Sscottl.if defined(HTML) 64298002Simp @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 6539213Sgibbs.endif 6639213Sgibbs.else 6760767Sken @${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \ 6860767Sken ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET} 6960767Sken.endif 70300207Sken.endif 71300207Sken 72300207Sken.if defined(SRCS) 73300207SkenCLEANFILES?= 74300207Sken 75300207Sken.if !exists(${.OBJDIR}/${DEPENDFILE}) 76300207Sken.for _S in ${SRCS:N*.[hly]} 77300207Sken${_S:R}.o: ${_S} 78300207Sken.endfor 79300207Sken.endif 80300207Sken 8139213Sgibbs.for _LSRC in ${SRCS:M*.l:N*/*} 82249939Ssmh.for _LC in ${_LSRC:R}.c 83249939Ssmh${_LC}: ${_LSRC} 84249939Ssmh ${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET} 85249939Ssmh.if !exists(${.OBJDIR}/${DEPENDFILE}) 86249941Ssmh${_LC:R}.o: ${_LC} 87249939Ssmh.endif 88300207SkenSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 89300207SkenCLEANFILES+= ${_LC} 90300207Sken.endfor 91300207Sken.endfor 92300207Sken 9339213Sgibbs.for _YSRC in ${SRCS:M*.y:N*/*} 9439213Sgibbs.for _YC in ${_YSRC:R}.c 9539213SgibbsSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 9639213SgibbsCLEANFILES+= ${_YC} 97300207Sken.if !empty(YFLAGS:M-d) && !empty(SRCS:My.tab.h) 98300207Sken.ORDER: ${_YC} y.tab.h 99300207Sken${_YC} y.tab.h: ${_YSRC} 100300207Sken ${YACC} ${YFLAGS} ${.ALLSRC} 101300207Sken cp y.tab.c ${_YC} 102300207SkenCLEANFILES+= y.tab.c y.tab.h 103300207Sken.elif !empty(YFLAGS:M-d) 104300207Sken.for _YH in ${_YC:R}.h 105300207Sken.ORDER: ${_YC} ${_YH} 106300207Sken${_YC} ${_YH}: ${_YSRC} 107300207Sken ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 108300207SkenSRCS+= ${_YH} 109300207SkenCLEANFILES+= ${_YH} 110300207Sken.endfor 111300207Sken.else 112300207Sken${_YC}: ${_YSRC} 113300207Sken ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 114300207Sken.endif 11539213Sgibbs.if !exists(${.OBJDIR}/${DEPENDFILE}) 11639213Sgibbs${_YC:R}.o: ${_YC} 11739213Sgibbs.endif 11840051Sken.endfor 11941458Sken.endfor 120119308Snjl.endif 121228820Smav 122253803Smav.if !target(depend) 123264834Smav.if defined(SRCS) 124278111Smavdepend: beforedepend ${DEPENDFILE} afterdepend 125300207Sken 126300207Sken# Different types of sources are compiled with slightly different flags. 12740051Sken# Split up the sources, and filter out headers and non-applicable flags. 12840051SkenMKDEP_CFLAGS= ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BIDU]*} ${CFLAGS:M-std=*} \ 129250792Ssmh ${CFLAGS:M-ansi} 130250792SsmhMKDEP_CXXFLAGS= ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BIDU]*} \ 131250792Ssmh ${CXXFLAGS:M-std=*} ${CXXFLAGS:M-ansi} ${CXXFLAGS:M-stdlib=*} 132250792Ssmh 133250792SsmhDPSRCS+= ${SRCS} 134253803Smav${DEPENDFILE}: ${DPSRCS} 135278111Smav rm -f ${DEPENDFILE} 136278111Smav.if !empty(DPSRCS:M*.[cS]) 137300207Sken ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 138300207Sken ${MKDEP_CFLAGS} ${.ALLSRC:M*.[cS]} 139250792Ssmh.endif 14040051Sken.if !empty(DPSRCS:M*.cc) || !empty(DPSRCS:M*.C) || !empty(DPSRCS:M*.cpp) || \ 141249939Ssmh !empty(DPSRCS:M*.cxx) 142249939Ssmh ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 143249939Ssmh ${MKDEP_CXXFLAGS} \ 144249939Ssmh ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 145249941Ssmh.endif 146249941Ssmh.if target(_EXTRADEPEND) 147249941Ssmh_EXTRADEPEND: .USE 148249941Ssmh${DEPENDFILE}: _EXTRADEPEND 149249941Ssmh.endif 150249941Ssmh 151300207Sken.ORDER: ${DEPENDFILE} afterdepend 152300207Sken.else 153300207Skendepend: beforedepend afterdepend 154300207Sken.endif 155300207Sken.if !target(beforedepend) 156300207Skenbeforedepend: 157300207Sken.else 15839213Sgibbs.ORDER: beforedepend ${DEPENDFILE} 15939213Sgibbs.ORDER: beforedepend afterdepend 160249939Ssmh.endif 161249939Ssmh.if !target(afterdepend) 162249939Ssmhafterdepend: 163249939Ssmh.endif 164249939Ssmh.endif 165249939Ssmh 166249939Ssmh.if !target(cleandepend) 167249939Ssmhcleandepend: 168249939Ssmh.if defined(SRCS) 169230053Smav.if ${CTAGS:T} == "gtags" 170230053Smav rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS 171230053Smav.if defined(HTML) 172249939Ssmh rm -rf HTML 173249939Ssmh.endif 174249939Ssmh.else 175249939Ssmh rm -f ${DEPENDFILE} tags 176230053Smav.endif 177250183Ssmh.endif 178249939Ssmh.endif 179230053Smav 180230053Smav.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD)) 181300207Sken_LDADD_FROM_DPADD= ${DPADD:C;^/usr/lib/lib(.*)\.a$;-l\1;} 182300207Sken_LDADD_CANONICALIZED= ${LDADD:S/$//} 183300207Skencheckdpadd: 184300207Sken.if ${_LDADD_FROM_DPADD} != ${_LDADD_CANONICALIZED} 185300207Sken @echo ${.CURDIR} 186300207Sken @echo "DPADD -> ${_LDADD_FROM_DPADD}" 187300207Sken @echo "LDADD -> ${_LDADD_CANONICALIZED}" 188300207Sken.endif 189300207Sken.endif 190300207Sken