bsd.dep.mk revision 117171
118334Speter# $FreeBSD: head/share/mk/bsd.dep.mk 117171 2003-07-02 16:43:07Z ru $ 290075Sobrien# 390075Sobrien# The include file <bsd.dep.mk> handles Makefile dependencies. 418334Speter# 590075Sobrien# 618334Speter# +++ variables +++ 790075Sobrien# 890075Sobrien# CTAGS A tags file generation program [gtags] 990075Sobrien# 1090075Sobrien# CTAGSFLAGS Options for ctags(1) [not set] 1118334Speter# 1290075Sobrien# DEPENDFILE dependencies file [.depend] 1390075Sobrien# 1490075Sobrien# GTAGSFLAGS Options for gtags(1) [-o] 1590075Sobrien# 1618334Speter# HTAGSFLAGS Options for htags(1) [not set] 1718334Speter# 1890075Sobrien# MKDEP Options for ${MKDEPCMD} [not set] 1990075Sobrien# 2090075Sobrien# MKDEPCMD Makefile dependency list program [mkdep] 2118334Speter# 2290075Sobrien# SRCS List of source files (c, c++, assembler) 2390075Sobrien# 2490075Sobrien# 2518334Speter# +++ targets +++ 2690075Sobrien# 2790075Sobrien# cleandepend: 2890075Sobrien# Remove depend and tags file 2990075Sobrien# 3018334Speter# depend: 3190075Sobrien# Make the dependencies for the source files, and store 3290075Sobrien# them in the file ${DEPENDFILE}. 3318334Speter# 3490075Sobrien# tags: 3590075Sobrien# In "ctags" mode, create a tags file for the source files. 3618334Speter# In "gtags" mode, create a (GLOBAL) gtags file for the 3790075Sobrien# source files. If HTML is defined, htags(1) is also run 3890075Sobrien# after gtags(1). 3918334Speter 4090075Sobrien.if !target(__<bsd.init.mk>__) 4190075Sobrien.error bsd.dep.mk cannot be included directly. 4290075Sobrien.endif 4390075Sobrien 4490075SobrienCTAGS?= gtags 4518334SpeterCTAGSFLAGS?= 4618334SpeterGTAGSFLAGS?= -o 4790075SobrienHTAGSFLAGS?= 4890075Sobrien 4990075Sobrien.if ${CC} != "cc" 5090075SobrienMKDEPCMD?= CC='${CC}' mkdep 5190075Sobrien.else 5218334SpeterMKDEPCMD?= mkdep 5318334Speter.endif 5490075SobrienDEPENDFILE?= .depend 5590075Sobrien 5690075Sobrien# Keep `tags' here, before SRCS are mangled below for `depend'. 5718334Speter.if !target(tags) && defined(SRCS) && !defined(NOTAGS) 5890075Sobrientags: ${SRCS} 5918334Speter.if ${CTAGS:T} == "ctags" 6018334Speter @${CTAGS} ${CTAGSFLAGS} -f /dev/stdout \ 6190075Sobrien ${.ALLSRC:N*.h} | sed "s;${.CURDIR}/;;" > ${.TARGET} 6290075Sobrien.elif ${CTAGS:T} == "gtags" 6390075Sobrien @cd ${.CURDIR} && ${CTAGS} ${GTAGSFLAGS} ${.OBJDIR} 6490075Sobrien.if defined(HTML) 6590075Sobrien @cd ${.CURDIR} && htags ${HTAGSFLAGS} -d ${.OBJDIR} ${.OBJDIR} 6650397Sobrien.endif 6750397Sobrien.endif 6890075Sobrien.endif 6990075Sobrien 7090075Sobrien.if defined(SRCS) 7150397SobrienCLEANFILES?= 7290075Sobrien 7350397Sobrien.for _LSRC in ${SRCS:M*.l:N*/*} 7418334Speter.for _LC in ${_LSRC:S/.l/.c/} 7590075Sobrien${_LC}: ${_LSRC} 7690075Sobrien ${LEX} -t ${LFLAGS} ${.ALLSRC} > ${.TARGET} 7790075SobrienSRCS:= ${SRCS:S/${_LSRC}/${_LC}/} 7890075SobrienCLEANFILES:= ${CLEANFILES} ${_LC} 7990075Sobrien.endfor 8090075Sobrien.endfor 8190075Sobrien 8290075Sobrien.for _YSRC in ${SRCS:M*.y:N*/*} 8390075Sobrien.for _YC in ${_YSRC:S/.y/.c/} 8490075SobrienSRCS:= ${SRCS:S/${_YSRC}/${_YC}/} 8590075SobrienCLEANFILES:= ${CLEANFILES} ${_YC} 8690075Sobrien.if ${YFLAGS:M-d} != "" && ${SRCS:My.tab.h} 8790075Sobrien.ORDER: ${_YC} y.tab.h 8890075Sobrien${_YC} y.tab.h: ${_YSRC} 8990075Sobrien ${YACC} ${YFLAGS} ${.ALLSRC} 9090075Sobrien cp y.tab.c ${_YC} 9190075SobrienSRCS:= ${SRCS} y.tab.h 9290075SobrienCLEANFILES:= ${CLEANFILES} y.tab.c y.tab.h 9390075Sobrien.elif ${YFLAGS:M-d} != "" 9490075Sobrien.for _YH in ${_YC:S/.c/.h/} 9590075Sobrien.ORDER: ${_YC} ${_YH} 9690075Sobrien${_YC} ${_YH}: ${_YSRC} 9790075Sobrien ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 9890075SobrienSRCS:= ${SRCS} ${_YH} 9990075SobrienCLEANFILES:= ${CLEANFILES} ${_YH} 10090075Sobrien.endfor 10190075Sobrien.else 10290075Sobrien${_YC}: ${_YSRC} 10390075Sobrien ${YACC} ${YFLAGS} -o ${_YC} ${.ALLSRC} 10490075Sobrien.endif 10590075Sobrien.endfor 10690075Sobrien.endfor 10790075Sobrien.endif 10890075Sobrien 10990075Sobrien.if !target(depend) 11090075Sobrien.if defined(SRCS) 11190075Sobriendepend: beforedepend ${DEPENDFILE} afterdepend 11290075Sobrien 11390075Sobrien# Different types of sources are compiled with slightly different flags. 11418334Speter# Split up the sources, and filter out headers and non-applicable flags. 11590075Sobrien${DEPENDFILE}: ${SRCS} 11690075Sobrien rm -f ${DEPENDFILE} 11750397Sobrien.if ${SRCS:M*.[cS]} != "" 11890075Sobrien ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 11918334Speter ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \ 12090075Sobrien ${.ALLSRC:M*.[cS]} 12118334Speter.endif 12290075Sobrien.if ${SRCS:M*.cc} != "" || ${SRCS:M*.C} != "" || ${SRCS:M*.cpp} != "" || \ 12390075Sobrien ${SRCS:M*.cxx} != "" 12490075Sobrien ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 12518334Speter ${CXXFLAGS:M-nostdinc*} ${CXXFLAGS:M-[BID]*} \ 12690075Sobrien ${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cpp} ${.ALLSRC:M*.cxx} 12790075Sobrien.endif 12890075Sobrien.if ${SRCS:M*.m} != "" 12918334Speter ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \ 13090075Sobrien ${OBJCFLAGS:M-nostdinc*} ${OBJCFLAGS:M-[BID]*} \ 13190075Sobrien ${OBJCFLAGS:M-Wno-import*} \ 13252284Sobrien ${.ALLSRC:M*.m} 13318334Speter.endif 13490075Sobrien.if target(_EXTRADEPEND) 13518334Speter_EXTRADEPEND: .USE 13690075Sobrien${DEPENDFILE}: _EXTRADEPEND 13718334Speter.endif 13890075Sobrien 13918334Speter.ORDER: ${DEPENDFILE} afterdepend 14090075Sobrien.else 14118334Speterdepend: beforedepend afterdepend 14290075Sobrien.endif 14318334Speter.if !target(beforedepend) 14490075Sobrienbeforedepend: 14518334Speter.else 14690075Sobrien.ORDER: beforedepend ${DEPENDFILE} 14718334Speter.ORDER: beforedepend afterdepend 14818334Speter.endif 14918334Speter.if !target(afterdepend) 15018334Speterafterdepend: 15118334Speter.endif 15218334Speter.endif 15318334Speter 15418334Speter.if !target(cleandepend) 15518334Spetercleandepend: 15618334Speter.if defined(SRCS) 15718334Speter.if ${CTAGS:T} == "ctags" 15890075Sobrien rm -f ${DEPENDFILE} tags 15918334Speter.elif ${CTAGS:T} == "gtags" 16018334Speter rm -f ${DEPENDFILE} GPATH GRTAGS GSYMS GTAGS 16118334Speter.if defined(HTML) 16218334Speter rm -rf HTML 16318334Speter.endif 16418334Speter.endif 16518334Speter.endif 16618334Speter.endif 16750397Sobrien 16818334Speter.if !target(checkdpadd) && (defined(DPADD) || defined(LDADD)) 16918334Spetercheckdpadd: 17090075Sobrien @ldadd=`echo \`for lib in ${DPADD} ; do \ 17190075Sobrien echo $$lib | sed 's;^/usr/lib/lib\(.*\)\.a;-l\1;' ; \ 17218334Speter done \`` ; \ 17318334Speter ldadd1=`echo ${LDADD}` ; \ 17418334Speter if [ "$$ldadd" != "$$ldadd1" ] ; then \ 17518334Speter echo ${.CURDIR} ; \ 17618334Speter echo "DPADD -> $$ldadd" ; \ 17718334Speter echo "LDADD -> $$ldadd1" ; \ 17818334Speter fi 17918334Speter.endif 18018334Speter