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