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