Makefile.inc1 revision 167359
141016Sdfr#
241016Sdfr# $FreeBSD: head/Makefile.inc1 167359 2007-03-09 12:11:58Z rafan $
341016Sdfr#
441016Sdfr# Make command line options:
541016Sdfr#	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
641016Sdfr#	-DNO_CLEAN do not clean at all
741016Sdfr#	-DNO_SHARE do not go into share subdir
841016Sdfr#	-DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
941016Sdfr#	-DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
1041016Sdfr#	-DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
1141016Sdfr#	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
1241016Sdfr#	-DNO_DOCUPDATE do not update doc in ${MAKE} update
1341016Sdfr#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
1441016Sdfr#	TARGET="machine" to crossbuild world for a different machine type
1541016Sdfr
1641016Sdfr#
1741016Sdfr# The intended user-driven targets are:
1841016Sdfr# buildworld  - rebuild *everything*, including glue to help do upgrades
1941016Sdfr# installworld- install everything built by "buildworld"
2041016Sdfr# doxygen     - build API documentation of the kernel
2141016Sdfr# update      - convenient way to update your source tree (eg: cvsup/cvs)
2241016Sdfr#
2341016Sdfr# Standard targets (not defined here) are documented in the makefiles in
2441016Sdfr# /usr/share/mk.  These include:
2541016Sdfr#		obj depend all install clean cleandepend cleanobj
2641016Sdfr
2741016Sdfr.include <bsd.own.mk>
2841016Sdfr
2941016Sdfr# We must do share/info early so that installation of info `dir'
3041016Sdfr# entries works correctly.  Do it first since it is less likely to
3141016Sdfr# grow dependencies on include and lib than vice versa.
3241016Sdfr#
3341016Sdfr# We must do lib/ and libexec/ before bin/, because if installworld
3441016Sdfr# installs a new /bin/sh, the 'make' command will *immediately*
3541016Sdfr# use that new version.  And the new (dynamically-linked) /bin/sh
3641016Sdfr# will expect to find appropriate libraries in /lib and /libexec.
3741016Sdfr#
3841016SdfrSUBDIR=	share/info lib libexec
3941016SdfrSUBDIR+=bin
4041016Sdfr.if ${MK_GAMES} != "no"
4141016SdfrSUBDIR+=games
4241016Sdfr.endif
4341016SdfrSUBDIR+=gnu include
4441016Sdfr.if ${MK_KERBEROS} != "no"
4541016SdfrSUBDIR+=kerberos5
4641016Sdfr.endif
4741016Sdfr.if ${MK_RESCUE} != "no"
4841016SdfrSUBDIR+=rescue
4941016Sdfr.endif
5041016SdfrSUBDIR+=sbin
5141016Sdfr.if ${MK_CRYPT} != "no"
5241016SdfrSUBDIR+=secure
53178019Sjkim.endif
5441016Sdfr.if !defined(NO_SHARE)
5541016SdfrSUBDIR+=share
56178019Sjkim.endif
5741016SdfrSUBDIR+=sys usr.bin usr.sbin
5841016Sdfr#
5941016Sdfr# We must do etc/ last for install/distribute to work.
6041016Sdfr#
61116181SobrienSUBDIR+=etc
62116181Sobrien
63116181Sobrien# These are last, since it is nice to at least get the base system
64147271Smarius# rebuilt before you do them.
6541016Sdfr.for _DIR in ${LOCAL_DIRS}
6641016Sdfr.if exists(${.CURDIR}/${_DIR}/Makefile)
6741016SdfrSUBDIR+= ${_DIR}
6841016Sdfr.endif
6941016Sdfr.endfor
7041016Sdfr
7141016Sdfr.if defined(SUBDIR_OVERRIDE)
7241016SdfrSUBDIR=		${SUBDIR_OVERRIDE}
73189870Srnoland.endif
7441016Sdfr
75189870Srnoland.if defined(NOCLEAN)
76189870SrnolandNO_CLEAN=	${NOCLEAN}
7741016Sdfr.endif
7845720Speter.if defined(NO_CLEANDIR)
7941181SdfrCLEANDIR=	clean cleandepend
8070834Swollman.else
81123442SalfredCLEANDIR=	cleandir
8284880Syokota.endif
8341016Sdfr
8441016SdfrCVS?=		cvs
85114216SkanCVSFLAGS?=	-A -P -d -I!
8666860SphkSUP?=		/usr/bin/csup
8741181SdfrSUPFLAGS?=	-g -L 2
8841016Sdfr.if defined(SUPHOST)
89147271SmariusSUPFLAGS+=	-h ${SUPHOST}
9041016Sdfr.endif
91147271Smarius
9241016SdfrMAKEOBJDIRPREFIX?=	/usr/obj
93147271Smarius.if !defined(OSRELDATE)
94147271Smarius.if exists(/usr/include/osreldate.h)
95147271SmariusOSRELDATE!=	awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
9641016Sdfr		/usr/include/osreldate.h
9741016Sdfr.else
9841016SdfrOSRELDATE=	0
9941016Sdfr.endif
10041016Sdfr.endif
10141016Sdfr
10241016Sdfr# Guess machine architecture from machine type, and vice versa.
103178019Sjkim.if !defined(TARGET_ARCH) && defined(TARGET)
104134405SgibbsTARGET_ARCH=	${TARGET:S/pc98/i386/:S/sun4v/sparc64/}
105134405Sgibbs.elif !defined(TARGET) && defined(TARGET_ARCH) && \
106134405Sgibbs    ${TARGET_ARCH} != ${MACHINE_ARCH}
10741016SdfrTARGET=		${TARGET_ARCH}
108178019Sjkim.endif
109178019Sjkim# Otherwise, default to current machine type and architecture.
110178019SjkimTARGET?=	${MACHINE}
111134405SgibbsTARGET_ARCH?=	${MACHINE_ARCH}
11241016Sdfr
11384880SyokotaKNOWN_ARCHES?=	amd64 arm i386 i386/pc98 ia64 powerpc sparc64 sparc64/sun4v
114178019Sjkim.if ${TARGET} == ${TARGET_ARCH}
11584880Syokota_t=		${TARGET}
11684880Syokota.else
117133297Sphilip_t=		${TARGET_ARCH}/${TARGET}
118178019Sjkim.endif
119133297Sphilip.for _t in ${_t}
120133297Sphilip.if empty(KNOWN_ARCHES:M${_t})
121133297Sphilip.error Unknown target ${TARGET_ARCH}:${TARGET}.
122178019Sjkim.endif
123133297Sphilip.endfor
124133297Sphilip
12541016Sdfr.if ${TARGET} == ${MACHINE}
12641016SdfrTARGET_CPUTYPE?=${CPUTYPE}
127178019Sjkim.else
12883492SyokotaTARGET_CPUTYPE?=
12941016Sdfr.endif
130178019Sjkim
131178019Sjkim.if !empty(TARGET_CPUTYPE)
13241016Sdfr_TARGET_CPUTYPE=${TARGET_CPUTYPE}
13341016Sdfr.else
134178019Sjkim_TARGET_CPUTYPE=dummy
135178019Sjkim.endif
136178019Sjkim_CPUTYPE!=	MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
137178019Sjkim		-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
138178019Sjkim.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
13941016Sdfr.error CPUTYPE global should be set with ?=.
14048778Syokota.endif
141178019Sjkim.if make(buildworld)
142178019SjkimBUILD_ARCH!=	uname -p
143178019Sjkim.if ${MACHINE_ARCH} != ${BUILD_ARCH}
144178019Sjkim.error To cross-build, set TARGET_ARCH.
14548778Syokota.endif
14641016Sdfr.endif
14741016Sdfr.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING)
148178019SjkimOBJTREE=	${MAKEOBJDIRPREFIX}
149178019Sjkim.else
150178019SjkimOBJTREE=	${MAKEOBJDIRPREFIX}/${TARGET}
151178019Sjkim.endif
15241016SdfrWORLDTMP=	${OBJTREE}${.CURDIR}/tmp
15341016Sdfr# /usr/games added for fortune which depend on strfile
154123442SalfredBPATH=		${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
155123442SalfredXPATH=		${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
156178019SjkimSTRICTTMPPATH=	${BPATH}:${XPATH}
157178019SjkimTMPPATH=	${STRICTTMPPATH}:${PATH}
158123442Salfred
159123442SalfredINSTALLTMP!=	/usr/bin/mktemp -d -u -t install
160123442Salfred
161178019Sjkim#
162123442Salfred# Building a world goes through the following stages
163123442Salfred#
164183888Sdumbbell# 1. legacy stage [BMAKE]
165183888Sdumbbell#	This stage is responsible for creating compatibility
166183888Sdumbbell#	shims that are needed by the bootstrap-tools,
167183888Sdumbbell#	build-tools and cross-tools stages.
168183888Sdumbbell# 1. bootstrap-tools stage [BMAKE]
169183888Sdumbbell#	This stage is responsible for creating programs that
170183888Sdumbbell#	are needed for backward compatibility reasons. They
171183888Sdumbbell#	are not built as cross-tools.
172183888Sdumbbell# 2. build-tools stage [TMAKE]
173183888Sdumbbell#	This stage is responsible for creating the object
174183888Sdumbbell#	tree and building any tools that are needed during
175183888Sdumbbell#	the build process.
176183888Sdumbbell# 3. cross-tools stage [XMAKE]
177183888Sdumbbell#	This stage is responsible for creating any tools that
178183888Sdumbbell#	are needed for cross-builds. A cross-compiler is one
179183888Sdumbbell#	of them.
180183888Sdumbbell# 4. world stage [WMAKE]
181183888Sdumbbell#	This stage actually builds the world.
182183888Sdumbbell# 5. install stage (optional) [IMAKE]
183183888Sdumbbell#	This stage installs a previously built world.
184183888Sdumbbell#
185183888Sdumbbell
186183888SdumbbellBOOTSTRAPPING?=	0
187183888Sdumbbell
188183888Sdumbbell# Common environment for world related stages
189183888SdumbbellCROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
190183888Sdumbbell		MACHINE_ARCH=${TARGET_ARCH} \
191183888Sdumbbell		MACHINE=${TARGET} \
192183888Sdumbbell		CPUTYPE=${TARGET_CPUTYPE} \
193183888Sdumbbell		GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
194183888Sdumbbell		GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
195183888Sdumbbell		GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
196183888Sdumbbell
197139982Sphilip# bootstrap-tools stage
198183888SdumbbellBMAKEENV=	INSTALL="sh ${.CURDIR}/tools/install.sh" \
199178019Sjkim		PATH=${BPATH}:${PATH} \
200183888Sdumbbell		WORLDTMP=${WORLDTMP} \
201183888Sdumbbell		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
202183888SdumbbellBMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
203183888Sdumbbell		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
204183888Sdumbbell		DESTDIR= \
205183888Sdumbbell		BOOTSTRAPPING=${OSRELDATE} \
206183888Sdumbbell		-DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \
207183888Sdumbbell		-DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \
208183888Sdumbbell		-DNO_CPU_CFLAGS -DNO_WARNS
209183888Sdumbbell
210183888Sdumbbell# build-tools stage
211183888SdumbbellTMAKE=		MAKEOBJDIRPREFIX=${OBJTREE} \
212183888Sdumbbell		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
213183888Sdumbbell		TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
214183888Sdumbbell		DESTDIR= \
215183888Sdumbbell		BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS
216183888Sdumbbell
217183888Sdumbbell# cross-tools stage
218183888SdumbbellXMAKE=		TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
219183888Sdumbbell		TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
220183888Sdumbbell		-DWITHOUT_FORTRAN -DWITHOUT_GDB
221183888Sdumbbell
222183888Sdumbbell# world stage
223183888SdumbbellWMAKEENV=	${CROSSENV} \
224183888Sdumbbell		_SHLIBDIRPREFIX=${WORLDTMP} \
225183888Sdumbbell		INSTALL="sh ${.CURDIR}/tools/install.sh" \
226183888Sdumbbell		PATH=${TMPPATH}
227183888SdumbbellWMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
228183888Sdumbbell
229183888Sdumbbell.if ${TARGET_ARCH} == "amd64"
230183888Sdumbbell# 32 bit world
231139982SphilipLIB32TMP=	${OBJTREE}${.CURDIR}/lib32
232139982Sphilip
233183888Sdumbbell.if empty(TARGET_CPUTYPE)
234183888SdumbbellLIB32CPUTYPE=	k8
235183888Sdumbbell.else
236183888SdumbbellLIB32CPUTYPE=	${TARGET_CPUTYPE}
237183888Sdumbbell.endif
238183888SdumbbellLIB32FLAGS=	-m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT \
239183888Sdumbbell		-iprefix ${LIB32TMP}/usr/ \
240183888Sdumbbell		-L${LIB32TMP}/usr/lib32 \
241183888Sdumbbell		-B${LIB32TMP}/usr/lib32
242244405Sdumbbell
243244405Sdumbbell# Yes, the flags are redundant.
244244405SdumbbellLIB32WMAKEENV=	MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
245244405Sdumbbell		_SHLIBDIRPREFIX=${LIB32TMP} \
246183888Sdumbbell		MACHINE=i386 \
247183888Sdumbbell		MACHINE_ARCH=i386 \
248183888Sdumbbell		INSTALL="sh ${.CURDIR}/tools/install.sh" \
249183888Sdumbbell		PATH=${TMPPATH} \
250183888Sdumbbell		CC="${CC} ${LIB32FLAGS}" \
251183888Sdumbbell		CXX="${CXX} ${LIB32FLAGS}" \
252183888Sdumbbell		OBJC="${OBJC} ${LIB32FLAGS}" \
253183888Sdumbbell		LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
254183888Sdumbbell		AS="${AS} --32" \
255183888Sdumbbell		LIBDIR=/usr/lib32 \
256183888Sdumbbell		SHLIBDIR=/usr/lib32
257183888Sdumbbell
258183888SdumbbellLIB32WMAKE=	${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
259183888Sdumbbell		-DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \
260183888Sdumbbell		-DWITHOUT_HTML DESTDIR=${LIB32TMP}
261183888SdumbbellLIB32IMAKE=	${LIB32WMAKE:NINSTALL=*:NDESTDIR=*} -DNO_INCS
262183888Sdumbbell.endif
263248478Sjkim
264248478Sjkim# install stage
265248478Sjkim.if empty(.MAKEFLAGS:M-n)
266248478SjkimIMAKEENV=	${CROSSENV} \
267248478Sjkim		PATH=${STRICTTMPPATH}:${INSTALLTMP}
268248478Sjkim.else
269248478SjkimIMAKEENV=	${CROSSENV} \
270248478Sjkim		PATH=${TMPPATH}:${INSTALLTMP}
271248478Sjkim.endif
272248478SjkimIMAKE=		${IMAKEENV} ${MAKE} -f Makefile.inc1
273248478Sjkim
274248478Sjkim# kernel stage
275248478SjkimKMAKEENV=	${WMAKEENV}
276248478SjkimKMAKE=		${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME}
277248478Sjkim
278248478Sjkim#
279248478Sjkim# buildworld
280248478Sjkim#
281248478Sjkim# Attempt to rebuild the entire system, with reasonable chance of
282248478Sjkim# success, regardless of how old your existing system is.
283248478Sjkim#
284248478Sjkim_worldtmp:
285248478Sjkim.if ${.CURDIR:C/[^,]//g} != ""
286248478Sjkim#	The m4 build of sendmail files doesn't like it if ',' is used
287248478Sjkim#	anywhere in the path of it's files.
288248478Sjkim	@echo
289248478Sjkim	@echo "*** Error: path to source tree contains a comma ','"
290248478Sjkim	@echo
291248478Sjkim	false
292248478Sjkim.endif
293248478Sjkim	@echo
294248478Sjkim	@echo "--------------------------------------------------------------"
29541016Sdfr	@echo ">>> Rebuilding the temporary build tree"
29641016Sdfr	@echo "--------------------------------------------------------------"
297178019Sjkim.if !defined(NO_CLEAN)
298178019Sjkim	rm -rf ${WORLDTMP}
299178019Sjkim.if ${TARGET_ARCH} == "amd64"
300178019Sjkim	rm -rf ${LIB32TMP}
301178019Sjkim.endif
302178019Sjkim.else
303178019Sjkim	rm -rf ${WORLDTMP}/legacy/usr/include
304178019Sjkim#	XXX - These two can depend on any header file.
305178019Sjkim	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
306178019Sjkim	rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
307178019Sjkim.endif
308183888Sdumbbell.for _dir in \
309248478Sjkim    usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \
310248478Sjkim    usr/libexec usr/sbin usr/share/dict \
311178019Sjkim    usr/share/groff_font/devX100 \
312178019Sjkim    usr/share/groff_font/devX100-12 \
313178019Sjkim    usr/share/groff_font/devX75 \
314178019Sjkim    usr/share/groff_font/devX75-12 \
315178019Sjkim    usr/share/groff_font/devascii \
316178019Sjkim    usr/share/groff_font/devcp1047 \
317178019Sjkim    usr/share/groff_font/devdvi \
318178019Sjkim    usr/share/groff_font/devhtml \
319178019Sjkim    usr/share/groff_font/devkoi8-r \
320178019Sjkim    usr/share/groff_font/devlatin1 \
321178019Sjkim    usr/share/groff_font/devlbp \
322178019Sjkim    usr/share/groff_font/devlj4 \
323178019Sjkim    usr/share/groff_font/devps \
324178019Sjkim    usr/share/groff_font/devutf8 \
325178019Sjkim    usr/share/tmac/mdoc usr/share/tmac/mm
326178019Sjkim	mkdir -p ${WORLDTMP}/legacy/${_dir}
327178019Sjkim.endfor
328178019Sjkim.for _dir in \
329178019Sjkim    lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \
330178019Sjkim    usr/libexec usr/sbin usr/share/misc \
331178019Sjkim    usr/share/snmp/defs usr/share/snmp/mibs
332240211Sjhb	mkdir -p ${WORLDTMP}/${_dir}
333240211Sjhb.endfor
334178019Sjkim	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
335178019Sjkim	    -p ${WORLDTMP}/usr/include >/dev/null
336178019Sjkim	ln -sf ${.CURDIR}/sys ${WORLDTMP}
337178019Sjkim.if ${MK_BIND_LIBS} != "no"
338189870Srnoland	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
33941016Sdfr	    -p ${WORLDTMP}/usr/include >/dev/null
340114293Smarkm.endif
34141016Sdfr_legacy:
34241016Sdfr	@echo
343178019Sjkim	@echo "--------------------------------------------------------------"
344178019Sjkim	@echo ">>> stage 1.1: legacy release compatibility shims"
345178019Sjkim	@echo "--------------------------------------------------------------"
346178019Sjkim	${_+_}cd ${.CURDIR}; ${BMAKE} legacy
347178019Sjkim_bootstrap-tools:
34841016Sdfr	@echo
34941016Sdfr	@echo "--------------------------------------------------------------"
350178019Sjkim	@echo ">>> stage 1.2: bootstrap tools"
351178019Sjkim	@echo "--------------------------------------------------------------"
352178019Sjkim	${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
353178019Sjkim_cleanobj:
354178019Sjkim.if !defined(NO_CLEAN)
355178019Sjkim	@echo
356178019Sjkim	@echo "--------------------------------------------------------------"
357178019Sjkim	@echo ">>> stage 2.1: cleaning up the object tree"
358178019Sjkim	@echo "--------------------------------------------------------------"
35941016Sdfr	${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
360178019Sjkim.if ${TARGET_ARCH} == "amd64"
361178019Sjkim	${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
362178019Sjkim.endif
363178019Sjkim.endif
364178019Sjkim_obj:
365178019Sjkim	@echo
366178019Sjkim	@echo "--------------------------------------------------------------"
367178019Sjkim	@echo ">>> stage 2.2: rebuilding the object tree"
368178019Sjkim	@echo "--------------------------------------------------------------"
369178019Sjkim	${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
37041016Sdfr_build-tools:
37141016Sdfr	@echo
372178019Sjkim	@echo "--------------------------------------------------------------"
37341016Sdfr	@echo ">>> stage 2.3: build tools"
374135945Sphilip	@echo "--------------------------------------------------------------"
375200674Sdumbbell	${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
376200674Sdumbbell_cross-tools:
377200674Sdumbbell	@echo
378255210Seadler	@echo "--------------------------------------------------------------"
379135945Sphilip	@echo ">>> stage 3: cross tools"
380135945Sphilip	@echo "--------------------------------------------------------------"
381255210Seadler	${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
382248478Sjkim_includes:
383248478Sjkim	@echo
384139628Sphilip	@echo "--------------------------------------------------------------"
385139628Sphilip	@echo ">>> stage 4.1: building includes"
386139628Sphilip	@echo "--------------------------------------------------------------"
38741016Sdfr	${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
388178019Sjkim_libraries:
389178019Sjkim	@echo
390178019Sjkim	@echo "--------------------------------------------------------------"
39141016Sdfr	@echo ">>> stage 4.2: building libraries"
39241016Sdfr	@echo "--------------------------------------------------------------"
393178019Sjkim	${_+_}cd ${.CURDIR}; \
394178019Sjkim	    ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \
395178019Sjkim	    -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries
396178019Sjkim_depend:
39741016Sdfr	@echo
39841016Sdfr	@echo "--------------------------------------------------------------"
39941016Sdfr	@echo ">>> stage 4.3: make dependencies"
400178019Sjkim	@echo "--------------------------------------------------------------"
401178019Sjkim	${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
402178019Sjkimeverything:
403178019Sjkim	@echo
40441016Sdfr	@echo "--------------------------------------------------------------"
40541016Sdfr	@echo ">>> stage 4.4: building everything"
40641016Sdfr	@echo "--------------------------------------------------------------"
407178019Sjkim	${_+_}cd ${.CURDIR}; ${WMAKE} par-all
408178019Sjkim.if ${TARGET_ARCH} == "amd64"
40941016Sdfrbuild32:
41041016Sdfr	@echo
411178019Sjkim	@echo "--------------------------------------------------------------"
412178019Sjkim	@echo ">>> stage 5.1: building 32 bit shim libraries"
413178019Sjkim	@echo "--------------------------------------------------------------"
414178019Sjkim.for _dir in \
415178019Sjkim    lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \
41641016Sdfr    usr/libexec usr/sbin usr/share/misc \
417178019Sjkim    usr/share/snmp/defs usr/share/snmp/mibs
418178019Sjkim	mkdir -p ${LIB32TMP}/${_dir}
419178019Sjkim.endfor
420178019Sjkim	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
421178019Sjkim	    -p ${LIB32TMP}/usr/include >/dev/null
422178019Sjkim	mkdir -p ${WORLDTMP}
42341016Sdfr	ln -sf ${.CURDIR}/sys ${WORLDTMP}
424178019Sjkim.if ${MK_KERBEROS} != "no"
425178019Sjkim.for _t in obj depend all
426178019Sjkim	cd ${.CURDIR}/kerberos5/tools; \
427178019Sjkim	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t}
428178019Sjkim.endfor
429178019Sjkim.endif
430178019Sjkim.for _t in obj includes
431178019Sjkim	cd ${.CURDIR}/include; ${LIB32WMAKE} ${_t}
432178019Sjkim	cd ${.CURDIR}/lib; ${LIB32WMAKE} ${_t}
433178019Sjkim	cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} ${_t}
434178019Sjkim.if ${MK_CRYPT} != "no"
435178019Sjkim	cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} ${_t}
436178019Sjkim.endif
437178019Sjkim.if ${MK_KERBEROS} != "no"
438178019Sjkim	cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} ${_t}
439178019Sjkim.endif
440178019Sjkim.endfor
441178019Sjkim.for _dir in usr.bin/lex/lib
442178019Sjkim	cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} obj
443178019Sjkim.endfor
444178019Sjkim.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
445178019Sjkim	cd ${.CURDIR}/${_dir}; \
446178019Sjkim	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools
447178019Sjkim.endfor
448178019Sjkim	cd ${.CURDIR}; \
449178019Sjkim	    ${LIB32WMAKE} -f Makefile.inc1 libraries
450178019Sjkim.for _t in obj depend all
451178019Sjkim	cd ${.CURDIR}/libexec/rtld-elf; \
452178019Sjkim	    PROG=ld-elf32.so.1 ${LIB32WMAKE} ${_t}
453178019Sjkim.endfor
454178019Sjkim
45541016Sdfrdistribute32 install32:
45641016Sdfr.if make(distribute32)
457233580Sjkim	mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32	# XXX add to mtree
45841016Sdfr.else
459178019Sjkim	mkdir -p ${DESTDIR}/usr/lib32			# XXX add to mtree
460178019Sjkim.endif
46141016Sdfr	cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
462178019Sjkim	cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
463178019Sjkim.if ${MK_CRYPT} != "no"
464178019Sjkim	cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
465178019Sjkim.endif
466178019Sjkim	cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
467178019Sjkim.endif
468178019Sjkim
469178019Sjkim
470178019SjkimWMAKE_TGTS=
471178019Sjkim.if !defined(SUBDIR_OVERRIDE)
472248478SjkimWMAKE_TGTS+=	_worldtmp _legacy _bootstrap-tools
473178019Sjkim.endif
474178019SjkimWMAKE_TGTS+=	_cleanobj _obj _build-tools
47541016Sdfr.if !defined(SUBDIR_OVERRIDE)
476178019SjkimWMAKE_TGTS+=	_cross-tools
477178019Sjkim.endif
478178019SjkimWMAKE_TGTS+=	_includes _libraries _depend everything
479178019Sjkim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
48041016SdfrWMAKE_TGTS+=	build32
481178019Sjkim.endif
482178019Sjkim
483178019Sjkimbuildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
484178019Sjkim.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
485178019Sjkim
486178019Sjkimbuildworld_prologue:
487178019Sjkim	@echo "--------------------------------------------------------------"
488178019Sjkim	@echo ">>> World build started on `LC_ALL=C date`"
489178019Sjkim	@echo "--------------------------------------------------------------"
490178019Sjkim
491178019Sjkimbuildworld_epilogue:
492178019Sjkim	@echo
493178019Sjkim	@echo "--------------------------------------------------------------"
494178019Sjkim	@echo ">>> World build completed on `LC_ALL=C date`"
495178019Sjkim	@echo "--------------------------------------------------------------"
496178019Sjkim
497179474Sphilip#
498179474Sphilip# We need to have this as a target because the indirection between Makefile
499178019Sjkim# and Makefile.inc1 causes the correct PATH to be used, rather than a
500178019Sjkim# modification of the current environment's PATH.  In addition, we need
501178019Sjkim# to quote multiword values.
502178019Sjkim# 
503178019Sjkimbuildenvvars:
504178019Sjkim	@echo ${WMAKEENV:Q}
505178019Sjkim
506178019Sjkimbuildenv:
507248478Sjkim	@echo Entering world for ${TARGET_ARCH}:${TARGET}
508248478Sjkim	@cd ${.CURDIR} && env ${WMAKEENV} sh || true
509178019Sjkim
510178019SjkimTOOLCHAIN_TGTS=	${WMAKE_TGTS:N_depend:Neverything:Nbuild32}
51141016Sdfrtoolchain: ${TOOLCHAIN_TGTS}
512178019Sjkimkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
513178019Sjkim
51441016Sdfr#
51541016Sdfr# installcheck
51641016Sdfr#
51741016Sdfr# Checks to be sure system is ready for installworld/installkernel.
51883147Syokota#
51941016Sdfrinstallcheck:
52041016Sdfr
52158230Syokota#
52254629Syokota# Require DESTDIR to be set if installing for a different architecture.
52341016Sdfr#
52441016Sdfr.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE}
52541016Sdfr.if !make(distributeworld)
52641016Sdfrinstallcheck: installcheck_DESTDIR
52741016Sdfrinstallcheck_DESTDIR:
528178019Sjkim.if !defined(DESTDIR) || empty(DESTDIR)
529178019Sjkim	@echo "ERROR: Please set DESTDIR!"; \
530178019Sjkim	false
53141016Sdfr.endif
53241016Sdfr.endif
53347625Sphk.endif
534126080Sphk
535126080Sphk#
536111815Sphk# Check for missing UIDs/GIDs.
537111815Sphk#
538111815SphkCHECK_UIDS=
539178017SjkimCHECK_GIDS=	audit
540111815Sphk.if ${MK_SENDMAIL} != "no"
541111815SphkCHECK_UIDS+=	smmsp
542111815SphkCHECK_GIDS+=	smmsp
54341016Sdfr.endif
54441016Sdfr.if ${MK_PF} != "no"
54541016SdfrCHECK_UIDS+=	proxy
54641016SdfrCHECK_GIDS+=	proxy authpf
54741016Sdfr.endif
54841016Sdfrinstallcheck: installcheck_UGID
549178019Sjkiminstallcheck_UGID:
55041016Sdfr.for uid in ${CHECK_UIDS}
551178019Sjkim	@if ! `id -u ${uid} >/dev/null 2>&1`; then \
552178019Sjkim		echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
55341016Sdfr		false; \
554178019Sjkim	fi
55541016Sdfr.endfor
55641016Sdfr.for gid in ${CHECK_GIDS}
55741016Sdfr	@if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
55841016Sdfr		echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
55941016Sdfr		false; \
560178019Sjkim	fi
56141016Sdfr.endfor
562178019Sjkim
563178019Sjkim#
56441016Sdfr# distributeworld
565178019Sjkim#
56641016Sdfr# Distributes everything compiled by a `buildworld'.
56741016Sdfr#
56841016Sdfr# installworld
56941016Sdfr#
57041016Sdfr# Installs everything compiled by a 'buildworld'.
571178019Sjkim#
572178019Sjkimdistributeworld installworld: installcheck
573178019Sjkim	mkdir -p ${INSTALLTMP}
57441016Sdfr	for prog in [ awk cap_mkdb cat chflags chmod chown \
575178019Sjkim	    date echo egrep find grep install-info \
576178019Sjkim	    ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
577178019Sjkim	    test true uname wc zic; do \
578178019Sjkim		cp `which $$prog` ${INSTALLTMP}; \
579178019Sjkim	done
580178019Sjkim	${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
581178019Sjkim	rm -rf ${INSTALLTMP}
582178019Sjkim
583178019Sjkim#
584178019Sjkim# reinstall
585178019Sjkim#
586178019Sjkim# If you have a build server, you can NFS mount the source and obj directories
587178019Sjkim# and do a 'make reinstall' on the *client* to install new binaries from the
588178019Sjkim# most recent server build.
589178019Sjkim#
59041016Sdfrreinstall:
591178019Sjkim	@echo "--------------------------------------------------------------"
592178019Sjkim	@echo ">>> Making hierarchy"
593178019Sjkim	@echo "--------------------------------------------------------------"
594178019Sjkim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
595178019Sjkim	@echo
59641016Sdfr	@echo "--------------------------------------------------------------"
597178019Sjkim	@echo ">>> Installing everything"
598178019Sjkim	@echo "--------------------------------------------------------------"
59941016Sdfr	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
600178019Sjkim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
60141016Sdfr	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
60241016Sdfr.endif
60341016Sdfr
60441016Sdfrredistribute:
60541016Sdfr	@echo "--------------------------------------------------------------"
606178019Sjkim	@echo ">>> Distributing everything"
607178019Sjkim	@echo "--------------------------------------------------------------"
60841016Sdfr	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
609178019Sjkim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
610178019Sjkim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32
611178019Sjkim.endif
612178019Sjkim
613178019Sjkimdistrib-dirs distribution:
61441016Sdfr	cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET}
615178019Sjkim
616178019Sjkim#
61741016Sdfr# buildkernel and installkernel
618178019Sjkim#
619178019Sjkim# Which kernels to build and/or install is specified by setting
62041016Sdfr# KERNCONF. If not defined a GENERIC kernel is built/installed.
621178019Sjkim# Only the existing (depending TARGET) config files are used
62241016Sdfr# for building kernels and only the first of these is designated
62341016Sdfr# as the one being installed.
62441016Sdfr#
62541016Sdfr# Note that we have to use TARGET instead of TARGET_ARCH when
62641016Sdfr# we're in kernel-land. Since only TARGET_ARCH is (expected) to
627178019Sjkim# be set to cross-build, we have to make sure TARGET is set
62841016Sdfr# properly.
629178019Sjkim
630178019Sjkim.if !defined(KERNCONF) && defined(KERNEL)
63141016SdfrKERNCONF=	${KERNEL}
632178019SjkimKERNWARN=
63341016Sdfr.else
63441016SdfrKERNCONF?=	GENERIC
63541016Sdfr.endif
63641016SdfrINSTKERNNAME?=	kernel
63741016Sdfr
638178019SjkimKERNSRCDIR?=	${.CURDIR}/sys
63941016SdfrKRNLCONFDIR=	${KERNSRCDIR}/${TARGET}/conf
640178019SjkimKRNLOBJDIR=	${OBJTREE}${KERNSRCDIR}
641178019SjkimKERNCONFDIR?=	${KRNLCONFDIR}
642178019Sjkim
643178019SjkimBUILDKERNELS=
644178019SjkimINSTALLKERNEL=
645178019Sjkim.for _kernel in ${KERNCONF}
646178019Sjkim.if exists(${KERNCONFDIR}/${_kernel})
647178019SjkimBUILDKERNELS+=	${_kernel}
648178019Sjkim.if empty(INSTALLKERNEL)
649178019SjkimINSTALLKERNEL= ${_kernel}
650178019Sjkim.endif
651178019Sjkim.endif
65241016Sdfr.endfor
653178019Sjkim
65441016Sdfr#
65541016Sdfr# buildkernel
65641016Sdfr#
65741016Sdfr# Builds all kernels defined by BUILDKERNELS.
65841016Sdfr#
65941016Sdfrbuildkernel:
660178019Sjkim.if empty(BUILDKERNELS)
66141016Sdfr	@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
662178019Sjkim	false
663178019Sjkim.endif
66441016Sdfr.if defined(KERNWARN)
665178019Sjkim	@echo "--------------------------------------------------------------"
66641016Sdfr	@echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
66741016Sdfr	@echo "--------------------------------------------------------------"
66841016Sdfr	@sleep 3
66941016Sdfr.endif
67041016Sdfr	@echo
67141016Sdfr.for _kernel in ${BUILDKERNELS}
67241016Sdfr	@echo "--------------------------------------------------------------"
67341016Sdfr	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
67441016Sdfr	@echo "--------------------------------------------------------------"
675178019Sjkim	@echo "===> ${_kernel}"
67641016Sdfr	mkdir -p ${KRNLOBJDIR}
677178019Sjkim.if !defined(NO_KERNELCONFIG)
678178019Sjkim	@echo
67941016Sdfr	@echo "--------------------------------------------------------------"
680178019Sjkim	@echo ">>> stage 1: configuring the kernel"
68141016Sdfr	@echo "--------------------------------------------------------------"
68241016Sdfr	cd ${KRNLCONFDIR}; \
68341016Sdfr		PATH=${TMPPATH} \
68441016Sdfr		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
68541016Sdfr			${KERNCONFDIR}/${_kernel}
686178019Sjkim.endif
687178019Sjkim.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
68841016Sdfr	@echo
689178019Sjkim	@echo "--------------------------------------------------------------"
690178019Sjkim	@echo ">>> stage 2.1: cleaning up the object tree"
691178019Sjkim	@echo "--------------------------------------------------------------"
692178019Sjkim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
693178019Sjkim.endif
694178019Sjkim	@echo
695178019Sjkim	@echo "--------------------------------------------------------------"
696178019Sjkim	@echo ">>> stage 2.2: rebuilding the object tree"
697178019Sjkim	@echo "--------------------------------------------------------------"
698178019Sjkim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
699178019Sjkim	@echo
700178019Sjkim	@echo "--------------------------------------------------------------"
701178019Sjkim	@echo ">>> stage 2.3: build tools"
702178019Sjkim	@echo "--------------------------------------------------------------"
70341016Sdfr	cd ${KRNLOBJDIR}/${_kernel}; \
70441016Sdfr	    MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
70541016Sdfr	    ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
70641016Sdfr# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
70741016Sdfr.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
70841016Sdfr.for target in obj depend all
70941016Sdfr	cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
71041016Sdfr	    MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
71141016Sdfr	    ${MAKE} -DNO_CPU_CFLAGS ${target}
71241016Sdfr.endfor
71341016Sdfr.endif
714178019Sjkim.if !defined(NO_KERNELDEPEND)
715178019Sjkim	@echo
716178019Sjkim	@echo "--------------------------------------------------------------"
717178019Sjkim	@echo ">>> stage 3.1: making dependencies"
718178019Sjkim	@echo "--------------------------------------------------------------"
719178019Sjkim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
720178019Sjkim.endif
721178019Sjkim	@echo
72241016Sdfr	@echo "--------------------------------------------------------------"
723178019Sjkim	@echo ">>> stage 3.2: building everything"
724178019Sjkim	@echo "--------------------------------------------------------------"
725178019Sjkim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
726178019Sjkim	@echo "--------------------------------------------------------------"
72741016Sdfr	@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
728178019Sjkim	@echo "--------------------------------------------------------------"
72941016Sdfr.endfor
73041016Sdfr
73141016Sdfr#
73241016Sdfr# installkernel, etc.
73341016Sdfr#
73441016Sdfr# Install the kernel defined by INSTALLKERNEL
735178019Sjkim#
736178019Sjkiminstallkernel installkernel.debug \
737178019Sjkimreinstallkernel reinstallkernel.debug: installcheck
738178019Sjkim.if empty(INSTALLKERNEL)
739178019Sjkim	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
740178019Sjkim	false
741178019Sjkim.endif
742178019Sjkim	@echo "--------------------------------------------------------------"
743178019Sjkim	@echo ">>> Installing kernel"
744178019Sjkim	@echo "--------------------------------------------------------------"
745178019Sjkim	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
746178019Sjkim	    ${CROSSENV} PATH=${TMPPATH} \
747178019Sjkim	    ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
748178019Sjkim
749178019Sjkim#
750248479Sjkim# doxygen
751178019Sjkim#
752178019Sjkim# Build the API documentation with doxygen
753178019Sjkim#
754178019Sjkimdoxygen:
75541016Sdfr	@if [ ! -x `/usr/bin/which doxygen` ]; then \
756178019Sjkim		echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
757178019Sjkim		exit 1; \
758178019Sjkim	fi
759178019Sjkim	cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
76041016Sdfr
76141016Sdfr#
76241016Sdfr# update
76341016Sdfr#
76441016Sdfr# Update the source tree, by running cvsup and/or running cvs to update to the
765178019Sjkim# latest copy.
766178019Sjkim#
76741016Sdfrupdate:
76841016Sdfr.if defined(SUP_UPDATE)
769178019Sjkim	@echo "--------------------------------------------------------------"
770178019Sjkim	@echo ">>> Running ${SUP}"
771178019Sjkim	@echo "--------------------------------------------------------------"
772178019Sjkim.if defined(SUPFILE)
773178019Sjkim	@${SUP} ${SUPFLAGS} ${SUPFILE}
77441016Sdfr.endif
775178019Sjkim.if defined(SUPFILE1)
776178019Sjkim	@${SUP} ${SUPFLAGS} ${SUPFILE1}
777178019Sjkim.endif
778178019Sjkim.if defined(SUPFILE2)
779178019Sjkim	@${SUP} ${SUPFLAGS} ${SUPFILE2}
780178019Sjkim.endif
781178019Sjkim.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
782178019Sjkim	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
783178019Sjkim.endif
78441016Sdfr.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
78541016Sdfr	@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
78641016Sdfr.endif
78741016Sdfr.endif
78841016Sdfr.if defined(CVS_UPDATE)
78941016Sdfr	@echo "--------------------------------------------------------------"
790178019Sjkim	@echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT}
79141016Sdfr	@echo "--------------------------------------------------------------"
792178019Sjkim	cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS}
793178019Sjkim.endif
794178019Sjkim
795178019Sjkim#
796178019Sjkim# ------------------------------------------------------------------------
797178019Sjkim#
798178019Sjkim# From here onwards are utility targets used by the 'make world' and
799178019Sjkim# related targets.  If your 'world' breaks, you may like to try to fix
800178019Sjkim# the problem and manually run the following targets to attempt to
80141016Sdfr# complete the build.  Beware, this is *not* guaranteed to work, you
80241016Sdfr# need to have a pretty good grip on the current state of the system
803178019Sjkim# to attempt to manually finish it.  If in doubt, 'make world' again.
80441016Sdfr#
805178019Sjkim
80641016Sdfr#
80741016Sdfr# legacy: Build compatibility shims for the next three targets
80841016Sdfr#
80941016Sdfrlegacy:
81041016Sdfr.if ${BOOTSTRAPPING} < 503000
81184880Syokota	@echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \
81241016Sdfr	false
813178019Sjkim.endif
814178019Sjkim.for _tool in tools/build
815178019Sjkim	${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
81641016Sdfr	    cd ${.CURDIR}/${_tool}; \
817178019Sjkim	    ${MAKE} DIRPRFX=${_tool}/ obj; \
818178019Sjkim	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
819178019Sjkim	    ${MAKE} DIRPRFX=${_tool}/ depend; \
820178019Sjkim	    ${MAKE} DIRPRFX=${_tool}/ all; \
821178019Sjkim	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
822178019Sjkim.endfor
823178019Sjkim
824178019Sjkim#
825178019Sjkim# bootstrap-tools: Build tools needed for compatibility
826178019Sjkim#
827178019Sjkim.if ${MK_GAMES} != "no"
828178019Sjkim_strfile=	games/fortune/strfile
829178019Sjkim.endif
830178019Sjkim
831178019Sjkim.if ${MK_CXX} != "no"
832178019Sjkim_gperf=		gnu/usr.bin/gperf
833178019Sjkim.if ${BOOTSTRAPPING} < 700004
834178019Sjkim_groff=		gnu/usr.bin/groff
835178019Sjkim.else
836178019Sjkim_groff=		gnu/usr.bin/groff/tmac
837178019Sjkim.endif
83841016Sdfr.endif
839178019Sjkim
840178019Sjkim.if ${BOOTSTRAPPING} < 600029
841178019Sjkim_texinfo=	gnu/usr.bin/texinfo
842178019Sjkim.endif
843178019Sjkim
844178019Sjkim.if ${BOOTSTRAPPING} < 600015
845178019Sjkim_cap_mkdb=	usr.bin/cap_mkdb
846178019Sjkim.endif
847178019Sjkim
848178019Sjkim.if ${BOOTSTRAPPING} < 600018
849178019Sjkim_colldef=	usr.bin/colldef
850178019Sjkim.endif
851178019Sjkim
852178019Sjkim.if ${BOOTSTRAPPING} < 600017
853178019Sjkim_gencat=	usr.bin/gencat
854178019Sjkim.endif
855178019Sjkim
856178019Sjkim.if ${BOOTSTRAPPING} < 600016
857178019Sjkim_mklocale=	usr.bin/mklocale
858178019Sjkim.endif
859178019Sjkim
86045789Speter.if ${BOOTSTRAPPING} < 700018
861178019Sjkim_gensnmptree=	usr.sbin/bsnmpd/gensnmptree
862178019Sjkim.endif
863178019Sjkim
864178019Sjkim.if ${MK_RESCUE} != "no" && \
86545789Speter    ${BOOTSTRAPPING} < 700026
866178019Sjkim_crunchgen=	usr.sbin/crunch/crunchgen
86741016Sdfr.endif
868233580Sjkim
869233580Sjkim.if ${BOOTSTRAPPING} < 600020
870233580Sjkim_pwd_mkdb=	usr.sbin/pwd_mkdb
871233580Sjkim.endif
87241016Sdfr
873178019Sjkimbootstrap-tools:
874178019Sjkim.for _tool in \
875178019Sjkim    ${_strfile} \
876178019Sjkim    ${_gperf} \
877178019Sjkim    ${_groff} \
878178019Sjkim    ${_texinfo} \
879178019Sjkim    ${_cap_mkdb} \
880178019Sjkim    ${_colldef} \
881178019Sjkim    ${_gencat} \
882178019Sjkim    usr.bin/lorder \
88341016Sdfr    usr.bin/makewhatis \
884178019Sjkim    ${_mklocale} \
885178019Sjkim    usr.bin/rpcgen \
88641016Sdfr    usr.bin/xinstall \
887178019Sjkim    ${_gensnmptree} \
888178019Sjkim    usr.sbin/config \
889178019Sjkim    ${_crunchgen} \
890178019Sjkim    ${_pwd_mkdb}
89141016Sdfr	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
892178019Sjkim		cd ${.CURDIR}/${_tool}; \
89341016Sdfr		${MAKE} DIRPRFX=${_tool}/ obj; \
89441016Sdfr		${MAKE} DIRPRFX=${_tool}/ depend; \
89541016Sdfr		${MAKE} DIRPRFX=${_tool}/ all; \
89684880Syokota		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
89741016Sdfr.endfor
898178019Sjkim
89941016Sdfr#
900183888Sdumbbell# build-tools: Build special purpose build tools
901183888Sdumbbell#
902183888Sdumbbell.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
903183888Sdumbbell_aicasm= sys/modules/aic7xxx/aicasm
904183888Sdumbbell.endif
905183888Sdumbbell
906183888Sdumbbell.if !defined(NO_SHARE)
907183888Sdumbbell_share=	share/syscons/scrnmaps
908183888Sdumbbell.endif
909183888Sdumbbell
910183888Sdumbbell.if ${MK_KERBEROS} != "no"
911183888Sdumbbell_kerberos5_tools= kerberos5/tools
912183888Sdumbbell.endif
913183888Sdumbbell
914183888Sdumbbell.if ${MK_RESCUE} != "no"
915244405Sdumbbell_rescue= rescue/rescue
916244405Sdumbbell.endif
917244405Sdumbbell
918183888Sdumbbellbuild-tools:
919183888Sdumbbell.for _tool in \
920183888Sdumbbell    bin/csh \
921183888Sdumbbell    bin/sh \
922183888Sdumbbell    ${_rescue} \
923183888Sdumbbell    lib/ncurses/ncurses \
924183888Sdumbbell    lib/ncurses/ncursesw \
925183888Sdumbbell    ${_share} \
926183888Sdumbbell    ${_aicasm} \
927183888Sdumbbell    usr.bin/awk \
928183888Sdumbbell    lib/libmagic \
929183888Sdumbbell    usr.sbin/sysinstall
930183888Sdumbbell	${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
931200674Sdumbbell		cd ${.CURDIR}/${_tool}; \
932200674Sdumbbell		${MAKE} DIRPRFX=${_tool}/ obj; \
933200674Sdumbbell		${MAKE} DIRPRFX=${_tool}/ build-tools
934200674Sdumbbell.endfor
935200674Sdumbbell.for _tool in \
936200674Sdumbbell    gnu/usr.bin/cc/cc_tools \
937200674Sdumbbell    ${_kerberos5_tools}
938200674Sdumbbell	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
939200674Sdumbbell		cd ${.CURDIR}/${_tool}; \
940200674Sdumbbell		${MAKE} DIRPRFX=${_tool}/ obj; \
941200674Sdumbbell		${MAKE} DIRPRFX=${_tool}/ depend; \
942200674Sdumbbell		${MAKE} DIRPRFX=${_tool}/ all
943200674Sdumbbell.endfor
944200674Sdumbbell
945200674Sdumbbell#
946200674Sdumbbell# cross-tools: Build cross-building tools
947200674Sdumbbell#
948200674Sdumbbell.if ${TARGET_ARCH} != ${MACHINE_ARCH}
949200674Sdumbbell.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
950200674Sdumbbell_btxld=		usr.sbin/btxld
951200674Sdumbbell.endif
952200674Sdumbbell.if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
953200674Sdumbbell_crunchide=	usr.sbin/crunch/crunchide
954200674Sdumbbell.endif
955200674Sdumbbell.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR)
956200674Sdumbbell_kgzip=		usr.sbin/kgzip
957200674Sdumbbell.endif
958200674Sdumbbell.endif
959200674Sdumbbell
960200674Sdumbbellcross-tools:
961178019Sjkim.for _tool in \
962178019Sjkim    gnu/usr.bin/binutils \
963178019Sjkim    gnu/usr.bin/cc \
964178019Sjkim    usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
965178019Sjkim    ${_btxld} \
966178019Sjkim    ${_crunchide} \
967178019Sjkim    ${_kgzip}
968178019Sjkim	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
969178019Sjkim		cd ${.CURDIR}/${_tool}; \
97041016Sdfr		${MAKE} DIRPRFX=${_tool}/ obj; \
971178019Sjkim		${MAKE} DIRPRFX=${_tool}/ depend; \
972178019Sjkim		${MAKE} DIRPRFX=${_tool}/ all; \
973178019Sjkim		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
974178019Sjkim.endfor
975178019Sjkim
976178019Sjkim#
97741016Sdfr# hierarchy - ensure that all the needed directories are present
978178019Sjkim#
97941016Sdfrhierarchy:
980178019Sjkim	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
981178019Sjkim
982178019Sjkim#
983178019Sjkim# libraries - build all libraries, and install them under ${DESTDIR}.
984178019Sjkim#
985178019Sjkim# The list of libraries with dependents (${_prebuild_libs}) and their
986178019Sjkim# interdependencies (__L) are built automatically by the
987178019Sjkim# ${.CURDIR}/tools/make_libdeps.sh script.
98841016Sdfr#
98941016Sdfrlibraries:
990178019Sjkim	cd ${.CURDIR}; \
991178019Sjkim	    ${MAKE} -f Makefile.inc1 _startup_libs; \
992178019Sjkim	    ${MAKE} -f Makefile.inc1 _prebuild_libs; \
99341016Sdfr	    ${MAKE} -f Makefile.inc1 _generic_libs;
994178019Sjkim
995178019Sjkim# These dependencies are not automatically generated:
99641016Sdfr#
997178019Sjkim# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all
998178019Sjkim# shared libraries for ELF.
999178019Sjkim#
1000178019Sjkim_startup_libs=	gnu/lib/csu gnu/lib/libgcc
1001178019Sjkim.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
1002178019Sjkim_startup_libs+=	lib/csu/${MACHINE_ARCH}-elf
1003178019Sjkim.else
1004178019Sjkim_startup_libs+=	lib/csu/${MACHINE_ARCH}
1005178019Sjkim.endif
1006178019Sjkim
100741016Sdfr_prebuild_libs=	${_kerberos5_lib_libasn1} ${_kerberos5_lib_libkrb5} \
1008178019Sjkim		${_kerberos5_lib_libroken} \
1009178019Sjkim		lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \
1010240211Sjhb		${_lib_libgssapi} ${_lib_libipx} \
101158230Syokota		lib/libkiconv lib/libkvm lib/libmd \
1012178019Sjkim		lib/ncurses/ncurses lib/ncurses/ncursesw \
101341016Sdfr		lib/libopie lib/libpam \
101441016Sdfr		lib/libradius lib/libsbuf lib/libtacplus lib/libutil \
101584880Syokota		${_lib_libypclnt} lib/libz lib/msun \
101684880Syokota		${_secure_lib_libcrypto} ${_secure_lib_libssh} \
101784880Syokota		${_secure_lib_libssl}
1018178019Sjkim
1019178019Sjkim_generic_libs=	gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib
1020178019Sjkim
102184880Syokotalib/libopie__L lib/libtacplus__L: lib/libmd__L
1022178019Sjkim
1023178019Sjkim.if ${MK_CRYPT} != "no"
1024178019Sjkim.if ${MK_OPENSSL} != "no"
1025178019Sjkim_secure_lib_libcrypto= secure/lib/libcrypto
102684880Syokota_secure_lib_libssl= secure/lib/libssl
1027178019Sjkimlib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L
1028178019Sjkim.if ${MK_OPENSSH} != "no"
1029240211Sjhb_secure_lib_libssh= secure/lib/libssh
103084880Syokotasecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
1031178019Sjkim.if ${MK_KERBEROS} != "no"
1032178019Sjkimsecure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \
1033178019Sjkim    kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \
1034178019Sjkim    kerberos5/lib/libroken__L
1035178019Sjkim.endif
1036178019Sjkim.endif
103784880Syokota.endif
1038178019Sjkim_secure_lib=	secure/lib
1039178019Sjkim.endif
104084880Syokota
1041178019Sjkim.if ${MK_IPX} != "no"
1042178019Sjkim_lib_libipx=	lib/libipx
1043178019Sjkim.endif
1044178019Sjkim
1045178019Sjkim.if ${MK_KERBEROS} != "no"
1046178019Sjkim_kerberos5_lib=	kerberos5/lib
1047178019Sjkim_kerberos5_lib_libasn1= kerberos5/lib/libasn1
1048178019Sjkim_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5
1049178019Sjkim_kerberos5_lib_libroken= kerberos5/lib/libroken
1050178019Sjkim_lib_libgssapi=	lib/libgssapi
105184880Syokota.endif
1052178019Sjkim
1053178019Sjkim.if ${MK_NIS} != "no"
1054178019Sjkim_lib_libypclnt=	lib/libypclnt
1055178019Sjkim.endif
1056178019Sjkim
1057178019Sjkim.if ${MK_OPENSSL} == "no"
1058178019Sjkimlib/libradius__L: lib/libmd__L
1059178019Sjkim.endif
1060178019Sjkim
1061178019Sjkim.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
106284880Syokota${_lib}__L: .PHONY
1063178019Sjkim.if exists(${.CURDIR}/${_lib})
1064178019Sjkim	${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \
1065178019Sjkim		cd ${.CURDIR}/${_lib}; \
1066178019Sjkim		${MAKE} DIRPRFX=${_lib}/ obj; \
1067178019Sjkim		${MAKE} DIRPRFX=${_lib}/ depend; \
1068178019Sjkim		${MAKE} DIRPRFX=${_lib}/ all; \
1069178019Sjkim		${MAKE} DIRPRFX=${_lib}/ install
1070178019Sjkim.endif
1071178019Sjkim.endfor
1072178019Sjkim
1073178019Sjkim# libpam is special: we need to build static PAM modules before
1074178019Sjkim# static PAM library, and dynamic PAM library before dynamic PAM
1075178019Sjkim# modules.
1076178019Sjkimlib/libpam__L: .PHONY
1077178019Sjkim	${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \
107884880Syokota		cd ${.CURDIR}/lib/libpam; \
1079178019Sjkim		${MAKE} DIRPRFX=lib/libpam/ obj; \
108084880Syokota		${MAKE} DIRPRFX=lib/libpam/ depend; \
1081178019Sjkim		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
1082178019Sjkim		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1083178019Sjkim
1084178019Sjkim_startup_libs: ${_startup_libs:S/$/__L/}
1085178019Sjkim_prebuild_libs: ${_prebuild_libs:S/$/__L/}
1086178019Sjkim_generic_libs: ${_generic_libs:S/$/__L/}
1087178019Sjkim
1088178019Sjkim.for __target in all clean cleandepend cleandir depend includes obj
1089178019Sjkim.for entry in ${SUBDIR}
1090178019Sjkim${entry}.${__target}__D: .PHONY
1091178019Sjkim	${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1092178019Sjkim		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
1093178019Sjkim		edir=${entry}.${MACHINE_ARCH}; \
1094178019Sjkim		cd ${.CURDIR}/$${edir}; \
1095178019Sjkim	else \
1096178019Sjkim		${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1097178019Sjkim		edir=${entry}; \
1098178019Sjkim		cd ${.CURDIR}/$${edir}; \
109984880Syokota	fi; \
110084880Syokota	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1101178019Sjkim.endfor
1102178019Sjkimpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
110384880Syokota.endfor
110484880Syokota
110541016Sdfr.include <bsd.subdir.mk>
110641016Sdfr
110783147Syokota.if make(delete-old) || make(delete-old-libs) || make(check-old)
110883147Syokota
110983147Syokota#
1110178019Sjkim# check for / delete old files section
1111178019Sjkim#
1112178019Sjkim
1113178019Sjkim.include "ObsoleteFiles.inc"
111483147Syokota
1115178019SjkimOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \
111683931Syokotaelse you can not start such an application. Consult UPDATING for more \
1117178019Sjkiminformation regarding how to cope with the removal/revision bump of a \
1118178019Sjkimspecific library."
1119178019Sjkim
1120178019Sjkim.if !defined(BATCH_DELETE_OLD_FILES)
112183931SyokotaRM_I=-i
1122178019Sjkim.else
1123178019SjkimRM_I=-v
1124178019Sjkim.endif
112583931Syokota
1126178019Sjkimdelete-old-files:
1127178019Sjkim	@echo ">>> Removing old files (only deletes safe to delete libs)"
1128178019Sjkim.for file in ${OLD_FILES}
1129178019Sjkim# Ask for every old file if the user really wants to remove it.
1130178019Sjkim# It's annoying, but better safe than sorry.
1131178019Sjkim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1132178019Sjkim		rm ${RM_I} "${DESTDIR}/${file}" || true; \
1133178019Sjkim		if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\
1134178019Sjkim			echo "Removing schg flag on ${DESTDIR}/${file}"; \
1135178019Sjkim			chflags noschg "${DESTDIR}/${file}"; \
1136178019Sjkim			rm ${RM_I} "${DESTDIR}/${file}"; \
1137178019Sjkim		fi; \
1138216491Sjhb	fi
1139178019Sjkim.endfor
114083147Syokota# Remove catpages without corresponding manpages.
114183147Syokota	@3<&0; \
1142178019Sjkim	find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1143178019Sjkim	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1144178019Sjkim	while read catpage; do \
1145178019Sjkim		read manpage; \
1146178019Sjkim		if [ ! -e "$${manpage}" ]; then \
1147178019Sjkim			rm ${RM_I} $${catpage} <&3 ; \
1148178019Sjkim	        fi; \
114941016Sdfr	done
115041016Sdfr	@echo ">>> Old files removed"
115141016Sdfr
115241016Sdfrcheck-old-files:
1153178019Sjkim	@echo ">>> Checking for old files"
1154178019Sjkim.for file in ${OLD_FILES}
1155178019Sjkim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1156178019Sjkim		 echo "${DESTDIR}/${file}"; \
1157178019Sjkim	fi
1158178019Sjkim.endfor
1159178019Sjkim# Check for catpages without corresponding manpages.
116041016Sdfr	@find ${DESTDIR}/usr/share/man/cat* ! -type d | \
116141016Sdfr	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1162178019Sjkim	while read catpage; do \
116341016Sdfr		read manpage; \
116458230Syokota		if [ ! -e "$${manpage}" ]; then \
1165178019Sjkim			echo $${catpage} ; \
1166178019Sjkim	        fi; \
1167216491Sjhb	done
1168178019Sjkim
1169178019Sjkimdelete-old-libs:
1170178019Sjkim	@echo ">>> Removing old libraries"
1171178019Sjkim	@echo "${OLD_LIBS_MESSAGE}" | fmt
1172178019Sjkim.for file in ${OLD_LIBS}
1173178019Sjkim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
117458230Syokota		rm ${RM_I} "${DESTDIR}/${file}" || true; \
1175178019Sjkim		if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\
1176178019Sjkim			echo "Removing schg flag on ${DESTDIR}/${file}"; \
1177178019Sjkim			chflags noschg "${DESTDIR}/${file}"; \
1178178019Sjkim			rm ${RM_I} "${DESTDIR}/${file}"; \
117958230Syokota		fi; \
1180178019Sjkim	fi
118158230Syokota.endfor
1182233580Sjkim	@echo ">>> Old libraries removed"
118358230Syokota
118458230Syokotacheck-old-libs:
118558230Syokota	@echo ">>> Checking for old libraries"
118658230Syokota.for file in ${OLD_LIBS}
1187178019Sjkim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1188178019Sjkim		echo "${DESTDIR}/${file}"; \
1189178019Sjkim	fi
119041016Sdfr.endfor
1191178019Sjkim
119243105Sdfrdelete-old-dirs:
1193178019Sjkim	@echo ">>> Removing old directories"
1194178019Sjkim.for dir in ${OLD_DIRS}
1195178019Sjkim# Don't fail if an old directory isn't empty.
1196178019Sjkim	@if [ -d "${DESTDIR}/${dir}" ]; then \
1197178019Sjkim		rmdir -v "${DESTDIR}/${dir}" || true; \
1198178019Sjkim	else \
119941016Sdfr		if [ -L "${DESTDIR}/${dir}" ]; then \
1200178019Sjkim			echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \
1201178019Sjkim		fi; \
1202178019Sjkim	fi
1203178019Sjkim.endfor
1204178019Sjkim	@echo ">>> Old directories removed"
120541016Sdfr
1206178019Sjkimcheck-old-dirs:
1207178019Sjkim	@echo ">>> Checking for old directories"
120841016Sdfr.for dir in ${OLD_DIRS}
1209178019Sjkim	@if [ -d "${DESTDIR}/${dir}" ]; then \
1210178019Sjkim		echo "${DESTDIR}/${dir}"; \
1211178019Sjkim	else \
1212178019Sjkim		if [ -L "${DESTDIR}/${dir}" ]; then \
1213178019Sjkim			echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \
1214178019Sjkim		fi; \
1215178019Sjkim	fi
1216178019Sjkim.endfor
1217178019Sjkim
1218178019Sjkimdelete-old: delete-old-files delete-old-dirs
1219178019Sjkim	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1220178019Sjkim
122141016Sdfrcheck-old: check-old-files check-old-libs check-old-dirs
1222178019Sjkim	@echo "To remove old files and directories run '${MAKE} delete-old'."
1223178019Sjkim	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1224178019Sjkim
1225178019Sjkim.endif
1226178019Sjkim
122741016Sdfr#
1228178019Sjkim# showconfig - show build configuration.
1229178019Sjkim#
1230178019Sjkimshowconfig:
1231178019Sjkim	@${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort
1232178019Sjkim