Home | History | Annotate | Line # | Download | only in mk
      1 #	$NetBSD: bsd.dep.mk,v 1.89 2023/06/03 21:23:07 lukem Exp $
      2 
      3 .include <bsd.init.mk>
      4 
      5 ##### Basic targets
      6 realdepend:	beforedepend .depend afterdepend
      7 .ORDER:		beforedepend .depend afterdepend
      8 
      9 beforedepend .depend afterdepend: # ensure existence
     10 
     11 ##### Default values
     12 MKDEP?=			mkdep
     13 MKDEPCXX?=		mkdep
     14 MKDEP_SUFFIXES?=	.o .d
     15 
     16 ##### Build rules
     17 # some of the rules involve .h sources, so remove them from mkdep line
     18 
     19 .if defined(SRCS) && !empty(SRCS)
     20 __acpp_flags=	${_ASM_TRADITIONAL_CPP}
     21 
     22 .if defined(NODPSRCS)
     23 .for f in ${SRCS} ${DPSRCS}
     24 .if "${NODPSRCS:M${f}}" == ""
     25 __DPSRCS.all+=	${f:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/}
     26 .endif
     27 .endfor
     28 beforedepend: ${DPSRCS}
     29 .else
     30 __DPSRCS.all+=	${SRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/} \
     31 		${DPSRCS:C/\.(c|m|s|S|C|cc|cpp|cxx)$/.d/}
     32 .endif
     33 __DPSRCS.d=	${__DPSRCS.all:O:u:M*.d}
     34 __DPSRCS.notd=	${__DPSRCS.all:O:u:N*.d}
     35 
     36 .NOPATH: .depend ${__DPSRCS.d}
     37 
     38 .if !empty(__DPSRCS.d)							# {
     39 ${__DPSRCS.d}: ${__DPSRCS.notd} ${DPSRCS}
     40 .endif									# }
     41 
     42 MKDEPSUFFLAGS=-s ${MKDEP_SUFFIXES:Q}
     43 
     44 .if ${MKDEPINCLUDES} != "no"
     45 .STALE:
     46 	@echo Rebuilding dependency file: ${.ALLSRC}
     47 	@rm -f ${.ALLSRC}
     48 	@(cd ${.CURDIR} && ${MAKE} depend)
     49 _MKDEP_MERGEFLAGS=-i
     50 _MKDEP_FILEFLAGS=${MKDEPSUFFLAGS}
     51 .else
     52 _MKDEP_MERGEFLAGS=${MKDEPSUFFLAGS}
     53 _MKDEP_FILEFLAGS=
     54 .endif
     55 
     56 .depend: ${__DPSRCS.d}
     57 	${_MKTARGET_CREATE}
     58 	rm -f .depend
     59 	${MKDEP} ${_MKDEP_MERGEFLAGS} -d -f ${.TARGET} ${__DPSRCS.d}
     60 
     61 .SUFFIXES: .d .s .S .c .C .cc .cpp .cxx .m
     62 
     63 .c.d:
     64 	${_MKTARGET_CREATE}
     65 	${MKDEP} -f ${.TARGET}.tmp ${_MKDEP_FILEFLAGS} -- ${MKDEPFLAGS} \
     66 	    ${CFLAGS:M-std=*} ${CFLAGS:C/-([IDUW])[  ]*/-\1/Wg:M-[IDUW]*} \
     67 	    ${CPPFLAGS:N-Wp,-iremap,*} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \
     68 	    ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} && \
     69 	    ${MV} ${.TARGET}.tmp ${.TARGET}
     70 
     71 .m.d:
     72 	${_MKTARGET_CREATE}
     73 	${MKDEP} -f ${.TARGET}.tmp ${_MKDEP_FILEFLAGS} -- ${MKDEPFLAGS} \
     74 	    ${OBJCFLAGS:C/-([IDUW])[  ]*/-\1/Wg:M-[IDUW]*} \
     75 	    ${CPPFLAGS:N-Wp,-iremap,*} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \
     76 	    ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} && \
     77 	    ${MV} ${.TARGET}.tmp ${.TARGET}
     78 
     79 .s.d .S.d:
     80 	${_MKTARGET_CREATE}
     81 	${MKDEP} -f ${.TARGET}.tmp ${_MKDEP_FILEFLAGS} -- ${MKDEPFLAGS} \
     82 	    ${AFLAGS:C/-([IDUW])[  ]*/-\1/Wg:M-[IDUW]*} \
     83 	    ${CPPFLAGS:N-Wp,-iremap,*} ${AFLAGS.${.IMPSRC:T}} ${CPPFLAGS.${.IMPSRC:T}} \
     84 	    ${__acpp_flags} ${.IMPSRC} && \
     85 	    ${MV} ${.TARGET}.tmp ${.TARGET}
     86 
     87 .C.d .cc.d .cpp.d .cxx.d:
     88 	${_MKTARGET_CREATE}
     89 	${MKDEPCXX} -f ${.TARGET}.tmp ${_MKDEP_FILEFLAGS} -- ${MKDEPFLAGS} \
     90 	    ${CXXFLAGS:M-std=*} ${CXXFLAGS:C/-([IDUW])[  ]*/-\1/Wg:M-[IDUW]*} \
     91 	    ${CPPFLAGS:N-Wp,-iremap,*} ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \
     92 	    ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} && \
     93 	    ${MV} ${.TARGET}.tmp ${.TARGET}
     94 
     95 .endif # defined(SRCS) && !empty(SRCS)					# }
     96 
     97 ##### Clean rules
     98 .if defined(SRCS) && !empty(SRCS)
     99 CLEANDIRFILES+= .depend ${__DPSRCS.d} ${__DPSRCS.d:.d=.d.tmp} tags ${CLEANDEPEND}
    100 .endif
    101 
    102 ##### Custom rules
    103 .if !commands(tags)
    104 tags: ${SRCS}
    105 .if defined(SRCS) && !empty(SRCS)
    106 	${_MKTARGET_CREATE}
    107 	-cd "${.CURDIR}"; ctags -f /dev/stdout ${.ALLSRC:M*.[cly]} | \
    108 	    ${TOOL_SED} "s;\${.CURDIR}/;;" > ${.OBJDIR}/tags
    109 .endif
    110 .endif
    111 
    112 ##### Pull in related .mk logic
    113 .include <bsd.clean.mk>
    114