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