xref: /dflybsd-src/contrib/bmake/mk/dep.mk (revision 9e7ae5a0527a977cab412aede3a532cfe2903bbb)
1*6eef5f0cSAntonio Huete Jimenez# $Id: dep.mk,v 1.18 2021/12/08 05:56:50 sjg Exp $
25f1e34d9SAlexandre Perrin
35f1e34d9SAlexandre Perrin.if !target(__${.PARSEFILE}__)
4*6eef5f0cSAntonio Huete Jimenez__${.PARSEFILE}__: .NOTMAIN
55f1e34d9SAlexandre Perrin
65f1e34d9SAlexandre Perrin# handle Proc*C as well...
75f1e34d9SAlexandre Perrin.if defined(SRCS)
85f1e34d9SAlexandre Perrin.if !empty(SRCS:M*.pc)
95f1e34d9SAlexandre Perrin.include <proc.mk>
105f1e34d9SAlexandre Perrin.endif
115f1e34d9SAlexandre Perrin
125f1e34d9SAlexandre Perrin# it would be nice to be able to query .SUFFIXES
135f1e34d9SAlexandre PerrinOBJ_EXTENSIONS+= .o .po .lo .So
145f1e34d9SAlexandre Perrin
155f1e34d9SAlexandre Perrin# explicit dependencies help short-circuit .SUFFIX searches
165f1e34d9SAlexandre PerrinSRCS_DEP_FILTER+= N*.[hly]
175f1e34d9SAlexandre Perrin.for s in ${SRCS:${SRCS_DEP_FILTER:O:u:ts:}}
185f1e34d9SAlexandre Perrin.for e in ${OBJ_EXTENSIONS:O:u}
195f1e34d9SAlexandre Perrin.if !target(${s:T:R}$e)
205f1e34d9SAlexandre Perrin${s:T:R}$e: $s
215f1e34d9SAlexandre Perrin.endif
225f1e34d9SAlexandre Perrin.endfor
235f1e34d9SAlexandre Perrin.endfor
245f1e34d9SAlexandre Perrin.endif
255f1e34d9SAlexandre Perrin
265f1e34d9SAlexandre Perrin.if exists(/usr/bin/mkdep)
275f1e34d9SAlexandre PerrinMKDEP_CMD?=	mkdep
285f1e34d9SAlexandre Perrin.elif exists(/usr/local/share/bin/mkdeps.sh)
295f1e34d9SAlexandre PerrinMKDEP_CMD?=	/usr/local/share/bin/mkdeps.sh -N
305f1e34d9SAlexandre Perrin.endif
315f1e34d9SAlexandre PerrinMKDEP_CMD?=	mkdep
325f1e34d9SAlexandre Perrin
335f1e34d9SAlexandre PerrinMKDEP ?= ${MKDEP_CMD}
345f1e34d9SAlexandre Perrin
355f1e34d9SAlexandre Perrin.NOPATH:	.depend
365f1e34d9SAlexandre Perrin
376a91b982SJohn Marino.if ${MKDEP_MK:Uno} == "auto.dep.mk" && make(depend)
385f1e34d9SAlexandre Perrin# auto.dep.mk does not "do" depend
395f1e34d9SAlexandre PerrinMK_AUTODEP= no
405f1e34d9SAlexandre Perrin.endif
415f1e34d9SAlexandre Perrin
425f1e34d9SAlexandre Perrin.if ${MK_AUTODEP} == yes
436a91b982SJohn MarinoMKDEP_MK ?= autodep.mk
446a91b982SJohn Marino.include <${MKDEP_MK}>
455f1e34d9SAlexandre Perrin.else
465f1e34d9SAlexandre PerrinMKDEP_ENV_VARS += CC CXX
475f1e34d9SAlexandre Perrin.for v in ${MKDEP_ENV_VARS:O:u}
485f1e34d9SAlexandre Perrin.if !empty($v)
495f1e34d9SAlexandre PerrinMKDEP_ENV += $v='${$v}'
505f1e34d9SAlexandre Perrin.endif
515f1e34d9SAlexandre Perrin.endfor
525f1e34d9SAlexandre Perrin
535f1e34d9SAlexandre Perrin_MKDEP = ${MKDEP_ENV} ${MKDEP}
545f1e34d9SAlexandre Perrin
555f1e34d9SAlexandre Perrin# some of the rules involve .h sources, so remove them from mkdep line
565f1e34d9SAlexandre Perrin.if !target(depend)
575f1e34d9SAlexandre Perrindepend: beforedepend .depend _SUBDIRUSE afterdepend
585f1e34d9SAlexandre Perrin
595f1e34d9SAlexandre Perrin.if defined(SRCS)
605f1e34d9SAlexandre Perrin# libs can have too many SRCS for a single command line
615f1e34d9SAlexandre Perrin# so do them one at a time.
625f1e34d9SAlexandre Perrin.depend: ${SRCS} ${.PARSEDIR}/${.PASEFILE}
635f1e34d9SAlexandre Perrin	@rm -f .depend
645f1e34d9SAlexandre Perrin.ifdef LIB
655f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.[sS]}"; \
665f1e34d9SAlexandre Perrin	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
675f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$f; done
685f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.c} ${.ALLSRC:M*.pc:T:.pc=.c}"; \
695f1e34d9SAlexandre Perrin	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
705f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$f; done
715f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
725f1e34d9SAlexandre Perrin	set -x; for f in $$files; do ${_MKDEP} -a ${MKDEPFLAGS} \
735f1e34d9SAlexandre Perrin	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$f; done
745f1e34d9SAlexandre Perrin.else
755f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.[Ss]}"; \
765f1e34d9SAlexandre Perrin	case "$$files" in *.[Ss]*) \
775f1e34d9SAlexandre Perrin	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
785f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$files; \
795f1e34d9SAlexandre Perrin	  ${_MKDEP} -a ${MKDEPFLAGS} \
805f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} ${AINC} $$files;; \
815f1e34d9SAlexandre Perrin	esac
825f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.c} ${.ALLSRC:M*.pc:T:.pc=.c}"; \
835f1e34d9SAlexandre Perrin	case "$$files" in *.c*) \
845f1e34d9SAlexandre Perrin	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
855f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$files; \
865f1e34d9SAlexandre Perrin	  ${_MKDEP} -a ${MKDEPFLAGS} \
875f1e34d9SAlexandre Perrin	    ${CFLAGS:M-[ID]*} ${CPPFLAGS} $$files;; \
885f1e34d9SAlexandre Perrin	esac
895f1e34d9SAlexandre Perrin	@files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \
905f1e34d9SAlexandre Perrin	case "$$files" in *.[Cc]*) \
915f1e34d9SAlexandre Perrin	  echo ${_MKDEP} -a ${MKDEPFLAGS} \
925f1e34d9SAlexandre Perrin	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$files; \
935f1e34d9SAlexandre Perrin	  ${_MKDEP} -a ${MKDEPFLAGS} \
945f1e34d9SAlexandre Perrin	    ${CXXFLAGS:M-[ID]*} ${CPPFLAGS} $$files;; \
955f1e34d9SAlexandre Perrin	esac
965f1e34d9SAlexandre Perrin.endif
975f1e34d9SAlexandre Perrin.else
985f1e34d9SAlexandre Perrin.depend:
995f1e34d9SAlexandre Perrin.endif
1005f1e34d9SAlexandre Perrin.if !target(beforedepend)
1015f1e34d9SAlexandre Perrinbeforedepend:
1025f1e34d9SAlexandre Perrin.endif
1035f1e34d9SAlexandre Perrin.if !target(afterdepend)
1045f1e34d9SAlexandre Perrinafterdepend:
1055f1e34d9SAlexandre Perrin.endif
1065f1e34d9SAlexandre Perrin.endif
1075f1e34d9SAlexandre Perrin.endif
1085f1e34d9SAlexandre Perrin
1095f1e34d9SAlexandre Perrin.if !target(tags)
1105f1e34d9SAlexandre Perrin.if defined(SRCS)
1115f1e34d9SAlexandre Perrintags: ${SRCS} _SUBDIRUSE
1125f1e34d9SAlexandre Perrin	-cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:N*.h} | \
1135f1e34d9SAlexandre Perrin	    sed "s;\${.CURDIR}/;;" > tags
1145f1e34d9SAlexandre Perrin.else
1155f1e34d9SAlexandre Perrintags:
1165f1e34d9SAlexandre Perrin.endif
1175f1e34d9SAlexandre Perrin.endif
1185f1e34d9SAlexandre Perrin
1195f1e34d9SAlexandre Perrin.if defined(SRCS)
1205f1e34d9SAlexandre Perrincleandir: cleandepend
1215f1e34d9SAlexandre Perrin.if !target(cleandepend)
1225f1e34d9SAlexandre Perrincleandepend:
1235f1e34d9SAlexandre Perrin	rm -f .depend ${.CURDIR}/tags
1245f1e34d9SAlexandre Perrin.endif
1255f1e34d9SAlexandre Perrin.endif
1265f1e34d9SAlexandre Perrin
1275f1e34d9SAlexandre Perrin.endif
128