Makefile.inc1 revision 161119
1243789Sdim#
2243789Sdim# $FreeBSD: head/Makefile.inc1 161119 2006-08-09 11:03:06Z netchild $
3243789Sdim#
4243789Sdim# Make command line options:
5243789Sdim#	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
6243789Sdim#	-DNO_CLEAN do not clean at all
7243789Sdim#	-DNO_SHARE do not go into share subdir
8243789Sdim#	-DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
9243789Sdim#	-DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
10243789Sdim#	-DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
11243789Sdim#	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
12243789Sdim#	-DNO_DOCUPDATE do not update doc in ${MAKE} update
13243789Sdim#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
14243789Sdim#	TARGET_ARCH="arch" to crossbuild world to a different arch
15243789Sdim
16243789Sdim#
17243789Sdim# The intended user-driven targets are:
18243789Sdim# buildworld  - rebuild *everything*, including glue to help do upgrades
19243789Sdim# installworld- install everything built by "buildworld"
20243789Sdim# doxygen     - build API documentation of the kernel
21243789Sdim# update      - convenient way to update your source tree (eg: cvsup/cvs)
22243789Sdim#
23243789Sdim# Standard targets (not defined here) are documented in the makefiles in
24243789Sdim# /usr/share/mk.  These include:
25243789Sdim#		obj depend all install clean cleandepend cleanobj
26243789Sdim
27243789Sdim.include <bsd.own.mk>
28252723Sdim
29243789Sdim# We must do share/info early so that installation of info `dir'
30243789Sdim# entries works correctly.  Do it first since it is less likely to
31243789Sdim# grow dependencies on include and lib than vice versa.
32243789Sdim#
33243789Sdim# We must do lib and libexec before bin, because if installworld
34252723Sdim# installs a new /bin/sh, the 'make' command will *immediately*
35243789Sdim# use that new version.  And the new (dynamically-linked) /bin/sh
36252723Sdim# will expect to find appropriate libraries in /lib and /libexec.
37252723Sdim#
38252723Sdim# We must do etc last for install/distribute to work.
39252723Sdim#
40252723SdimSUBDIR=	share/info include lib libexec bin
41252723Sdim.if ${MK_GAMES} != "no"
42252723SdimSUBDIR+=games
43252723Sdim.endif
44252723SdimSUBDIR+=gnu
45252723Sdim.if ${MK_KERBEROS} != "no"
46252723SdimSUBDIR+=kerberos5
47252723Sdim.endif
48252723Sdim.if ${MK_RESCUE} != "no"
49243789SdimSUBDIR+=rescue
50263509Sdim.endif
51243789SdimSUBDIR+=sbin
52243789Sdim.if ${MK_CRYPT} != "no"
53243789SdimSUBDIR+=secure
54243789Sdim.endif
55243789Sdim.if !defined(NO_SHARE)
56243789SdimSUBDIR+=share
57243789Sdim.endif
58243789SdimSUBDIR+=sys usr.bin usr.sbin etc
59243789Sdim
60243789Sdim# These are last, since it is nice to at least get the base system
61252723Sdim# rebuilt before you do them.
62263509Sdim.for _DIR in ${LOCAL_DIRS}
63263509Sdim.if exists(${.CURDIR}/${_DIR}/Makefile)
64263509SdimSUBDIR+= ${_DIR}
65252723Sdim.endif
66252723Sdim.endfor
67243789Sdim
68252723Sdim.if defined(SUBDIR_OVERRIDE)
69252723SdimSUBDIR=		${SUBDIR_OVERRIDE}
70243789Sdim.endif
71243789Sdim
72243789Sdim.if defined(NOCLEAN)
73243789SdimNO_CLEAN=	${NOCLEAN}
74243789Sdim.endif
75243789Sdim.if defined(NO_CLEANDIR)
76243789SdimCLEANDIR=	clean cleandepend
77252723Sdim.else
78252723SdimCLEANDIR=	cleandir
79252723Sdim.endif
80252723Sdim
81252723SdimCVS?=		cvs
82252723SdimCVSFLAGS?=	-A -P -d -I!
83252723SdimSUP?=		/usr/bin/csup
84243789SdimSUPFLAGS?=	-g -L 2
85252723Sdim.if defined(SUPHOST)
86243789SdimSUPFLAGS+=	-h ${SUPHOST}
87252723Sdim.endif
88252723Sdim
89252723SdimMAKEOBJDIRPREFIX?=	/usr/obj
90252723Sdim.if !defined(OSRELDATE)
91252723Sdim.if exists(/usr/include/osreldate.h)
92252723SdimOSRELDATE!=	awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
93252723Sdim		/usr/include/osreldate.h
94243789Sdim.else
95252723SdimOSRELDATE=	0
96252723Sdim.endif
97252723Sdim.endif
98252723SdimTARGET_ARCH?=	${MACHINE_ARCH}
99252723Sdim.if ${TARGET_ARCH} == ${MACHINE_ARCH}
100252723SdimTARGET?=	${MACHINE}
101252723SdimTARGET_CPUTYPE?=${CPUTYPE}
102243789Sdim.else
103252723SdimTARGET?=	${TARGET_ARCH}
104252723SdimTARGET_CPUTYPE?=
105252723Sdim.endif
106252723Sdim.if !empty(TARGET_CPUTYPE)
107252723Sdim_TARGET_CPUTYPE=${TARGET_CPUTYPE}
108252723Sdim.else
109252723Sdim_TARGET_CPUTYPE=dummy
110252723Sdim.endif
111252723Sdim_CPUTYPE!=	MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
112243789Sdim		-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
113252723Sdim.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
114263509Sdim.error CPUTYPE global should be set with ?=.
115263509Sdim.endif
116263509Sdim.if make(buildworld)
117263509SdimBUILD_ARCH!=	uname -p
118263509Sdim.if ${MACHINE_ARCH} != ${BUILD_ARCH}
119263509Sdim.error To cross-build, set TARGET_ARCH.
120263509Sdim.endif
121252723Sdim.endif
122252723Sdim.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING)
123243789SdimOBJTREE=	${MAKEOBJDIRPREFIX}
124252723Sdim.else
125252723SdimOBJTREE=	${MAKEOBJDIRPREFIX}/${TARGET}
126243789Sdim.endif
127263509SdimWORLDTMP=	${OBJTREE}${.CURDIR}/tmp
128263509Sdim# /usr/games added for fortune which depend on strfile
129263509SdimBPATH=		${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
130243789SdimXPATH=		${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
131263509SdimSTRICTTMPPATH=	${BPATH}:${XPATH}
132263509SdimTMPPATH=	${STRICTTMPPATH}:${PATH}
133263509Sdim
134263509SdimINSTALLTMP!=	/usr/bin/mktemp -d -u -t install
135263509Sdim
136263509Sdim#
137263509Sdim# Building a world goes through the following stages
138263509Sdim#
139263509Sdim# 1. legacy stage [BMAKE]
140263509Sdim#	This stage is responsible for creating compatibility
141263509Sdim#	shims that are needed by the bootstrap-tools,
142263509Sdim#	build-tools and cross-tools stages.
143263509Sdim# 1. bootstrap-tools stage [BMAKE]
144263509Sdim#	This stage is responsible for creating programs that
145263509Sdim#	are needed for backward compatibility reasons. They
146263509Sdim#	are not built as cross-tools.
147263509Sdim# 2. build-tools stage [TMAKE]
148252723Sdim#	This stage is responsible for creating the object
149243789Sdim#	tree and building any tools that are needed during
150252723Sdim#	the build process.
151252723Sdim# 3. cross-tools stage [XMAKE]
152252723Sdim#	This stage is responsible for creating any tools that
153252723Sdim#	are needed for cross-builds. A cross-compiler is one
154263509Sdim#	of them.
155263509Sdim# 4. world stage [WMAKE]
156263509Sdim#	This stage actually builds the world.
157263509Sdim# 5. install stage (optional) [IMAKE]
158263509Sdim#	This stage installs a previously built world.
159252723Sdim#
160252723Sdim
161243789SdimBOOTSTRAPPING?=	0
162252723Sdim
163263509Sdim# Common environment for world related stages
164263509SdimCROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
165263509Sdim		MACHINE_ARCH=${TARGET_ARCH} \
166252723Sdim		MACHINE=${TARGET} \
167252723Sdim		CPUTYPE=${TARGET_CPUTYPE} \
168263509Sdim		GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
169263509Sdim		GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
170252723Sdim		GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
171252723Sdim
172263509Sdim# bootstrap-tools stage
173263509SdimBMAKEENV=	INSTALL="sh ${.CURDIR}/tools/install.sh" \
174263509Sdim		PATH=${BPATH}:${PATH} \
175252723Sdim		WORLDTMP=${WORLDTMP} \
176263509Sdim		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
177252723SdimBMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
178263509Sdim		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
179252723Sdim		DESTDIR= \
180263509Sdim		BOOTSTRAPPING=${OSRELDATE} \
181263509Sdim		-DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \
182263509Sdim		-DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \
183263509Sdim		-DNO_CPU_CFLAGS -DNO_WARNS
184252723Sdim
185252723Sdim# build-tools stage
186252723SdimTMAKE=		MAKEOBJDIRPREFIX=${OBJTREE} \
187252723Sdim		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
188263509Sdim		DESTDIR= \
189252723Sdim		BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS
190263509Sdim
191263509Sdim# cross-tools stage
192263509SdimXMAKE=		TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
193263509Sdim		-DWITHOUT_FORTRAN -DWITHOUT_GDB
194263509Sdim
195263509Sdim# world stage
196252723SdimWMAKEENV=	${CROSSENV} \
197263509Sdim		_SHLIBDIRPREFIX=${WORLDTMP} \
198263509Sdim		INSTALL="sh ${.CURDIR}/tools/install.sh" \
199243789Sdim		PATH=${TMPPATH}
200243789SdimWMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
201243789Sdim
202263509Sdim.if ${TARGET_ARCH} == "amd64"
203243789Sdim# 32 bit world
204243789SdimLIB32TMP=	${OBJTREE}${.CURDIR}/lib32
205243789Sdim
206263509Sdim.if empty(TARGET_CPUTYPE)
207243789SdimLIB32CPUTYPE=	k8
208263509Sdim.else
209263509SdimLIB32CPUTYPE=	${TARGET_CPUTYPE}
210263509Sdim.endif
211243789SdimLIB32PREFLAGS=	-m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT
212263509SdimLIB32POSTFLAGS=	-I${LIB32TMP}/usr/include \
213263509Sdim		-L${LIB32TMP}/usr/lib32 \
214263509Sdim		-B${LIB32TMP}/usr/lib32
215243789SdimLIB32CC=	${LIB32PREFLAGS} \
216243789Sdim		${LIB32POSTFLAGS}
217243789SdimLIB32CXX=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \
218243789Sdim		${LIB32POSTFLAGS}
219243789SdimLIB32OBJC=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \
220243789Sdim		${LIB32POSTFLAGS}
221243789Sdim
222243789Sdim# Yes, the flags are redundant.
223243789SdimLIB32MAKEENV=	MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
224243789Sdim		_SHLIBDIRPREFIX=${LIB32TMP} \
225243789Sdim		MACHINE=i386 \
226243789Sdim		MACHINE_ARCH=i386 \
227243789Sdim		INSTALL="sh ${.CURDIR}/tools/install.sh" \
228243789Sdim		PATH=${TMPPATH} \
229243789Sdim		CC="${CC} ${LIB32CC}" \
230243789Sdim		CXX="${CXX} ${LIB32CXX}" \
231243789Sdim		OBJC="${OBJC} ${LIB32OBJC}" \
232243789Sdim		LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
233243789Sdim		AS="${AS} --32" \
234243789Sdim		LIBDIR=/usr/lib32 \
235243789Sdim		SHLIBDIR=/usr/lib32
236243789Sdim
237243789SdimLIB32MAKE=	${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
238243789Sdim		-DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \
239243789Sdim		-DWITHOUT_HTML
240243789SdimLIB32IMAKE=	${LIB32MAKE:NINSTALL=*} -DNO_INCS
241243789Sdim.endif
242263509Sdim
243243789Sdim# install stage
244263509Sdim.if empty(.MAKEFLAGS:M-n)
245263509SdimIMAKEENV=	${CROSSENV} \
246243789Sdim		PATH=${STRICTTMPPATH}:${INSTALLTMP}
247243789Sdim.else
248243789SdimIMAKEENV=	${CROSSENV} \
249243789Sdim		PATH=${TMPPATH}:${INSTALLTMP}
250243789Sdim.endif
251243789SdimIMAKE=		${IMAKEENV} ${MAKE} -f Makefile.inc1
252243789Sdim
253263509Sdim# kernel stage
254263509SdimKMAKEENV=	${WMAKEENV}
255243789SdimKMAKE=		${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME}
256252723Sdim
257243789Sdim#
258243789Sdim# buildworld
259243789Sdim#
260243789Sdim# Attempt to rebuild the entire system, with reasonable chance of
261263509Sdim# success, regardless of how old your existing system is.
262263509Sdim#
263243789Sdim_worldtmp:
264243789Sdim.if ${.CURDIR:C/[^,]//g} != ""
265263509Sdim#	The m4 build of sendmail files doesn't like it if ',' is used
266263509Sdim#	anywhere in the path of it's files.
267243789Sdim	@echo
268243789Sdim	@echo "*** Error: path to source tree contains a comma ','"
269263509Sdim	@echo
270243789Sdim	false
271263509Sdim.endif
272263509Sdim	@echo
273263509Sdim	@echo "--------------------------------------------------------------"
274263509Sdim	@echo ">>> Rebuilding the temporary build tree"
275263509Sdim	@echo "--------------------------------------------------------------"
276243789Sdim.if !defined(NO_CLEAN)
277243789Sdim	rm -rf ${WORLDTMP}
278243789Sdim.if ${TARGET_ARCH} == "amd64"
279263509Sdim	rm -rf ${LIB32TMP}
280263509Sdim.endif
281263509Sdim.else
282263509Sdim	rm -rf ${WORLDTMP}/legacy/usr/include
283243789Sdim#	XXX - These two can depend on any header file.
284243789Sdim	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
285243789Sdim	rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
286243789Sdim.endif
287243789Sdim.for _dir in \
288243789Sdim    usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \
289243789Sdim    usr/libexec usr/sbin usr/share/dict \
290243789Sdim    usr/share/groff_font/devX100 \
291243789Sdim    usr/share/groff_font/devX100-12 \
292243789Sdim    usr/share/groff_font/devX75 \
293243789Sdim    usr/share/groff_font/devX75-12 \
294243789Sdim    usr/share/groff_font/devascii \
295243789Sdim    usr/share/groff_font/devcp1047 \
296243789Sdim    usr/share/groff_font/devdvi \
297252723Sdim    usr/share/groff_font/devhtml \
298252723Sdim    usr/share/groff_font/devkoi8-r \
299252723Sdim    usr/share/groff_font/devlatin1 \
300252723Sdim    usr/share/groff_font/devlbp \
301252723Sdim    usr/share/groff_font/devlj4 \
302252723Sdim    usr/share/groff_font/devps \
303252723Sdim    usr/share/groff_font/devutf8 \
304252723Sdim    usr/share/tmac/mdoc usr/share/tmac/mm
305243789Sdim	mkdir -p ${WORLDTMP}/legacy/${_dir}
306252723Sdim.endfor
307252723Sdim.for _dir in \
308243789Sdim    lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \
309263509Sdim    usr/libexec usr/sbin usr/share/misc \
310243789Sdim    usr/share/snmp/defs usr/share/snmp/mibs
311263509Sdim	mkdir -p ${WORLDTMP}/${_dir}
312263509Sdim.endfor
313263509Sdim	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
314263509Sdim	    -p ${WORLDTMP}/usr/include >/dev/null
315263509Sdim	ln -sf ${.CURDIR}/sys ${WORLDTMP}
316263509Sdim.if ${MK_BIND_LIBS} != "no"
317243789Sdim	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
318252723Sdim	    -p ${WORLDTMP}/usr/include >/dev/null
319263509Sdim.endif
320252723Sdim_legacy:
321263509Sdim	@echo
322263509Sdim	@echo "--------------------------------------------------------------"
323243789Sdim	@echo ">>> stage 1.1: legacy release compatibility shims"
324263509Sdim	@echo "--------------------------------------------------------------"
325263509Sdim	${_+_}cd ${.CURDIR}; ${BMAKE} legacy
326263509Sdim_bootstrap-tools:
327243789Sdim	@echo
328263509Sdim	@echo "--------------------------------------------------------------"
329263509Sdim	@echo ">>> stage 1.2: bootstrap tools"
330263509Sdim	@echo "--------------------------------------------------------------"
331243789Sdim	${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
332243789Sdim_cleanobj:
333263509Sdim.if !defined(NO_CLEAN)
334263509Sdim	@echo
335263509Sdim	@echo "--------------------------------------------------------------"
336263509Sdim	@echo ">>> stage 2.1: cleaning up the object tree"
337263509Sdim	@echo "--------------------------------------------------------------"
338252723Sdim	${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
339243789Sdim.if ${TARGET_ARCH} == "amd64"
340252723Sdim	rm -rf ${OBJTREE}/lib32
341252723Sdim.endif
342252723Sdim.endif
343243789Sdim_obj:
344252723Sdim	@echo
345252723Sdim	@echo "--------------------------------------------------------------"
346263509Sdim	@echo ">>> stage 2.2: rebuilding the object tree"
347243789Sdim	@echo "--------------------------------------------------------------"
348263509Sdim	${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
349243789Sdim_build-tools:
350243789Sdim	@echo
351252723Sdim	@echo "--------------------------------------------------------------"
352252723Sdim	@echo ">>> stage 2.3: build tools"
353243789Sdim	@echo "--------------------------------------------------------------"
354243789Sdim	${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
355243789Sdim_cross-tools:
356252723Sdim	@echo
357252723Sdim	@echo "--------------------------------------------------------------"
358252723Sdim	@echo ">>> stage 3: cross tools"
359252723Sdim	@echo "--------------------------------------------------------------"
360243789Sdim	${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
361243789Sdim_includes:
362243789Sdim	@echo
363243789Sdim	@echo "--------------------------------------------------------------"
364263509Sdim	@echo ">>> stage 4.1: building includes"
365243789Sdim	@echo "--------------------------------------------------------------"
366243789Sdim	${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
367243789Sdim_libraries:
368243789Sdim	@echo
369263509Sdim	@echo "--------------------------------------------------------------"
370243789Sdim	@echo ">>> stage 4.2: building libraries"
371243789Sdim	@echo "--------------------------------------------------------------"
372263509Sdim	${_+_}cd ${.CURDIR}; \
373263509Sdim	    ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \
374263509Sdim	    -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries
375263509Sdim_depend:
376263509Sdim	@echo
377263509Sdim	@echo "--------------------------------------------------------------"
378263509Sdim	@echo ">>> stage 4.3: make dependencies"
379263509Sdim	@echo "--------------------------------------------------------------"
380263509Sdim	${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
381263509Sdimeverything:
382263509Sdim	@echo
383263509Sdim	@echo "--------------------------------------------------------------"
384263509Sdim	@echo ">>> stage 4.4: building everything"
385263509Sdim	@echo "--------------------------------------------------------------"
386252723Sdim	${_+_}cd ${.CURDIR}; ${WMAKE} par-all
387252723Sdim.if ${TARGET_ARCH} == "amd64"
388252723Sdimbuild32:
389252723Sdim	@echo
390252723Sdim	@echo "--------------------------------------------------------------"
391252723Sdim	@echo ">>> stage 5.1: building 32 bit shim libraries"
392252723Sdim	@echo "--------------------------------------------------------------"
393252723Sdim.for _dir in \
394252723Sdim    lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \
395252723Sdim    usr/libexec usr/sbin usr/share/misc \
396252723Sdim    usr/share/snmp/defs usr/share/snmp/mibs
397252723Sdim	mkdir -p ${LIB32TMP}/${_dir}
398243789Sdim.endfor
399252723Sdim	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
400252723Sdim	    -p ${LIB32TMP}/usr/include >/dev/null
401252723Sdim	mkdir -p ${WORLDTMP}
402252723Sdim	ln -sf ${.CURDIR}/sys ${WORLDTMP}
403252723Sdim.if ${MK_KERBEROS} != "no"
404252723Sdim.for _t in obj depend all
405252723Sdim	cd ${.CURDIR}/kerberos5/tools; \
406252723Sdim	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t}
407252723Sdim.endfor
408252723Sdim.endif
409252723Sdim.for _t in obj includes
410252723Sdim	cd ${.CURDIR}/include; \
411252723Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
412252723Sdim	cd ${.CURDIR}/lib; \
413252723Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
414252723Sdim	cd ${.CURDIR}/gnu/lib; \
415252723Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
416252723Sdim.if ${MK_CRYPT} != "no"
417252723Sdim	cd ${.CURDIR}/secure/lib; \
418252723Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
419252723Sdim.endif
420252723Sdim.if ${MK_KERBEROS} != "no"
421252723Sdim	cd ${.CURDIR}/kerberos5/lib; \
422243789Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
423243789Sdim.endif
424243789Sdim.endfor
425243789Sdim.for _dir in usr.bin/lex/lib
426243789Sdim	cd ${.CURDIR}/${_dir}; \
427243789Sdim	    ${LIB32MAKE} DESTDIR=${LIB32TMP} obj
428243789Sdim.endfor
429252723Sdim.for _dir in lib/libncurses lib/libmagic
430252723Sdim	cd ${.CURDIR}/${_dir}; \
431252723Sdim	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools
432243789Sdim.endfor
433243789Sdim	cd ${.CURDIR}; \
434263509Sdim	    ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 
435252723Sdim.for _t in obj depend all
436263509Sdim	cd ${.CURDIR}/libexec/rtld-elf; \
437243789Sdim	    PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
438243789Sdim.endfor
439243789Sdim
440243789Sdimdistribute32 install32:
441252723Sdim.if make(distribute32)
442243789Sdim	mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32	# XXX add to mtree
443243789Sdim.else
444243789Sdim	mkdir -p ${DESTDIR}/usr/lib32			# XXX add to mtree
445252723Sdim.endif
446243789Sdim	cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
447243789Sdim	cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
448252723Sdim.if ${MK_CRYPT} != "no"
449252723Sdim	cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
450252723Sdim.endif
451263509Sdim	cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
452252723Sdim.endif
453252723Sdim
454252723Sdim
455252723SdimWMAKE_TGTS=
456252723Sdim.if !defined(SUBDIR_OVERRIDE)
457252723SdimWMAKE_TGTS+=	_worldtmp _legacy _bootstrap-tools
458252723Sdim.endif
459252723SdimWMAKE_TGTS+=	_cleanobj _obj _build-tools
460243789Sdim.if !defined(SUBDIR_OVERRIDE)
461243789SdimWMAKE_TGTS+=	_cross-tools
462252723Sdim.endif
463243789SdimWMAKE_TGTS+=	_includes _libraries _depend everything
464252723Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
465252723SdimWMAKE_TGTS+=	build32
466243789Sdim.endif
467263509Sdim
468243789Sdimbuildworld: ${WMAKE_TGTS}
469252723Sdim.ORDER: ${WMAKE_TGTS}
470252723Sdim
471252723Sdim
472252723Sdim#
473252723Sdim# We need to have this as a target because the indirection between Makefile
474252723Sdim# and Makefile.inc1 causes the correct PATH to be used, rather than a
475252723Sdim# modification of the current environment's PATH.  In addition, we need
476263509Sdim# to quote multiword values.
477263509Sdim# 
478263509Sdimbuildenvvars:
479263509Sdim	@echo ${WMAKEENV:Q}
480263509Sdim
481263509Sdimbuildenv:
482243789Sdim	@echo Entering world for ${TARGET_ARCH}:${TARGET}
483263509Sdim	@cd ${.CURDIR} && env ${WMAKEENV} sh || true
484243789Sdim
485243789SdimTOOLCHAIN_TGTS=	${WMAKE_TGTS:N_depend:Neverything:Nbuild32}
486263509Sdimtoolchain: ${TOOLCHAIN_TGTS}
487263509Sdimkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
488263509Sdim
489263509Sdim#
490263509Sdim# installcheck
491263509Sdim#
492263509Sdim# Checks to be sure system is ready for installworld/installkernel.
493263509Sdim#
494263509Sdiminstallcheck:
495243789Sdim
496243789Sdim#
497243789Sdim# Require DESTDIR to be set if installing for a different architecture.
498263509Sdim#
499263509Sdim.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE}
500263509Sdim.if !make(distributeworld)
501243789Sdiminstallcheck: installcheck_DESTDIR
502243789Sdiminstallcheck_DESTDIR:
503243789Sdim.if !defined(DESTDIR) || empty(DESTDIR)
504243789Sdim	@echo "ERROR: Please set DESTDIR!"; \
505263509Sdim	false
506243789Sdim.endif
507243789Sdim.endif
508243789Sdim.endif
509263509Sdim
510243789Sdim#
511263509Sdim# Check for missing UIDs/GIDs.
512263509Sdim#
513263509SdimCHECK_UIDS=
514243789SdimCHECK_GIDS=	audit
515243789Sdim.if ${MK_SENDMAIL} != "no"
516243789SdimCHECK_UIDS+=	smmsp
517252723SdimCHECK_GIDS+=	smmsp
518243789Sdim.endif
519252723Sdim.if ${MK_PF} != "no"
520252723SdimCHECK_UIDS+=	proxy
521252723SdimCHECK_GIDS+=	proxy authpf
522252723Sdim.endif
523243789Sdiminstallcheck: installcheck_UGID
524243789Sdiminstallcheck_UGID:
525243789Sdim.for uid in ${CHECK_UIDS}
526252723Sdim	@if ! `id -u ${uid} >/dev/null 2>&1`; then \
527252723Sdim		echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
528243789Sdim		false; \
529252723Sdim	fi
530243789Sdim.endfor
531243789Sdim.for gid in ${CHECK_GIDS}
532252723Sdim	@if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
533243789Sdim		echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
534243789Sdim		false; \
535243789Sdim	fi
536243789Sdim.endfor
537263509Sdim
538243789Sdim#
539243789Sdim# distributeworld
540243789Sdim#
541243789Sdim# Distributes everything compiled by a `buildworld'.
542243789Sdim#
543243789Sdim# installworld
544243789Sdim#
545243789Sdim# Installs everything compiled by a 'buildworld'.
546243789Sdim#
547243789Sdimdistributeworld installworld: installcheck
548243789Sdim	mkdir -p ${INSTALLTMP}
549243789Sdim	for prog in [ awk cap_mkdb cat chflags chmod chown \
550243789Sdim	    date echo egrep find grep install-info \
551243789Sdim	    ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
552252723Sdim	    test true uname wc zic; do \
553243789Sdim		cp `which $$prog` ${INSTALLTMP}; \
554243789Sdim	done
555243789Sdim	${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
556243789Sdim	rm -rf ${INSTALLTMP}
557243789Sdim
558243789Sdim#
559252723Sdim# reinstall
560243789Sdim#
561243789Sdim# If you have a build server, you can NFS mount the source and obj directories
562243789Sdim# and do a 'make reinstall' on the *client* to install new binaries from the
563243789Sdim# most recent server build.
564243789Sdim#
565243789Sdimreinstall:
566243789Sdim	@echo "--------------------------------------------------------------"
567243789Sdim	@echo ">>> Making hierarchy"
568243789Sdim	@echo "--------------------------------------------------------------"
569243789Sdim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
570243789Sdim	@echo
571243789Sdim	@echo "--------------------------------------------------------------"
572243789Sdim	@echo ">>> Installing everything"
573243789Sdim	@echo "--------------------------------------------------------------"
574243789Sdim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
575243789Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
576243789Sdim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
577243789Sdim.endif
578243789Sdim
579243789Sdimredistribute:
580252723Sdim	@echo "--------------------------------------------------------------"
581252723Sdim	@echo ">>> Distributing everything"
582263509Sdim	@echo "--------------------------------------------------------------"
583252723Sdim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
584252723Sdim.if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
585252723Sdim	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32
586243789Sdim.endif
587263509Sdim
588263509Sdimdistrib-dirs distribution:
589263509Sdim	cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET}
590263509Sdim
591263509Sdim#
592263509Sdim# buildkernel and installkernel
593263509Sdim#
594263509Sdim# Which kernels to build and/or install is specified by setting
595263509Sdim# KERNCONF. If not defined a GENERIC kernel is built/installed.
596263509Sdim# Only the existing (depending TARGET) config files are used
597263509Sdim# for building kernels and only the first of these is designated
598263509Sdim# as the one being installed.
599263509Sdim#
600263509Sdim# Note that we have to use TARGET instead of TARGET_ARCH when
601263509Sdim# we're in kernel-land. Since only TARGET_ARCH is (expected) to
602263509Sdim# be set to cross-build, we have to make sure TARGET is set
603252723Sdim# properly.
604243789Sdim
605243789Sdim.if !defined(KERNCONF) && defined(KERNEL)
606263509SdimKERNCONF=	${KERNEL}
607243789SdimKERNWARN=
608243789Sdim.else
609252723SdimKERNCONF?=	GENERIC
610252723Sdim.endif
611263509SdimINSTKERNNAME?=	kernel
612243789Sdim
613243789SdimKERNSRCDIR?=	${.CURDIR}/sys
614243789SdimKRNLCONFDIR=	${KERNSRCDIR}/${TARGET}/conf
615243789SdimKRNLOBJDIR=	${OBJTREE}${KERNSRCDIR}
616252723SdimKERNCONFDIR?=	${KRNLCONFDIR}
617263509Sdim
618263509SdimBUILDKERNELS=
619263509SdimINSTALLKERNEL=
620263509Sdim.for _kernel in ${KERNCONF}
621243789Sdim.if exists(${KERNCONFDIR}/${_kernel})
622252723SdimBUILDKERNELS+=	${_kernel}
623243789Sdim.if empty(INSTALLKERNEL)
624252723SdimINSTALLKERNEL= ${_kernel}
625252723Sdim.endif
626243789Sdim.endif
627243789Sdim.endfor
628263509Sdim
629263509Sdim#
630263509Sdim# buildkernel
631263509Sdim#
632263509Sdim# Builds all kernels defined by BUILDKERNELS.
633243789Sdim#
634243789Sdimbuildkernel:
635243789Sdim.if empty(BUILDKERNELS)
636243789Sdim	@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
637243789Sdim	false
638243789Sdim.endif
639263509Sdim.if defined(KERNWARN)
640263509Sdim	@echo "--------------------------------------------------------------"
641263509Sdim	@echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
642252723Sdim	@echo "--------------------------------------------------------------"
643263509Sdim	@sleep 3
644243789Sdim.endif
645243789Sdim	@echo
646243789Sdim.for _kernel in ${BUILDKERNELS}
647263509Sdim	@echo "--------------------------------------------------------------"
648243789Sdim	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
649252723Sdim	@echo "--------------------------------------------------------------"
650263509Sdim	@echo "===> ${_kernel}"
651243789Sdim	mkdir -p ${KRNLOBJDIR}
652263509Sdim.if !defined(NO_KERNELCONFIG)
653243789Sdim	@echo
654243789Sdim	@echo "--------------------------------------------------------------"
655243789Sdim	@echo ">>> stage 1: configuring the kernel"
656263509Sdim	@echo "--------------------------------------------------------------"
657243789Sdim	cd ${KRNLCONFDIR}; \
658252723Sdim		PATH=${TMPPATH} \
659243789Sdim		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
660243789Sdim			${KERNCONFDIR}/${_kernel}
661243789Sdim.endif
662263509Sdim.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
663263509Sdim	@echo
664252723Sdim	@echo "--------------------------------------------------------------"
665252723Sdim	@echo ">>> stage 2.1: cleaning up the object tree"
666263509Sdim	@echo "--------------------------------------------------------------"
667252723Sdim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
668252723Sdim.endif
669252723Sdim	@echo
670243789Sdim	@echo "--------------------------------------------------------------"
671252723Sdim	@echo ">>> stage 2.2: rebuilding the object tree"
672243789Sdim	@echo "--------------------------------------------------------------"
673263509Sdim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
674263509Sdim	@echo
675263509Sdim	@echo "--------------------------------------------------------------"
676263509Sdim	@echo ">>> stage 2.3: build tools"
677243789Sdim	@echo "--------------------------------------------------------------"
678243789Sdim	cd ${KRNLOBJDIR}/${_kernel}; \
679263509Sdim	    MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
680243789Sdim	    ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
681243789Sdim# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
682263509Sdim.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
683243789Sdim.for target in obj depend all
684263509Sdim	cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
685263509Sdim	    MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
686263509Sdim	    ${MAKE} -DNO_CPU_CFLAGS ${target}
687263509Sdim.endfor
688243789Sdim.endif
689243789Sdim.if !defined(NO_KERNELDEPEND)
690263509Sdim	@echo
691263509Sdim	@echo "--------------------------------------------------------------"
692263509Sdim	@echo ">>> stage 3.1: making dependencies"
693263509Sdim	@echo "--------------------------------------------------------------"
694263509Sdim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
695243789Sdim.endif
696243789Sdim	@echo
697263509Sdim	@echo "--------------------------------------------------------------"
698263509Sdim	@echo ">>> stage 3.2: building everything"
699263509Sdim	@echo "--------------------------------------------------------------"
700243789Sdim	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
701243789Sdim	@echo "--------------------------------------------------------------"
702263509Sdim	@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
703243789Sdim	@echo "--------------------------------------------------------------"
704263509Sdim.endfor
705243789Sdim
706243789Sdim#
707243789Sdim# installkernel, etc.
708243789Sdim#
709243789Sdim# Install the kernel defined by INSTALLKERNEL
710263509Sdim#
711263509Sdiminstallkernel installkernel.debug \
712243789Sdimreinstallkernel reinstallkernel.debug: installcheck
713243789Sdim.if empty(INSTALLKERNEL)
714243789Sdim	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
715263509Sdim	false
716263509Sdim.endif
717243789Sdim	@echo "--------------------------------------------------------------"
718243789Sdim	@echo ">>> Installing kernel"
719243789Sdim	@echo "--------------------------------------------------------------"
720243789Sdim	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
721243789Sdim	    ${CROSSENV} PATH=${TMPPATH} \
722243789Sdim	    ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
723243789Sdim
724243789Sdim#
725243789Sdim# doxygen
726243789Sdim#
727243789Sdim# Build the API documentation with doxygen
728243789Sdim#
729243789Sdimdoxygen:
730243789Sdim	@if [ ! -x `/usr/bin/which doxygen` ]; then \
731243789Sdim		echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
732243789Sdim		exit 1; \
733243789Sdim	fi
734243789Sdim	cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
735243789Sdim
736263509Sdim#
737243789Sdim# update
738263509Sdim#
739243789Sdim# Update the source tree, by running cvsup and/or running cvs to update to the
740243789Sdim# latest copy.
741263509Sdim#
742263509Sdimupdate:
743243789Sdim.if defined(SUP_UPDATE)
744243789Sdim	@echo "--------------------------------------------------------------"
745243789Sdim	@echo ">>> Running ${SUP}"
746243789Sdim	@echo "--------------------------------------------------------------"
747243789Sdim.if defined(SUPFILE)
748243789Sdim	@${SUP} ${SUPFLAGS} ${SUPFILE}
749243789Sdim.endif
750243789Sdim.if defined(SUPFILE1)
751243789Sdim	@${SUP} ${SUPFLAGS} ${SUPFILE1}
752243789Sdim.endif
753243789Sdim.if defined(SUPFILE2)
754263509Sdim	@${SUP} ${SUPFLAGS} ${SUPFILE2}
755263509Sdim.endif
756263509Sdim.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
757243789Sdim	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
758243789Sdim.endif
759243789Sdim.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
760243789Sdim	@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
761243789Sdim.endif
762243789Sdim.endif
763243789Sdim.if defined(CVS_UPDATE)
764243789Sdim	@echo "--------------------------------------------------------------"
765263509Sdim	@echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT}
766243789Sdim	@echo "--------------------------------------------------------------"
767263509Sdim	cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS}
768263509Sdim.endif
769263509Sdim
770263509Sdim#
771263509Sdim# ------------------------------------------------------------------------
772263509Sdim#
773263509Sdim# From here onwards are utility targets used by the 'make world' and
774263509Sdim# related targets.  If your 'world' breaks, you may like to try to fix
775263509Sdim# the problem and manually run the following targets to attempt to
776263509Sdim# complete the build.  Beware, this is *not* guaranteed to work, you
777263509Sdim# need to have a pretty good grip on the current state of the system
778263509Sdim# to attempt to manually finish it.  If in doubt, 'make world' again.
779263509Sdim#
780263509Sdim
781263509Sdim#
782263509Sdim# legacy: Build compatibility shims for the next three targets
783263509Sdim#
784263509Sdimlegacy:
785263509Sdim.if ${BOOTSTRAPPING} < 503000
786263509Sdim	@echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \
787263509Sdim	false
788263509Sdim.endif
789243789Sdim.for _tool in tools/build
790243789Sdim	${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
791243789Sdim	    cd ${.CURDIR}/${_tool}; \
792263509Sdim	    ${MAKE} DIRPRFX=${_tool}/ obj; \
793243789Sdim	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
794243789Sdim	    ${MAKE} DIRPRFX=${_tool}/ depend; \
795243789Sdim	    ${MAKE} DIRPRFX=${_tool}/ all; \
796243789Sdim	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
797243789Sdim.endfor
798243789Sdim
799243789Sdim#
800263509Sdim# bootstrap-tools: Build tools needed for compatibility
801243789Sdim#
802243789Sdim.if ${MK_GAMES} != "no"
803252723Sdim_strfile=	games/fortune/strfile
804243789Sdim.endif
805243789Sdim
806243789Sdim.if ${MK_CXX} != "no"
807243789Sdim_gperf=		gnu/usr.bin/gperf
808243789Sdim.if ${BOOTSTRAPPING} < 700004
809252723Sdim_groff=		gnu/usr.bin/groff
810243789Sdim.else
811243789Sdim_groff=		gnu/usr.bin/groff/tmac
812252723Sdim.endif
813243789Sdim.endif
814252723Sdim
815243789Sdim.if ${BOOTSTRAPPING} < 600029
816243789Sdim_texinfo=	gnu/usr.bin/texinfo
817243789Sdim.endif
818243789Sdim
819243789Sdim.if ${BOOTSTRAPPING} < 600015
820243789Sdim_cap_mkdb=	usr.bin/cap_mkdb
821243789Sdim.endif
822243789Sdim
823243789Sdim.if ${BOOTSTRAPPING} < 600018
824243789Sdim_colldef=	usr.bin/colldef
825243789Sdim.endif
826243789Sdim
827243789Sdim.if ${BOOTSTRAPPING} < 600017
828243789Sdim_gencat=	usr.bin/gencat
829243789Sdim.endif
830243789Sdim
831243789Sdim.if ${BOOTSTRAPPING} < 600016
832243789Sdim_mklocale=	usr.bin/mklocale
833243789Sdim.endif
834243789Sdim
835243789Sdim.if ${BOOTSTRAPPING} < 700015
836243789Sdim_gensnmptree=	usr.sbin/bsnmpd/gensnmptree
837243789Sdim.endif
838252723Sdim
839243789Sdim.if ${MK_RESCUE} != "no" && \
840243789Sdim    ${BOOTSTRAPPING} < 600008
841243789Sdim_crunchgen=	usr.sbin/crunch/crunchgen
842243789Sdim.endif
843243789Sdim
844243789Sdim.if ${BOOTSTRAPPING} < 600020
845243789Sdim_pwd_mkdb=	usr.sbin/pwd_mkdb
846243789Sdim.endif
847243789Sdim
848243789Sdimbootstrap-tools:
849243789Sdim.for _tool in \
850243789Sdim    ${_strfile} \
851263509Sdim    ${_gperf} \
852243789Sdim    ${_groff} \
853243789Sdim    ${_texinfo} \
854243789Sdim    ${_cap_mkdb} \
855243789Sdim    ${_colldef} \
856243789Sdim    ${_gencat} \
857243789Sdim    usr.bin/lorder \
858243789Sdim    usr.bin/makewhatis \
859243789Sdim    ${_mklocale} \
860243789Sdim    usr.bin/rpcgen \
861243789Sdim    usr.bin/xinstall \
862243789Sdim    ${_gensnmptree} \
863243789Sdim    usr.sbin/config \
864243789Sdim    ${_crunchgen} \
865243789Sdim    ${_pwd_mkdb}
866243789Sdim	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
867243789Sdim		cd ${.CURDIR}/${_tool}; \
868243789Sdim		${MAKE} DIRPRFX=${_tool}/ obj; \
869243789Sdim		${MAKE} DIRPRFX=${_tool}/ depend; \
870243789Sdim		${MAKE} DIRPRFX=${_tool}/ all; \
871243789Sdim		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
872243789Sdim.endfor
873243789Sdim
874243789Sdim#
875243789Sdim# build-tools: Build special purpose build tools
876243789Sdim#
877243789Sdim.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
878243789Sdim_aicasm= sys/modules/aic7xxx/aicasm
879243789Sdim.endif
880243789Sdim
881263509Sdim.if !defined(NO_SHARE)
882263509Sdim_share=	share/syscons/scrnmaps
883263509Sdim.endif
884263509Sdim
885263509Sdim.if ${MK_KERBEROS} != "no"
886263509Sdim_kerberos5_tools= kerberos5/tools
887263509Sdim.endif
888263509Sdim
889263509Sdim.if ${MK_RESCUE} != "no"
890263509Sdim_rescue= rescue/rescue
891263509Sdim.endif
892263509Sdim
893263509Sdimbuild-tools:
894263509Sdim.for _tool in \
895263509Sdim    bin/csh \
896243789Sdim    bin/sh \
897243789Sdim    ${_rescue} \
898243789Sdim    lib/libncurses \
899263509Sdim    ${_share} \
900243789Sdim    ${_aicasm} \
901243789Sdim    usr.bin/awk \
902243789Sdim    lib/libmagic \
903243789Sdim    usr.sbin/sysinstall
904243789Sdim	${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
905243789Sdim		cd ${.CURDIR}/${_tool}; \
906243789Sdim		${MAKE} DIRPRFX=${_tool}/ obj; \
907243789Sdim		${MAKE} DIRPRFX=${_tool}/ build-tools
908243789Sdim.endfor
909243789Sdim.for _tool in \
910263509Sdim    gnu/usr.bin/cc/cc_tools \
911243789Sdim    ${_kerberos5_tools}
912263509Sdim	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
913263509Sdim		cd ${.CURDIR}/${_tool}; \
914263509Sdim		${MAKE} DIRPRFX=${_tool}/ obj; \
915263509Sdim		${MAKE} DIRPRFX=${_tool}/ depend; \
916263509Sdim		${MAKE} DIRPRFX=${_tool}/ all
917243789Sdim.endfor
918243789Sdim
919243789Sdim#
920243789Sdim# cross-tools: Build cross-building tools
921243789Sdim#
922243789Sdim.if ${TARGET_ARCH} != ${MACHINE_ARCH}
923243789Sdim.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
924243789Sdim_btxld=		usr.sbin/btxld
925243789Sdim.endif
926243789Sdim.if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
927243789Sdim_crunchide=	usr.sbin/crunch/crunchide
928243789Sdim.endif
929243789Sdim.if ${TARGET_ARCH} == "alpha"
930243789Sdim_elf2exe=	usr.sbin/elf2exe
931243789Sdim.endif
932243789Sdim.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR)
933243789Sdim_kgzip=		usr.sbin/kgzip
934243789Sdim.endif
935263509Sdim.endif
936263509Sdim
937263509Sdimcross-tools:
938263509Sdim.for _tool in \
939263509Sdim    gnu/usr.bin/binutils \
940263509Sdim    gnu/usr.bin/cc \
941263509Sdim    usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
942263509Sdim    ${_btxld} \
943263509Sdim    ${_crunchide} \
944263509Sdim    ${_elf2exe} \
945263509Sdim    ${_kgzip}
946263509Sdim	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
947263509Sdim		cd ${.CURDIR}/${_tool}; \
948243789Sdim		${MAKE} DIRPRFX=${_tool}/ obj; \
949263509Sdim		${MAKE} DIRPRFX=${_tool}/ depend; \
950263509Sdim		${MAKE} DIRPRFX=${_tool}/ all; \
951263509Sdim		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
952263509Sdim.endfor
953263509Sdim
954263509Sdim#
955263509Sdim# hierarchy - ensure that all the needed directories are present
956263509Sdim#
957263509Sdimhierarchy:
958243789Sdim	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
959263509Sdim
960263509Sdim#
961263509Sdim# libraries - build all libraries, and install them under ${DESTDIR}.
962263509Sdim#
963263509Sdim# The list of libraries with dependents (${_prebuild_libs}) and their
964263509Sdim# interdependencies (__L) are built automatically by the
965263509Sdim# ${.CURDIR}/tools/make_libdeps.sh script.
966263509Sdim#
967243789Sdimlibraries:
968263509Sdim	cd ${.CURDIR}; \
969263509Sdim	    ${MAKE} -f Makefile.inc1 _startup_libs; \
970263509Sdim	    ${MAKE} -f Makefile.inc1 _prebuild_libs; \
971263509Sdim	    ${MAKE} -f Makefile.inc1 _generic_libs;
972263509Sdim
973263509Sdim# These dependencies are not automatically generated:
974263509Sdim#
975263509Sdim# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all
976263509Sdim# shared libraries for ELF.
977243789Sdim#
978243789Sdim_startup_libs=	gnu/lib/csu gnu/lib/libgcc
979263509Sdim.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
980263509Sdim_startup_libs+=	lib/csu/${MACHINE_ARCH}-elf
981243789Sdim.else
982263509Sdim_startup_libs+=	lib/csu/${MACHINE_ARCH}
983263509Sdim.endif
984263509Sdim
985263509Sdim_prebuild_libs=
986243789Sdim
987263509Sdim_generic_libs=	gnu/lib
988263509Sdim
989263509Sdim.if ${MK_IPX} != "no"
990263509Sdim_prebuild_libs+= lib/libipx
991263509Sdim.endif
992263509Sdim
993263509Sdim.if ${MK_KERBEROS} != "no"
994263509Sdim_prebuild_libs+=	kerberos5/lib/libasn1
995263509Sdim_prebuild_libs+=	kerberos5/lib/libkrb5
996263509Sdim_prebuild_libs+=	kerberos5/lib/libroken
997263509Sdim_generic_libs+=	kerberos5/lib
998263509Sdim.endif
999263509Sdim
1000263509Sdim_prebuild_libs+= lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \
1001263509Sdim		lib/libkiconv lib/libkvm lib/libmd \
1002263509Sdim		lib/libncurses lib/libnetgraph lib/libopie lib/libpam \
1003263509Sdim		lib/libradius \
1004263509Sdim		lib/libsbuf lib/libtacplus lib/libutil \
1005263509Sdim		lib/libz lib/msun lib/libgssapi
1006263509Sdim
1007263509Sdimlib/libopie__L lib/libtacplus__L: lib/libmd__L
1008263509Sdim
1009263509Sdim_generic_libs+=	lib
1010263509Sdim
1011263509Sdim.if ${MK_CRYPT} != "no"
1012263509Sdim.if ${MK_OPENSSL} != "no"
1013263509Sdim_prebuild_libs+=	secure/lib/libcrypto secure/lib/libssl
1014263509Sdimlib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L
1015263509Sdim.if ${MK_OPENSSH} != "no"
1016263509Sdim_prebuild_libs+=	secure/lib/libssh
1017263509Sdimsecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
1018263509Sdim.if ${MK_KERBEROS} != "no"
1019243789Sdimsecure/lib/libssh__L: lib/libgssapi__L
1020263509Sdim.endif
1021263509Sdim.endif
1022263509Sdim.endif
1023263509Sdim_generic_libs+=	secure/lib
1024263509Sdim.endif
1025243789Sdim
1026263509Sdim.if ${MK_OPENSSL} == "no"
1027263509Sdimlib/libradius__L: lib/libmd__L
1028263509Sdim.endif
1029263509Sdim
1030263509Sdim.if ${MK_NIS} != "no"
1031243789Sdim_prebuild_libs+=	lib/libypclnt
1032263509Sdim.endif
1033263509Sdim
1034263509Sdim_generic_libs+=	usr.bin/lex/lib
1035243789Sdim
1036263509Sdim.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
1037263509Sdim${_lib}__L: .PHONY
1038243789Sdim.if exists(${.CURDIR}/${_lib})
1039263509Sdim	${_+_}@${ECHODIR} "===> ${_lib} (depend,all,install)"; \
1040263509Sdim		cd ${.CURDIR}/${_lib}; \
1041263509Sdim		${MAKE} DIRPRFX=${_lib}/ depend; \
1042263509Sdim		${MAKE} DIRPRFX=${_lib}/ all; \
1043263509Sdim		${MAKE} DIRPRFX=${_lib}/ install
1044263509Sdim.endif
1045243789Sdim.endfor
1046263509Sdim
1047263509Sdim# libpam is special: we need to build static PAM modules before
1048263509Sdim# static PAM library, and dynamic PAM library before dynamic PAM
1049263509Sdim# modules.
1050243789Sdimlib/libpam__L: .PHONY
1051243789Sdim	${_+_}@${ECHODIR} "===> lib/libpam (depend,all,install)"; \
1052263509Sdim		cd ${.CURDIR}/lib/libpam; \
1053263509Sdim		${MAKE} DIRPRFX=lib/libpam/ depend; \
1054263509Sdim		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
1055263509Sdim		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1056243789Sdim
1057263509Sdim_startup_libs: ${_startup_libs:S/$/__L/}
1058263509Sdim_prebuild_libs: ${_prebuild_libs:S/$/__L/}
1059263509Sdim_generic_libs: ${_generic_libs:S/$/__L/}
1060263509Sdim
1061263509Sdim.for __target in all clean cleandepend cleandir depend includes obj
1062263509Sdim.for entry in ${SUBDIR}
1063243789Sdim${entry}.${__target}__D: .PHONY
1064263509Sdim	${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1065263509Sdim		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
1066243789Sdim		edir=${entry}.${MACHINE_ARCH}; \
1067263509Sdim		cd ${.CURDIR}/$${edir}; \
1068263509Sdim	else \
1069243789Sdim		${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1070263509Sdim		edir=${entry}; \
1071263509Sdim		cd ${.CURDIR}/$${edir}; \
1072243789Sdim	fi; \
1073263509Sdim	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1074263509Sdim.endfor
1075263509Sdimpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
1076263509Sdim.endfor
1077243789Sdim
1078263509Sdim.include <bsd.subdir.mk>
1079263509Sdim
1080263509Sdim.if make(delete-old) || make(delete-old-libs) || make(check-old)
1081263509Sdim
1082263509Sdim#
1083243789Sdim# check for / delete old files section
1084263509Sdim#
1085263509Sdim
1086263509Sdim.include "ObsoleteFiles.inc"
1087263509Sdim
1088263509SdimOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \
1089263509Sdimelse you can not start such an application. Consult UPDATING for more \
1090243789Sdiminformation regarding how to cope with the removal/revision bump of a \
1091263509Sdimspecific library."
1092263509Sdim
1093263509Sdim.if !defined(BATCH_DELETE_OLD_FILES)
1094263509SdimRM_I=-i
1095263509Sdim.else
1096263509SdimRM_I=-v
1097243789Sdim.endif
1098263509Sdim
1099263509Sdimdelete-old-files:
1100263509Sdim	@echo ">>> Removing old files (only deletes safe to delete libs)"
1101263509Sdim.for file in ${OLD_FILES}
1102263509Sdim# Ask for every old file if the user really wants to remove it.
1103263509Sdim# It's annoying, but better safe than sorry.
1104263509Sdim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1105243789Sdim		rm ${RM_I} "${DESTDIR}/${file}" || true; \
1106243789Sdim		if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\
1107263509Sdim			echo "Removing schg flag on ${DESTDIR}/${file}"; \
1108263509Sdim			chflags noschg "${DESTDIR}/${file}"; \
1109263509Sdim			rm ${RM_I} "${DESTDIR}/${file}"; \
1110243789Sdim		fi; \
1111263509Sdim	fi
1112263509Sdim.endfor
1113263509Sdim# Remove catpages without corresponding manpages.
1114263509Sdim	@3<&0; \
1115263509Sdim	find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1116263509Sdim	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1117263509Sdim	while read catpage; do \
1118263509Sdim		read manpage; \
1119263509Sdim		if [ ! -e "$${manpage}" ]; then \
1120263509Sdim			rm ${RM_I} $${catpage} <&3 ; \
1121263509Sdim	        fi; \
1122263509Sdim	done
1123263509Sdim	@echo ">>> Old files removed"
1124263509Sdim
1125263509Sdimcheck-old-files:
1126263509Sdim	@echo ">>> Checking for old files"
1127263509Sdim.for file in ${OLD_FILES}
1128263509Sdim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1129243789Sdim		 echo "${DESTDIR}/${file}"; \
1130263509Sdim	fi
1131263509Sdim.endfor
1132263509Sdim# Check for catpages without corresponding manpages.
1133263509Sdim	@find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1134263509Sdim	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1135243789Sdim	while read catpage; do \
1136263509Sdim		read manpage; \
1137263509Sdim		if [ ! -e "$${manpage}" ]; then \
1138263509Sdim			echo $${catpage} ; \
1139263509Sdim	        fi; \
1140263509Sdim	done
1141263509Sdim
1142263509Sdimdelete-old-libs:
1143263509Sdim	@echo ">>> Removing old libraries"
1144263509Sdim	@echo "${OLD_LIBS_MESSAGE}" | fmt
1145243789Sdim.for file in ${OLD_LIBS}
1146243789Sdim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1147263509Sdim		rm ${RM_I} "${DESTDIR}/${file}" || true; \
1148263509Sdim		if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then\
1149243789Sdim			echo "Removing schg flag on ${DESTDIR}/${file}"; \
1150263509Sdim			chflags noschg "${DESTDIR}/${file}"; \
1151263509Sdim			rm ${RM_I} "${DESTDIR}/${file}"; \
1152243789Sdim		fi; \
1153263509Sdim	fi
1154263509Sdim.endfor
1155263509Sdim	@echo ">>> Old libraries removed"
1156263509Sdim
1157263509Sdimcheck-old-libs:
1158263509Sdim	@echo ">>> Checking for old libraries"
1159263509Sdim.for file in ${OLD_LIBS}
1160243789Sdim	@if [ -f "${DESTDIR}/${file}" -o -L "${DESTDIR}/${file}" ]; then \
1161263509Sdim		echo "${DESTDIR}/${file}"; \
1162263509Sdim	fi
1163243789Sdim.endfor
1164263509Sdim
1165243789Sdimdelete-old-dirs:
1166263509Sdim	@echo ">>> Removing old directories"
1167243789Sdim.for dir in ${OLD_DIRS}
1168263509Sdim# Don't fail if an old directory isn't empty.
1169263509Sdim	@if [ -d "${DESTDIR}/${dir}" ]; then \
1170263509Sdim		rmdir -v "${DESTDIR}/${dir}" || true; \
1171263509Sdim	else \
1172263509Sdim		if [ -L "${DESTDIR}/${dir}" ]; then \
1173263509Sdim			echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \
1174263509Sdim		fi; \
1175243789Sdim	fi
1176263509Sdim.endfor
1177263509Sdim	@echo ">>> Old directories removed"
1178243789Sdim
1179263509Sdimcheck-old-dirs:
1180263509Sdim	@echo ">>> Checking for old directories"
1181263509Sdim.for dir in ${OLD_DIRS}
1182243789Sdim	@if [ -d "${DESTDIR}/${dir}" ]; then \
1183263509Sdim		echo "${DESTDIR}/${dir}"; \
1184243789Sdim	else \
1185243789Sdim		if [ -L "${DESTDIR}/${dir}" ]; then \
1186243789Sdim			echo "${DESTDIR}/${dir} is a link, please remove everything manually."; \
1187243789Sdim		fi; \
1188243789Sdim	fi
1189243789Sdim.endfor
1190252723Sdim
1191252723Sdimdelete-old: delete-old-files delete-old-dirs
1192243789Sdim	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1193243789Sdim
1194243789Sdimcheck-old: check-old-files check-old-libs check-old-dirs
1195243789Sdim	@echo "To remove old files and directories run '${MAKE} delete-old'."
1196243789Sdim	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1197243789Sdim
1198243789Sdim.endif
1199243789Sdim
1200252723Sdim#
1201243789Sdim# showconfig - show build configuration.
1202243789Sdim#
1203243789Sdimshowconfig:
1204243789Sdim	@${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort
1205243789Sdim