xref: /freebsd/contrib/bmake/mk/dep.mk (revision 02e9120893770924227138ba49df1edb3896112a)
1# $Id: dep.mk,v 1.18 2021/12/08 05:56:50 sjg Exp $
2
3.if !target(__${.PARSEFILE}__)
4__${.PARSEFILE}__: .NOTMAIN
5
6# handle Proc*C as well...
7.if defined(SRCS)
8.if !empty(SRCS:M*.pc)
9.include <proc.mk>
10.endif
11
12# it would be nice to be able to query .SUFFIXES
13OBJ_EXTENSIONS+= .o .po .lo .So
14
15# explicit dependencies help short-circuit .SUFFIX searches
16SRCS_DEP_FILTER+= N*.[hly]
17.for s in ${SRCS:${SRCS_DEP_FILTER:O:u:ts:}}
18.for e in ${OBJ_EXTENSIONS:O:u}
19.if !target(${s:T:R}$e)
20${s:T:R}$e: $s
21.endif
22.endfor
23.endfor
24.endif
25
26.if exists(/usr/bin/mkdep)
27MKDEP_CMD?=	mkdep
28.elif exists(/usr/local/share/bin/mkdeps.sh)
29MKDEP_CMD?=	/usr/local/share/bin/mkdeps.sh -N
30.endif
31MKDEP_CMD?=	mkdep
32
33MKDEP ?= ${MKDEP_CMD}
34
35.NOPATH:	.depend
36
37.if ${MKDEP_MK:Uno} == "auto.dep.mk" && make(depend)
38# auto.dep.mk does not "do" depend
39MK_AUTODEP= no
40.endif
41
42.if ${MK_AUTODEP} == yes
43MKDEP_MK ?= autodep.mk
44.include <${MKDEP_MK}>
45.else
46MKDEP_ENV_VARS += CC CXX
47.for v in ${MKDEP_ENV_VARS:O:u}
48.if !empty($v)
49MKDEP_ENV += $v='${$v}'
50.endif
51.endfor
52
53_MKDEP = ${MKDEP_ENV} ${MKDEP}
54
55# some of the rules involve .h sources, so remove them from mkdep line
56.if !target(depend)
57depend: beforedepend .depend _SUBDIRUSE afterdepend
58
59.if defined(SRCS)
60# libs can have too many SRCS for a single command line
61# so do them one at a time.
62.depend: ${SRCS} ${.PARSEDIR}/${.PASEFILE}
63	@rm -f .depend
64.ifdef LIB
65	@files="${.ALLSRC:M*.[sS]}"; \
66	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
67	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$f; done
68	@files="${.ALLSRC:M*.c} ${.ALLSRC:M*.pc:T:.pc=.c}"; \
69	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
70	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$f; done
71	@files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
72	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
73	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$f; done
74.else
75	@files="${.ALLSRC:M*.[Ss]}"; \
76	case "$$files" in *.[Ss]*) \
77	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
78	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$files; \
79	  ${_MKDEP} -a ${MKDEPFLAGS} \
80	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$files;; \
81	esac
82	@files="${.ALLSRC:M*.c} ${.ALLSRC:M*.pc:T:.pc=.c}"; \
83	case "$$files" in *.c*) \
84	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
85	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$files; \
86	  ${_MKDEP} -a ${MKDEPFLAGS} \
87	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$files;; \
88	esac
89	@files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
90	case "$$files" in *.[Cc]*) \
91	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
92	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$files; \
93	  ${_MKDEP} -a ${MKDEPFLAGS} \
94	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$files;; \
95	esac
96.endif
97.else
98.depend:
99.endif
100.if !target(beforedepend)
101beforedepend:
102.endif
103.if !target(afterdepend)
104afterdepend:
105.endif
106.endif
107.endif
108
109.if !target(tags)
110.if defined(SRCS)
111tags: ${SRCS} _SUBDIRUSE
112	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:N*.h} | \
113	    sed "s;\${.CURDIR}/;;" > tags
114.else
115tags:
116.endif
117.endif
118
119.if defined(SRCS)
120cleandir: cleandepend
121.if !target(cleandepend)
122cleandepend:
123	rm -f .depend ${.CURDIR}/tags
124.endif
125.endif
126
127.endif
128