bsd.dep.mk revision 92361
178344Sobrien# $FreeBSD: head/share/mk/bsd.dep.mk 92361 2002-03-15 18:43:59Z obrien $ 278344Sobrien# 398184Sgordon# The include file <bsd.dep.mk> handles Makefile dependencies. 478344Sobrien# 578344Sobrien# 678344Sobrien# +++ variables +++ 7140339Sobrien# 898184Sgordon# DEPENDFILE dependencies file [.depend] 978344Sobrien# 1078344Sobrien# MKDEP Options for ${MKDEPCMD} [not set] 1178344Sobrien# 1278344Sobrien# MKDEPCMD Makefile dependency list program [mkdep] 1398184Sgordon# 1478344Sobrien# SRCS List of source files (c, c++, assembler) 1578344Sobrien# 1678344Sobrien# 1778344Sobrien# +++ targets +++ 1878344Sobrien# 19165664Syar# cleandepend: 20159833Sflz# Remove depend and tags file 21124618Smtm# 22124618Smtm# depend: 23124618Smtm# Make the dependencies for the source files, and store 24124618Smtm# them in the file ${DEPENDFILE}. 25124618Smtm# 26154114Sdougb# tags: 27154114Sdougb# Create a (GLOBAL) gtags file for the source files. 28159833Sflz# If HTML is defined, htags is also run after gtags. 29159833Sflz 30159833Sflz 31159833SflzMKDEPCMD?= env CC=${CC} mkdep 32154114SdougbDEPENDFILE?= .depend 33154114Sdougb 34124618Smtm.if defined(SRCS) 35124618SmtmCLEANFILES?= 36124618Smtm 37124618Smtm.for _LSRC in ${SRCS:M*.l:N*/*} 38124618Smtm.for _LC in ${_LSRC:S/.l/.c/} 39179945Smtm${_LC}: ${_LSRC} 40124618Smtm ${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET} 41124618SmtmSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 42154114SdougbCLEANFILES:= ${CLEANFILES} ${_LC} 43154114Sdougb.endfor 44154114Sdougb.endfor 45154114Sdougb 46159833Sflz.for _YSRC in ${SRCS:M*.y:N*/*} 47159833Sflz.for _YC in ${_YSRC:S/.y/.c/} 48159833SflzSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 49159833SflzCLEANFILES:= ${CLEANFILES} ${_YC} 50154114Sdougb.if ${YFLAGS:M-d} != "" && ${SRCS:My.tab.h} 51154114Sdougb.ORDER: ${_YC} y.tab.h 52174567Sjhb${_YC} y.tab.h: ${_YSRC} 53174567Sjhb ${YACC} ${YFLAGS} ${.ALLSRC} 54174567Sjhb cp y.tab.c ${_YC} 55174567SjhbSRCS:= ${SRCS} y.tab.h 56174567SjhbCLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h 57174567Sjhb.elif ${YFLAGS:M-d} != "" 58179945Smtm.for _YH in ${_YC:S/.c/.h/} 59179945Smtm.ORDER: ${_YC} ${_YH} 60174567Sjhb${_YC} ${_YH}: ${_YSRC} 61154114Sdougb ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 62154114SdougbSRCS:= ${SRCS} ${_YH} 63154114SdougbCLEANFILES:= ${CLEANFILES} ${_YH} 64124618Smtm.endfor 65124618Smtm.else 66124618Smtm${_YC}: ${_YSRC} 67124618Smtm ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 68124618Smtm.endif 69124618Smtm.endfor 70124618Smtm.endfor 71117077Strhodes.endif 72103436Speter 73103436Speter.if !target(depend) 74103436Speter.if defined(SRCS) 75179945Smtmdepend: beforedepend ${DEPENDFILE} afterdepend _SUBDIR 76179945Smtm 77124618Smtm# Different types of sources are compiled with slightly different flags. 78124618Smtm# Split up the sources, and filter out headers and non-applicable flags. 79124618Smtm${DEPENDFILE}: ${SRCS} 80124618Smtm rm -f ${DEPENDFILE} 8178344Sobrien.if ${SRCS:M*.[sS]} != "" 8278344Sobrien ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 8378344Sobrien ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ 8478344Sobrien ${AINC} \ 85 ${.ALLSRC:M*.[sS]} 86.endif 87.if ${SRCS:M*.c} != "" 88 ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 89 ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ 90 ${.ALLSRC:M*.c} 91.endif 92.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cpp} != "" || \ 93 ${SRCS:M*.cxx} != "" 94 ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 95 ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \ 96 ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 97.endif 98.if ${SRCS:M*.m} != "" 99 ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 100 ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \ 101 ${OBJCFLAGS:M-Wno-import*} \ 102 ${.ALLSRC:M*.m} 103.endif 104.if target(_EXTRADEPEND) 105 cd ${.CURDIR}; ${MAKE} _EXTRADEPEND 106.endif 107 108.ORDER: ${DEPENDFILE} afterdepend 109.else 110depend: beforedepend afterdepend _SUBDIR 111.endif 112.if !target(beforedepend) 113beforedepend: 114.else 115.ORDER: beforedepend ${DEPENDFILE} 116.ORDER: beforedepend afterdepend 117.endif 118.if !target(afterdepend) 119afterdepend: 120.endif 121.endif 122 123.if defined(NOTAGS) 124tags: 125.endif 126 127.if !target(tags) 128tags: ${SRCS} _SUBDIR 129 @cd ${.CURDIR} && gtags ${GTAGSFLAGS} ${.OBJDIR} 130.if defined(HTML) 131 @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 132.endif 133.endif 134 135.if !target(cleandepend) 136cleandepend: _SUBDIR 137.if defined(SRCS) 138 rm -f ${DEPENDFILE} ${.OBJDIR}/GPATH ${.OBJDIR}/GRTAGS \ 139 ${.OBJDIR}/GSYMS ${.OBJDIR}/GTAGS 140.if defined(HTML) 141 rm -rf ${.OBJDIR}/HTML 142.endif 143.endif 144.endif 145