xref: /src/contrib/bmake/mk/obj.mk (revision c60f6422ffae3ea85e7b10bad950ad27c463af18)
1# $Id: obj.mk,v 1.20 2025/08/09 22:42:24 sjg Exp $
2#
3#	@(#) Copyright (c) 1999-2010, Simon J. Gerraty
4#
5#	SPDX-License-Identifier: BSD-2-Clause
6#
7#	Please send copies of changes and bug-fixes to:
8#	sjg@crufty.net
9#
10
11# should be set properly in sys.mk
12_this ?= ${.PARSEFILE:S,bsd.,,}
13
14.if !target(__${_this}__)
15__${_this}__: .NOTMAIN
16
17.include <init.mk>
18
19ECHO_TRACE ?= echo
20
21.if ${MK_OBJDIRS} == "no"
22obj:
23objlink:
24objwarn:
25.else
26
27# this has to match how make behaves
28.if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR)
29.if defined(MAKEOBJDIRPREFIX)
30__objdir:= ${MAKEOBJDIRPREFIX}${.CURDIR}
31.else
32__objdir:= ${MAKEOBJDIR}
33.endif
34.else
35__objdir= ${__objlink}
36.endif
37
38.if defined(OBJMACHINE)
39__objlink=	obj.${MACHINE}
40.else
41__objlink=	obj
42.endif
43
44.if ${MK_AUTO_OBJ} == "yes"
45.-include "auto.obj.mk"
46.endif
47
48.NOPATH:	${__objdir}
49.PHONY:		obj
50
51obj: _SUBDIRUSE
52	@if test ! -d ${__objdir}/.; then \
53		mkdir -p ${__objdir}; \
54		if test ! -d ${__objdir}; then \
55			mkdir ${__objdir}; exit 1; \
56		fi; \
57		${ECHO_TRACE} "[Creating objdir ${__objdir}...]" >&2; \
58	fi
59
60.if !target(_SUBDIRUSE)
61# this just allows us to be included by ourselves
62_SUBDIRUSE:
63.endif
64
65# so we can interact with freebsd makefiles
66.if !target(objwarn)
67objwarn:
68.if ${.OBJDIR} == ${.CURDIR}
69	@echo "Warning Object directory is ${.CURDIR}"
70.elif ${.OBJDIR} != ${__objdir}
71	@echo "Warning Object directory is ${.OBJDIR} vs. ${__objdir}"
72.endif
73.endif
74
75.if !target(objlink)
76objlink:
77.if ${__objdir:T} != ${__objlink}
78	@if test -d ${__objdir}/.; then \
79		${RM} -f ${.CURDIR}/${__objlink}; \
80		${LN} -s ${__objdir} ${.CURDIR}/${__objlink}; \
81		echo "${__objlink} -> ${__objdir}"; \
82	else \
83		echo "No ${__objdir} to link to - do a 'make obj'"; \
84	fi
85.endif
86.endif
87.endif
88
89_CURDIR?= ${.CURDIR}
90_OBJDIR?= ${.OBJDIR}
91
92.if !target(print-objdir)
93print-objdir:
94	@echo ${_OBJDIR}
95.endif
96
97.if !target(whereobj)
98whereobj:
99	@echo ${_OBJDIR}
100.endif
101
102.if !target(destroy)
103.if ${.CURDIR} != ${.OBJDIR}
104destroy:
105	(cd ${_CURDIR} && rm -rf ${_OBJDIR})
106.else
107destroy:  clean
108.endif
109.endif
110
111.endif
112