Makefile.inc1 revision 152602
11556Srgrimes#
21556Srgrimes# $FreeBSD: head/Makefile.inc1 152602 2005-11-19 06:45:44Z ru $
31556Srgrimes#
41556Srgrimes# Make command line options:
51556Srgrimes#	-DNO_DYNAMICROOT do not link /bin and /sbin dynamically
61556Srgrimes#	-DNO_KERBEROS Do not build Heimdal (Kerberos 5)
71556Srgrimes#	-DNO_RESCUE do not build rescue binaries
81556Srgrimes#	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
91556Srgrimes#	-DNO_CLEAN do not clean at all
101556Srgrimes#	-DNO_CRYPT will prevent building of crypt versions
111556Srgrimes#	-DNO_MAN do not build the manual pages
121556Srgrimes#	-DNO_NLS do not build Native Language Support files
131556Srgrimes#	-DNO_PROFILE do not build profiled libraries
141556Srgrimes#	-DNO_GAMES do not go into games subdir
151556Srgrimes#	-DNO_SHARE do not go into share subdir
161556Srgrimes#	-DNO_INFO do not make or install info files
171556Srgrimes#	-DNO_LIBC_R do not build libc_r.
181556Srgrimes#	-DNO_FORTRAN do not build g77 and related libraries.
191556Srgrimes#	-DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
201556Srgrimes#	-DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
211556Srgrimes#	-DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
221556Srgrimes#	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
231556Srgrimes#	-DNO_DOCUPDATE do not update doc in ${MAKE} update
241556Srgrimes#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
251556Srgrimes#	TARGET_ARCH="arch" to crossbuild world to a different arch
261556Srgrimes
271556Srgrimes#
28127499Sgad# The intended user-driven targets are:
29127499Sgad# buildworld  - rebuild *everything*, including glue to help do upgrades
30127499Sgad# installworld- install everything built by "buildworld"
31127499Sgad# update      - convenient way to update your source tree (eg: cvsup/cvs)
32127499Sgad#
33127499Sgad# Standard targets (not defined here) are documented in the makefiles in
34127499Sgad# /usr/share/mk.  These include:
351556Srgrimes#		obj depend all install clean cleandepend cleanobj
361556Srgrimes
371556Srgrimes# We must do share/info early so that installation of info `dir'
3890143Smarkm# entries works correctly.  Do it first since it is less likely to
391556Srgrimes# grow dependencies on include and lib than vice versa.
401556Srgrimes#
411556Srgrimes# We must do lib and libexec before bin, because if installworld
421556Srgrimes# installs a new /bin/sh, the 'make' command will *immediately*
4390143Smarkm# use that new version.  And the new (dynamically-linked) /bin/sh
441556Srgrimes# will expect to find appropriate libraries in /lib and /libexec.
4536049Scharnier#
4690143Smarkm# We must do etc last for install/distribute to work.
4736049Scharnier#
48110391ScharnierSUBDIR=	share/info include lib libexec bin
4999110Sobrien.if !defined(NO_GAMES)
5099110SobrienSUBDIR+=games
511556Srgrimes.endif
521556SrgrimesSUBDIR+=gnu
53127546Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
543296SdgSUBDIR+=kerberos5
551556Srgrimes.endif
561556Srgrimes.if !defined(NO_RESCUE)
571556SrgrimesSUBDIR+=rescue
58137696Scsjp.endif
591556SrgrimesSUBDIR+=sbin
601556Srgrimes.if !defined(NO_CRYPT)
611556SrgrimesSUBDIR+=secure
62127149Sgad.endif
631556Srgrimes.if !defined(NO_SHARE)
64127499SgadSUBDIR+=share
651556Srgrimes.endif
6613514SmppSUBDIR+=sys usr.bin usr.sbin etc
6773367Sache
681556Srgrimes# These are last, since it is nice to at least get the base system
6990143Smarkm# rebuilt before you do them.
701556Srgrimes.for _DIR in ${LOCAL_DIRS}
711556Srgrimes.if exists(${.CURDIR}/${_DIR}/Makefile)
721556SrgrimesSUBDIR+= ${_DIR}
731556Srgrimes.endif
741556Srgrimes.endfor
751556Srgrimes
761556Srgrimes.if defined(SUBDIR_OVERRIDE)
77173492SjhbSUBDIR=		${SUBDIR_OVERRIDE}
78173492Sjhb.endif
79127499Sgad
80127499Sgad.if defined(NOCLEAN)
8166377SbrianNO_CLEAN=	${NOCLEAN}
82127537Sgad.endif
83127555Sgad.if defined(NO_CLEANDIR)
84127537SgadCLEANDIR=	clean cleandepend
85127537Sgad.else
86127555SgadCLEANDIR=	cleandir
87127537Sgad.endif
88127537Sgad
89127537SgadCVS?=		cvs
90129914SgadCVSFLAGS?=	-A -P -d -I!
91129971SgadSUP?=		/usr/local/bin/cvsup
92129971SgadSUPFLAGS?=	-g -L 2 -P -
93129914Sgad.if defined(SUPHOST)
94129971SgadSUPFLAGS+=	-h ${SUPHOST}
95129914Sgad.endif
96127537Sgad
97127537SgadMAKEOBJDIRPREFIX?=	/usr/obj
98127537Sgad.if !defined(OSRELDATE)
99127537Sgad.if exists(/usr/include/osreldate.h)
100127537SgadOSRELDATE!=	awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
101127537Sgad		/usr/include/osreldate.h
102127537Sgad.else
103173004SjulianOSRELDATE=	0
104127537Sgad.endif
105130999Sgad.endif
1061556SrgrimesTARGET_ARCH?=	${MACHINE_ARCH}
107127537Sgad.if ${TARGET_ARCH} == ${MACHINE_ARCH}
108127537SgadTARGET?=	${MACHINE}
109127537SgadTARGET_CPUTYPE?=${CPUTYPE}
110127537Sgad.else
111127537SgadTARGET?=	${TARGET_ARCH}
112127537SgadTARGET_CPUTYPE?=
113127537Sgad.endif
1141556Srgrimes.if !empty(TARGET_CPUTYPE)
115127537Sgad_TARGET_CPUTYPE=${TARGET_CPUTYPE}
11697966Sjmallett.else
117127499Sgad_TARGET_CPUTYPE=dummy
118127537Sgad.endif
119127499Sgad_CPUTYPE!=	MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
120127499Sgad		-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
121127499Sgad.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
122127499Sgad.error CPUTYPE global should be set with ?=.
123127499Sgad.endif
124127499Sgad.if make(buildworld)
125127499SgadBUILD_ARCH!=	sysctl -n hw.machine_arch
126127499Sgad.if ${MACHINE_ARCH} != ${BUILD_ARCH}
127127499Sgad.error To cross-build, set TARGET_ARCH.
128127499Sgad.endif
129127499Sgad.endif
130127499Sgad.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING)
131127499SgadOBJTREE=	${MAKEOBJDIRPREFIX}
132127823Sgad.else
133127499SgadOBJTREE=	${MAKEOBJDIRPREFIX}/${TARGET}
134127499Sgad.endif
135137696ScsjpWORLDTMP=	${OBJTREE}${.CURDIR}/tmp
136127499Sgad# /usr/games added for fortune which depend on strfile
137127499SgadBPATH=		${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
138127499SgadXPATH=		${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
139127499SgadSTRICTTMPPATH=	${BPATH}:${XPATH}
140127499SgadTMPPATH=	${STRICTTMPPATH}:${PATH}
141127536Sgad
142127499SgadINSTALLTMP!=	/usr/bin/mktemp -d -u -t install
143127598Sgad
144127598Sgad#
145127536Sgad# Building a world goes through the following stages
146127499Sgad#
147127499Sgad# 1. legacy stage [BMAKE]
148129952Sgad#	This stage is responsible for creating compatibility
149127536Sgad#	shims that are needed by the bootstrap-tools,
150127536Sgad#	build-tools and cross-tools stages.
151127536Sgad# 1. bootstrap-tools stage [BMAKE]
152127536Sgad#	This stage is responsible for creating programs that
153127536Sgad#	are needed for backward compatibility reasons. They
154127499Sgad#	are not built as cross-tools.
15597875Sjmallett# 2. build-tools stage [TMAKE]
156129635Sgad#	This stage is responsible for creating the object
157127538Sgad#	tree and building any tools that are needed during
158127538Sgad#	the build process.
15990143Smarkm# 3. cross-tools stage [XMAKE]
16097875Sjmallett#	This stage is responsible for creating any tools that
16197875Sjmallett#	are needed for cross-builds. A cross-compiler is one
162127538Sgad#	of them.
163127538Sgad# 4. world stage [WMAKE]
164105831Srwatson#	This stage actually builds the world.
1651556Srgrimes# 5. install stage (optional) [IMAKE]
166127843Sgad#	This stage installs a previously built world.
16798494Ssobomax#
1681556Srgrimes
16990110SimpBOOTSTRAPPING?=	0
1701556Srgrimes
171127499Sgad# Common environment for world related stages
172127499SgadCROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
1731556Srgrimes		MACHINE_ARCH=${TARGET_ARCH} \
174130816Sgad		MACHINE=${TARGET} \
1751556Srgrimes		CPUTYPE=${TARGET_CPUTYPE} \
1761556Srgrimes		GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
177129914Sgad		GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
178127539Sgad		GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
179137670Sru
180129914Sgad# bootstrap-tools stage
181173004SjulianBMAKEENV=	INSTALL="sh ${.CURDIR}/tools/install.sh" \
18290143Smarkm		PATH=${BPATH}:${PATH} \
1831556Srgrimes		WORLDTMP=${WORLDTMP} \
18411809Sache		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
185127542SgadBMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
18611809Sache		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
18797804Stjr		DESTDIR= \
18897804Stjr		BOOTSTRAPPING=${OSRELDATE} \
18997804Stjr		-DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN -DNO_NLS -DNO_PIC \
1901556Srgrimes		-DNO_PROFILE -DNO_SHARED -DNO_CPU_CFLAGS -DNO_WARNS
1911556Srgrimes
1921556Srgrimes# build-tools stage
1931556SrgrimesTMAKE=		MAKEOBJDIRPREFIX=${OBJTREE} \
1941556Srgrimes		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
1951556Srgrimes		DESTDIR= \
1961556Srgrimes		BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS
19798494Ssobomax
198129914Sgad# cross-tools stage
199129914SgadXMAKE=		TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB
20098494Ssobomax
201129914Sgad# world stage
202129915SgadWMAKEENV=	${CROSSENV} \
2031556Srgrimes		_SHLIBDIRPREFIX=${WORLDTMP} \
204137670Sru		INSTALL="sh ${.CURDIR}/tools/install.sh" \
205127542Sgad		PATH=${TMPPATH}
206127542SgadWMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
207127499Sgad
208127499Sgad.if ${TARGET_ARCH} == "amd64"
209127499Sgad# 32 bit world
210127499SgadLIB32TMP=	${OBJTREE}${.CURDIR}/lib32
211127499Sgad
212127499SgadLIB32PREFLAGS=	-m32 -march=athlon-xp -msse2 -mfancy-math-387 -DCOMPAT_32BIT
213127499SgadLIB32POSTFLAGS=	-I${LIB32TMP}/usr/include \
21489909Sru		-L${LIB32TMP}/usr/lib32 \
21598494Ssobomax		-B${LIB32TMP}/usr/lib32
216180596SkevloLIB32CC=	${LIB32PREFLAGS} \
217127499Sgad		${LIB32POSTFLAGS}
218127499SgadLIB32CXX=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \
219127499Sgad		${LIB32POSTFLAGS}
220127499SgadLIB32OBJC=	${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \
221127499Sgad		${LIB32POSTFLAGS}
222127499Sgad
223127499Sgad# Yes, the flags are redundant.
224127499SgadLIB32MAKEENV=	MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
225127499Sgad		_SHLIBDIRPREFIX=${LIB32TMP} \
2261556Srgrimes		MACHINE=i386 \
227127499Sgad		MACHINE_ARCH=i386 \
2281556Srgrimes		INSTALL="sh ${.CURDIR}/tools/install.sh" \
2291556Srgrimes		PATH=${TMPPATH} \
23019068Speter		CC="${CC} ${LIB32CC}" \
23119068Speter		CXX="${CXX} ${LIB32CXX}" \
23219068Speter		OBJC="${OBJC} ${LIB32OBJC}" \
23319068Speter		LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
23419068Speter		AS="${AS} --32" \
23519068Speter		LIBDIR=/usr/lib32 \
2361556Srgrimes		SHLIBDIR=/usr/lib32
2371556Srgrimes
2381556SrgrimesLIB32MAKE=	${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
239127506Sgad		-DNO_BIND -DNO_MAN -DNO_NLS -DNO_INFO -DNO_HTML
240127506SgadLIB32IMAKE=	${LIB32MAKE:NINSTALL=*} -DNO_INCS
241127506Sgad.endif
242127542Sgad
243127506Sgad# install stage
244127506Sgad.if empty(.MAKEFLAGS:M-n)
245127499SgadIMAKEENV=	${CROSSENV} \
246127499Sgad		PATH=${STRICTTMPPATH}:${INSTALLTMP}
247127499Sgad.else
248127499SgadIMAKEENV=	${CROSSENV} \
249127499Sgad		PATH=${TMPPATH}:${INSTALLTMP}
250127542Sgad.endif
251127499SgadIMAKE=		${IMAKEENV} ${MAKE} -f Makefile.inc1
252127597Sgad
253127542Sgad# kernel stage
254127542SgadKMAKEENV=	${WMAKEENV}
255127542Sgad
256127542Sgad#
257127499Sgad# buildworld
258127499Sgad#
259127499Sgad# Attempt to rebuild the entire system, with reasonable chance of
260127499Sgad# success, regardless of how old your existing system is.
261127499Sgad#
262127542Sgad_worldtmp:
2631556Srgrimes.if ${.CURDIR:C/[^,]//g} != ""
264127499Sgad#	The m4 build of sendmail files doesn't like it if ',' is used
265116265Sscottl#	anywhere in the path of it's files.
266126127Sdeischen	@echo
267116265Sscottl	@echo "*** Error: path to source tree contains a comma ','"
2681556Srgrimes	@echo
2691556Srgrimes	false
2701556Srgrimes.endif
2711556Srgrimes	@echo
272109502Sjmallett	@echo "--------------------------------------------------------------"
27390143Smarkm	@echo ">>> Rebuilding the temporary build tree"
2741556Srgrimes	@echo "--------------------------------------------------------------"
2751556Srgrimes.if !defined(NO_CLEAN)
2761556Srgrimes	rm -rf ${WORLDTMP}
2771556Srgrimes.if ${TARGET_ARCH} == "amd64"
2781556Srgrimes	rm -rf ${LIB32TMP}
2791556Srgrimes.endif
280109502Sjmallett.else
28190143Smarkm	rm -rf ${WORLDTMP}/legacy/usr/include
2821556Srgrimes	# XXX - These two can depend on any header file.
2831556Srgrimes	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
2841556Srgrimes	rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
2851556Srgrimes.endif
2861556Srgrimes.for _dir in \
2871556Srgrimes    usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \
2881556Srgrimes    usr/libexec usr/sbin usr/share/dict \
2891556Srgrimes    usr/share/groff_font/devX100 \
2901556Srgrimes    usr/share/groff_font/devX100-12 \
2911556Srgrimes    usr/share/groff_font/devX75 \
2921556Srgrimes    usr/share/groff_font/devX75-12 \
2931556Srgrimes    usr/share/groff_font/devascii \
294109502Sjmallett    usr/share/groff_font/devcp1047 \
295109502Sjmallett    usr/share/groff_font/devdvi \
296109502Sjmallett    usr/share/groff_font/devhtml \
2971556Srgrimes    usr/share/groff_font/devkoi8-r \
29890143Smarkm    usr/share/groff_font/devlatin1 \
2991556Srgrimes    usr/share/groff_font/devlbp \
3001556Srgrimes    usr/share/groff_font/devlj4 \
301109502Sjmallett    usr/share/groff_font/devps \
30290143Smarkm    usr/share/groff_font/devutf8 \
3031556Srgrimes    usr/share/tmac/mdoc usr/share/tmac/mm
3041556Srgrimes	mkdir -p ${WORLDTMP}/legacy/${_dir}
305127499Sgad.endfor
306127499Sgad.for _dir in \
307127499Sgad    lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \
308127499Sgad    usr/libexec usr/sbin usr/share/misc \
309127499Sgad    usr/share/snmp/defs usr/share/snmp/mibs
310127499Sgad	mkdir -p ${WORLDTMP}/${_dir}
311127499Sgad.endfor
312127499Sgad	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
3131556Srgrimes	    -p ${WORLDTMP}/usr/include >/dev/null
314127499Sgad	ln -sf ${.CURDIR}/sys ${WORLDTMP}
315127499Sgad.if defined(WITH_BIND_LIBS) && !defined(NO_BIND)
316127597Sgad	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
317127542Sgad	    -p ${WORLDTMP}/usr/include >/dev/null
318127542Sgad.endif
319127542Sgad_legacy:
320127542Sgad	@echo
321127542Sgad	@echo "--------------------------------------------------------------"
322127542Sgad	@echo ">>> stage 1.1: legacy release compatibility shims"
323127499Sgad	@echo "--------------------------------------------------------------"
324127499Sgad	${_+_}cd ${.CURDIR}; ${BMAKE} legacy
325127499Sgad_bootstrap-tools:
326127499Sgad	@echo
327127499Sgad	@echo "--------------------------------------------------------------"
3281556Srgrimes	@echo ">>> stage 1.2: bootstrap tools"
3291556Srgrimes	@echo "--------------------------------------------------------------"
3301556Srgrimes	${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
3311556Srgrimes_cleanobj:
3321556Srgrimes.if !defined(NO_CLEAN)
3331556Srgrimes	@echo
334127499Sgad	@echo "--------------------------------------------------------------"
335127499Sgad	@echo ">>> stage 2.1: cleaning up the object tree"
336127597Sgad	@echo "--------------------------------------------------------------"
337127542Sgad	${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
338127542Sgad.if ${TARGET_ARCH} == "amd64"
339127542Sgad	rm -rf ${OBJTREE}/lib32
340127542Sgad.endif
341127542Sgad.endif
342127499Sgad_obj:
343127499Sgad	@echo
344127499Sgad	@echo "--------------------------------------------------------------"
345127499Sgad	@echo ">>> stage 2.2: rebuilding the object tree"
346127499Sgad	@echo "--------------------------------------------------------------"
3471556Srgrimes	${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
3481556Srgrimes_build-tools:
3491556Srgrimes	@echo
3501556Srgrimes	@echo "--------------------------------------------------------------"
351127499Sgad	@echo ">>> stage 2.3: build tools"
352127499Sgad	@echo "--------------------------------------------------------------"
353127499Sgad	${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
354127499Sgad_cross-tools:
3551556Srgrimes	@echo
35613020Speter	@echo "--------------------------------------------------------------"
357127499Sgad	@echo ">>> stage 3: cross tools"
358127499Sgad	@echo "--------------------------------------------------------------"
359127499Sgad	${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
360127499Sgad_includes:
36113020Speter	@echo
3621556Srgrimes	@echo "--------------------------------------------------------------"
363109502Sjmallett	@echo ">>> stage 4.1: building includes"
3641556Srgrimes	@echo "--------------------------------------------------------------"
36590143Smarkm	${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
3661556Srgrimes_libraries:
3671556Srgrimes	@echo
3681556Srgrimes	@echo "--------------------------------------------------------------"
369109502Sjmallett	@echo ">>> stage 4.2: building libraries"
3701556Srgrimes	@echo "--------------------------------------------------------------"
37190143Smarkm	${_+_}cd ${.CURDIR}; \
3721556Srgrimes	    ${WMAKE} -DNO_FSCHG -DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN \
3731556Srgrimes	    -DNO_NLS -DNO_PROFILE libraries
3741556Srgrimes_depend:
3751556Srgrimes	@echo
3761556Srgrimes	@echo "--------------------------------------------------------------"
3771556Srgrimes	@echo ">>> stage 4.3: make dependencies"
3781556Srgrimes	@echo "--------------------------------------------------------------"
3791556Srgrimes	${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
3801556Srgrimeseverything:
381127499Sgad	@echo
382127499Sgad	@echo "--------------------------------------------------------------"
383127499Sgad	@echo ">>> stage 4.4: building everything"
384127499Sgad	@echo "--------------------------------------------------------------"
385127499Sgad	${_+_}cd ${.CURDIR}; ${WMAKE} par-all
386127499Sgad.if ${TARGET_ARCH} == "amd64"
387127499Sgadbuild32:
388127499Sgad	@echo
389127499Sgad	@echo "--------------------------------------------------------------"
390127499Sgad	@echo ">>> stage 5.1: building 32 bit shim libraries"
391127499Sgad	@echo "--------------------------------------------------------------"
392127499Sgad.for _dir in \
393127499Sgad    lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \
394127499Sgad    usr/libexec usr/sbin usr/share/misc \
3951556Srgrimes    usr/share/snmp/defs usr/share/snmp/mibs
396127499Sgad	mkdir -p ${LIB32TMP}/${_dir}
3971556Srgrimes.endfor
39886922Sgreen	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
399109502Sjmallett	    -p ${LIB32TMP}/usr/include >/dev/null
40086922Sgreen	mkdir -p ${WORLDTMP}
40186922Sgreen	ln -sf ${.CURDIR}/sys ${WORLDTMP}
4021556Srgrimes.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
4031556Srgrimes.for _t in obj depend all
4041556Srgrimes	cd ${.CURDIR}/kerberos5/tools; \
4051556Srgrimes	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t}
4061556Srgrimes.endfor
4071556Srgrimes.endif
408129914Sgad.for _t in obj includes
409129914Sgad	cd ${.CURDIR}/include; \
410137696Scsjp	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
411137696Scsjp	cd ${.CURDIR}/lib; \
412137696Scsjp	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
413137696Scsjp	cd ${.CURDIR}/gnu/lib; \
414137696Scsjp	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
415137696Scsjp.if !defined(NO_CRYPT)
416137696Scsjp	cd ${.CURDIR}/secure/lib; \
417137696Scsjp	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
418129914Sgad.endif
419129914Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
420129914Sgad	cd ${.CURDIR}/kerberos5/lib; \
421129914Sgad	    ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
422129914Sgad.endif
423129914Sgad.endfor
424129914Sgad.for _dir in usr.sbin/pcvt/keycap usr.bin/lex/lib
425129914Sgad	cd ${.CURDIR}/${_dir}; \
426129914Sgad	    ${LIB32MAKE} DESTDIR=${LIB32TMP} obj
427129914Sgad.endfor
428129914Sgad.for _dir in lib/libncurses lib/libmagic
429129914Sgad	cd ${.CURDIR}/${_dir}; \
430129914Sgad	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools
431129914Sgad.endfor
432127499Sgad	cd ${.CURDIR}; \
433127542Sgad	    ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 
434127542Sgad.for _t in obj depend all
435127499Sgad	cd ${.CURDIR}/libexec/rtld-elf; \
436127499Sgad	    PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t}
43789909Sru.endfor
4381556Srgrimes
4391556Srgrimesdistribute32 install32:
4401556Srgrimes.if make(distribute32)
44190143Smarkm	mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32	# XXX add to mtree
442109502Sjmallett.else
4431556Srgrimes	mkdir -p ${DESTDIR}/usr/lib32			# XXX add to mtree
444127499Sgad.endif
445127823Sgad	cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
446127823Sgad	cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
44797877Sjmallett.if !defined(NO_CRYPT)
448127499Sgad	cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
449127499Sgad.endif
450127823Sgad	cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
45166377Sbrian.endif
4521556Srgrimes
4531556Srgrimes
4541556SrgrimesWMAKE_TGTS=
45553170Skris.if !defined(SUBDIR_OVERRIDE)
4561556SrgrimesWMAKE_TGTS+=	_worldtmp _legacy _bootstrap-tools
4571556Srgrimes.endif
458127499SgadWMAKE_TGTS+=	_cleanobj _obj _build-tools
4591556Srgrimes.if !defined(SUBDIR_OVERRIDE)
460127499SgadWMAKE_TGTS+=	_cross-tools
461127499Sgad.endif
462127499SgadWMAKE_TGTS+=	_includes _libraries _depend everything
463127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32)
464127499SgadWMAKE_TGTS+=	build32
4651556Srgrimes.endif
466127499Sgad
467127499Sgadbuildworld: ${WMAKE_TGTS}
468127499Sgad.ORDER: ${WMAKE_TGTS}
469129600Sgad
470129600Sgadbuildenv:
471129600Sgad	@echo Entering world for ${TARGET_ARCH}:${TARGET}
472129600Sgad	@cd ${.CURDIR} && env ${WMAKEENV} sh || true
473129600Sgad
474127499SgadTOOLCHAIN_TGTS=	${WMAKE_TGTS:N_depend:Neverything:Nbuild32}
475127823Sgadtoolchain: ${TOOLCHAIN_TGTS}
476127499Sgadkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
477127499Sgad
478127499Sgad#
479127823Sgad# Use this to add checks to installworld/installkernel targets.
480127499Sgad#
481127499SgadSPECIAL_INSTALLCHECKS=
482127499Sgad
483127823Sgad#
484127499Sgad# Require DESTDIR to be set if installing for a different architecture.
485127499Sgad#
486127499Sgad.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE}
487127823Sgad.if !make(distributeworld)
488127499SgadSPECIAL_INSTALLCHECKS+=	installcheck_DESTDIR
489127499Sgadinstallcheck_DESTDIR:
490127499Sgad.if !defined(DESTDIR) || empty(DESTDIR)
491127823Sgad	@echo "ERROR: Please set DESTDIR!"; \
492127499Sgad	false
493127499Sgad.endif
494127499Sgad.endif
495127823Sgad.endif
496127499Sgad
497127499Sgad#
498127499Sgad# installcheck
499127499Sgad#
500127499Sgad# Checks to be sure system is ready for installworld
5011556Srgrimes#
502126127SdeischenCHECK_UIDS=
5031556SrgrimesCHECK_GIDS=
5041556Srgrimes.if !defined(NO_SENDMAIL)
5051556SrgrimesCHECK_UIDS+=	smmsp
506127499SgadCHECK_GIDS+=	smmsp
507127149Sgad.endif
508127544Sgad.if !defined(NO_PF)
5091556SrgrimesCHECK_UIDS+=	proxy
510127499SgadCHECK_GIDS+=	proxy authpf
511127149Sgad.endif
512127149Sgadinstallcheck: ${SPECIAL_INSTALLCHECKS}
513127149Sgad.for uid in ${CHECK_UIDS}
514127149Sgad	@if ! `id -u ${uid} >/dev/null 2>&1`; then \
515127499Sgad		echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
516127499Sgad		false; \
517127499Sgad	fi
518127499Sgad.endfor
519127499Sgad.for gid in ${CHECK_GIDS}
520127499Sgad	@if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
521127499Sgad		echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
522127823Sgad		false; \
523127499Sgad	fi
524127499Sgad.endfor
525127499Sgad
526127499Sgad#
527127499Sgad# distributeworld
528127499Sgad#
529127499Sgad# Distributes everything compiled by a `buildworld'.
530127499Sgad#
531127499Sgad# installworld
532127499Sgad#
533127499Sgad# Installs everything compiled by a 'buildworld'.
534127499Sgad#
535127499Sgaddistributeworld installworld: installcheck
536127499Sgad	mkdir -p ${INSTALLTMP}
537127499Sgad	for prog in [ awk cap_mkdb cat chflags chmod chown \
538127499Sgad	    date echo egrep find grep install-info \
539127823Sgad	    ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
540127499Sgad	    test true uname wc zic; do \
541127499Sgad		cp `which $$prog` ${INSTALLTMP}; \
542127499Sgad	done
543127499Sgad	${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
544127823Sgad	rm -rf ${INSTALLTMP}
545127823Sgad
546127499Sgad#
547127499Sgad# reinstall
548127499Sgad#
549127499Sgad# If you have a build server, you can NFS mount the source and obj directories
550127823Sgad# and do a 'make reinstall' on the *client* to install new binaries from the
551127823Sgad# most recent server build.
552127499Sgad#
553127499Sgadreinstall: ${SPECIAL_INSTALLCHECKS}
554127499Sgad	@echo "--------------------------------------------------------------"
555127499Sgad	@echo ">>> Making hierarchy"
556127823Sgad	@echo "--------------------------------------------------------------"
557127499Sgad	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
558127499Sgad	@echo
559127499Sgad	@echo "--------------------------------------------------------------"
560127499Sgad	@echo ">>> Installing everything"
561127823Sgad	@echo "--------------------------------------------------------------"
562127499Sgad	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
563127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32)
564127499Sgad	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
565127499Sgad.endif
566127823Sgad
567127499Sgadredistribute:
568127499Sgad	@echo "--------------------------------------------------------------"
569127499Sgad	@echo ">>> Distributing everything"
570127499Sgad	@echo "--------------------------------------------------------------"
571127499Sgad	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
572127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32)
573127499Sgad	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32
574127499Sgad.endif
575127499Sgad
576130816Sgaddistrib-dirs distribution:
577130816Sgad	cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET}
578130816Sgad
579130816Sgad#
580130816Sgad# buildkernel and installkernel
581130816Sgad#
582127149Sgad# Which kernels to build and/or install is specified by setting
583130816Sgad# KERNCONF. If not defined a GENERIC kernel is built/installed.
584130816Sgad# Only the existing (depending TARGET) config files are used
585127499Sgad# for building kernels and only the first of these is designated
586127149Sgad# as the one being installed.
5871556Srgrimes#
58825271Sjkh# Note that we have to use TARGET instead of TARGET_ARCH when
58925271Sjkh# we're in kernel-land. Since only TARGET_ARCH is (expected) to
59025271Sjkh# be set to cross-build, we have to make sure TARGET is set
5911556Srgrimes# properly.
5921556Srgrimes
5931556Srgrimes.if !defined(KERNCONF) && defined(KERNEL)
5941556SrgrimesKERNCONF=	${KERNEL}
595127499SgadKERNWARN=
59662803Swill.else
597127499SgadKERNCONF?=	GENERIC
5981556Srgrimes.endif
5991556SrgrimesINSTKERNNAME?=	kernel
6001556Srgrimes
601127499SgadKERNSRCDIR?=	${.CURDIR}/sys
6021556SrgrimesKRNLCONFDIR=	${KERNSRCDIR}/${TARGET}/conf
603127499SgadKRNLOBJDIR=	${OBJTREE}${KERNSRCDIR}
6041556SrgrimesKERNCONFDIR?=	${KRNLCONFDIR}
605127499Sgad
606130999SgadBUILDKERNELS=
6071556SrgrimesINSTALLKERNEL=
608130999Sgad.for _kernel in ${KERNCONF}
6091556Srgrimes.if exists(${KERNCONFDIR}/${_kernel})
6101556SrgrimesBUILDKERNELS+=	${_kernel}
6111556Srgrimes.if empty(INSTALLKERNEL)
6121556SrgrimesINSTALLKERNEL= ${_kernel}
6131556Srgrimes.endif
6141556Srgrimes.endif
6151556Srgrimes.endfor
6161556Srgrimes
6171556Srgrimes#
618127499Sgad# buildkernel
619127499Sgad#
620127499Sgad# Builds all kernels defined by BUILDKERNELS.
621127499Sgad#
622127499Sgadbuildkernel:
623127499Sgad.if empty(BUILDKERNELS)
624127499Sgad	@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
62566377Sbrian	false
6261556Srgrimes.endif
6271556Srgrimes.if defined(KERNWARN)
6281556Srgrimes	@echo "--------------------------------------------------------------"
629127499Sgad	@echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
630127499Sgad	@echo "--------------------------------------------------------------"
631127499Sgad	@sleep 3
632127499Sgad.endif
633127499Sgad	@echo
634127499Sgad.for _kernel in ${BUILDKERNELS}
635127602Sgad	@echo "--------------------------------------------------------------"
636127499Sgad	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
637127499Sgad	@echo "--------------------------------------------------------------"
638127499Sgad	@echo "===> ${_kernel}"
639127499Sgad	mkdir -p ${KRNLOBJDIR}
640127499Sgad.if !defined(NO_KERNELCONFIG)
641127499Sgad	@echo
642127499Sgad	@echo "--------------------------------------------------------------"
643127542Sgad	@echo ">>> stage 1: configuring the kernel"
644127499Sgad	@echo "--------------------------------------------------------------"
645127499Sgad	cd ${KRNLCONFDIR}; \
646127499Sgad		PATH=${TMPPATH} \
647127499Sgad		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
648127499Sgad			${KERNCONFDIR}/${_kernel}
649127499Sgad.endif
650127499Sgad.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
651127499Sgad	@echo
652127499Sgad	@echo "--------------------------------------------------------------"
653127499Sgad	@echo ">>> stage 2.1: cleaning up the object tree"
654127499Sgad	@echo "--------------------------------------------------------------"
655127499Sgad	cd ${KRNLOBJDIR}/${_kernel}; \
656127499Sgad	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} ${CLEANDIR}
657127499Sgad.endif
658127602Sgad	@echo
659127602Sgad	@echo "--------------------------------------------------------------"
660127499Sgad	@echo ">>> stage 2.2: rebuilding the object tree"
661127602Sgad	@echo "--------------------------------------------------------------"
662127499Sgad	cd ${KRNLOBJDIR}/${_kernel}; \
663127499Sgad	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} obj
664127499Sgad	@echo
665127499Sgad	@echo "--------------------------------------------------------------"
666127499Sgad	@echo ">>> stage 2.3: build tools"
667127499Sgad	@echo "--------------------------------------------------------------"
668129967Sgad	cd ${KRNLOBJDIR}/${_kernel}; \
669127499Sgad	    MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
670127499Sgad	    ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
671127499Sgad# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
672127823Sgad.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
673127499Sgad.for target in obj depend all
674127499Sgad	cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
675127499Sgad	    MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
676127597Sgad	    ${MAKE} -DNO_CPU_CFLAGS ${target}
677127499Sgad.endfor
678127499Sgad.endif
679127149Sgad.if !defined(NO_KERNELDEPEND)
680127539Sgad	@echo
681127149Sgad	@echo "--------------------------------------------------------------"
682127149Sgad	@echo ">>> stage 3.1: making dependencies"
683129917Sgad	@echo "--------------------------------------------------------------"
684129917Sgad	cd ${KRNLOBJDIR}/${_kernel}; \
685129917Sgad	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend -DNO_MODULES_OBJ
686129917Sgad.endif
687127149Sgad	@echo
688127149Sgad	@echo "--------------------------------------------------------------"
689129952Sgad	@echo ">>> stage 3.2: building everything"
690129952Sgad	@echo "--------------------------------------------------------------"
691129952Sgad	cd ${KRNLOBJDIR}/${_kernel}; \
692129952Sgad	    ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all -DNO_MODULES_OBJ
693129952Sgad	@echo "--------------------------------------------------------------"
694129952Sgad	@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
695129952Sgad	@echo "--------------------------------------------------------------"
696129952Sgad.endfor
697129952Sgad
698129952Sgad#
699129952Sgad# installkernel, etc.
700129967Sgad#
701129952Sgad# Install the kernel defined by INSTALLKERNEL
702127499Sgad#
703127499Sgadinstallkernel installkernel.debug \
704127823Sgadreinstallkernel reinstallkernel.debug: ${SPECIAL_INSTALLCHECKS}
705127499Sgad.if empty(INSTALLKERNEL)
706127499Sgad	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
707127499Sgad	false
708127149Sgad.endif
709131010Sgad	@echo "--------------------------------------------------------------"
710131010Sgad	@echo ">>> Making hierarchy"
711173492Sjhb	@echo "--------------------------------------------------------------"
712173492Sjhb	cd ${.CURDIR}; \
713173492Sjhb	    ${CROSSENV} PATH=${TMPPATH} ${MAKE} -f Makefile.inc1 hierarchy
714131010Sgad	@echo
715131010Sgad	@echo "--------------------------------------------------------------"
716127499Sgad	@echo ">>> Installing kernel"
717127499Sgad	@echo "--------------------------------------------------------------"
718127499Sgad	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
719127539Sgad	    ${CROSSENV} PATH=${TMPPATH} \
720127539Sgad	    ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
721173492Sjhb
722127499Sgad#
723131010Sgad# update
724131209Sgad#
725173492Sjhb# Update the source tree, by running cvsup and/or running cvs to update to the
726131010Sgad# latest copy.
727131010Sgad#
728127499Sgadupdate:
729131010Sgad.if defined(SUP_UPDATE)
730131010Sgad	@echo "--------------------------------------------------------------"
731131010Sgad	@echo ">>> Running ${SUP}"
732131010Sgad	@echo "--------------------------------------------------------------"
733131010Sgad.if defined(SUPFILE)
734131010Sgad	@${SUP} ${SUPFLAGS} ${SUPFILE}
735131010Sgad.endif
736131010Sgad.if defined(SUPFILE1)
737131010Sgad	@${SUP} ${SUPFLAGS} ${SUPFILE1}
738131010Sgad.endif
739131010Sgad.if defined(SUPFILE2)
740131209Sgad	@${SUP} ${SUPFLAGS} ${SUPFILE2}
741131010Sgad.endif
742173492Sjhb.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
743173492Sjhb	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
744131010Sgad.endif
745131010Sgad.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
746131209Sgad	@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
747131209Sgad.endif
748131209Sgad.endif
749131209Sgad.if defined(CVS_UPDATE)
750131010Sgad	@echo "--------------------------------------------------------------"
751131010Sgad	@echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT}
752131010Sgad	@echo "--------------------------------------------------------------"
753131010Sgad	cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS}
754173492Sjhb.endif
755173492Sjhb
756173492Sjhb#
757173492Sjhb# ------------------------------------------------------------------------
758173492Sjhb#
759173492Sjhb# From here onwards are utility targets used by the 'make world' and
760173492Sjhb# related targets.  If your 'world' breaks, you may like to try to fix
761173492Sjhb# the problem and manually run the following targets to attempt to
762131010Sgad# complete the build.  Beware, this is *not* guaranteed to work, you
763127499Sgad# need to have a pretty good grip on the current state of the system
764131010Sgad# to attempt to manually finish it.  If in doubt, 'make world' again.
765131010Sgad#
766173492Sjhb
767173492Sjhb#
768173492Sjhb# legacy: Build compatibility shims for the next three targets
769131209Sgad#
770131209Sgadlegacy:
771131010Sgad.if ${BOOTSTRAPPING} < 503000
772131010Sgad	@echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \
773131010Sgad	false
774131010Sgad.endif
775173492Sjhb.for _tool in tools/build
776173492Sjhb	${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
777173492Sjhb	    cd ${.CURDIR}/${_tool}; \
778131209Sgad	    ${MAKE} DIRPRFX=${_tool}/ obj; \
779131209Sgad	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
780131010Sgad	    ${MAKE} DIRPRFX=${_tool}/ depend; \
781131010Sgad	    ${MAKE} DIRPRFX=${_tool}/ all; \
782131010Sgad	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
783127499Sgad.endfor
784127499Sgad
785127499Sgad#
786127823Sgad# bootstrap-tools: Build tools needed for compatibility
787127499Sgad#
788127149Sgad.if !defined(NO_GAMES)
789127149Sgad_strfile=	games/fortune/strfile
790127499Sgad.endif
791127499Sgad
79266377Sbrian.if !defined(NO_CXX)
79366377Sbrian_gperf=		gnu/usr.bin/gperf
794127539Sgad.if ${BOOTSTRAPPING} < 700004
795127602Sgad_groff=		gnu/usr.bin/groff
79666377Sbrian.else
797127499Sgad_groff=		gnu/usr.bin/groff/tmac
798127499Sgad.endif
799127499Sgad.endif
800127499Sgad
801127499Sgad.if ${BOOTSTRAPPING} < 600029
802127499Sgad_texinfo=	gnu/usr.bin/texinfo
803127542Sgad.endif
804127499Sgad
80566377Sbrian.if ${BOOTSTRAPPING} < 600015
806127499Sgad_cap_mkdb=	usr.bin/cap_mkdb
807127499Sgad.endif
808127499Sgad
809127602Sgad.if ${BOOTSTRAPPING} < 600018
810127602Sgad_colldef=	usr.bin/colldef
811127499Sgad.endif
812127499Sgad
813127499Sgad.if ${BOOTSTRAPPING} < 600017
814127602Sgad_gencat=	usr.bin/gencat
815127499Sgad.endif
816127499Sgad
817127499Sgad.if ${BOOTSTRAPPING} < 600016
81866377Sbrian_mklocale=	usr.bin/mklocale
819127499Sgad.endif
820127499Sgad
821127509Sgad.if !defined(NO_RESCUE) && \
822127509Sgad    ${BOOTSTRAPPING} < 600008
823127509Sgad_crunchgen=	usr.sbin/crunch/crunchgen
824127509Sgad.endif
825127509Sgad
826127509Sgad.if ${BOOTSTRAPPING} < 600020
827129967Sgad_pwd_mkdb=	usr.sbin/pwd_mkdb
828127499Sgad.endif
829127499Sgad
830127499Sgadbootstrap-tools:
831127823Sgad.for _tool in \
832127499Sgad    ${_strfile} \
833127499Sgad    ${_gperf} \
834127499Sgad    ${_groff} \
835127499Sgad    ${_texinfo} \
836127499Sgad    ${_cap_mkdb} \
837127499Sgad    ${_colldef} \
838127499Sgad    ${_gencat} \
839127499Sgad    usr.bin/lorder \
840127499Sgad    usr.bin/makewhatis \
841127539Sgad    ${_mklocale} \
842127499Sgad    usr.bin/rpcgen \
843129917Sgad    usr.bin/xinstall \
844129967Sgad    usr.sbin/config \
845127499Sgad    ${_crunchgen} \
846127499Sgad    ${_pwd_mkdb}
847127499Sgad	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
848127499Sgad		cd ${.CURDIR}/${_tool}; \
849127499Sgad		${MAKE} DIRPRFX=${_tool}/ obj; \
850127499Sgad		${MAKE} DIRPRFX=${_tool}/ depend; \
851127499Sgad		${MAKE} DIRPRFX=${_tool}/ all; \
852127499Sgad		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
853127499Sgad.endfor
854127499Sgad
855127499Sgad#
856127499Sgad# build-tools: Build special purpose build tools
857127499Sgad#
85866377Sbrian.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
859127499Sgad_aicasm= sys/modules/aic7xxx/aicasm
860127499Sgad.endif
861127542Sgad
862129953Sgad.if !defined(NO_SHARE)
863127542Sgad_share=	share/syscons/scrnmaps
864127499Sgad.endif
865127499Sgad
866127499Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
867127499Sgad_kerberos5_tools= kerberos5/tools
868127499Sgad.endif
869127499Sgad
870127499Sgad.if !defined(NO_RESCUE)
871127499Sgad_rescue= rescue/rescue
872127499Sgad.endif
873127499Sgad
874127499Sgadbuild-tools:
875127499Sgad.for _tool in \
87666377Sbrian    bin/csh \
877127499Sgad    bin/sh \
878127499Sgad    ${_rescue} \
879127499Sgad    lib/libncurses \
880127499Sgad    ${_share} \
881127499Sgad    ${_aicasm} \
882127499Sgad    usr.bin/awk \
883127499Sgad    lib/libmagic \
884127499Sgad    usr.sbin/sysinstall
885127499Sgad	${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
886127499Sgad		cd ${.CURDIR}/${_tool}; \
887127499Sgad		${MAKE} DIRPRFX=${_tool}/ obj; \
888127499Sgad		${MAKE} DIRPRFX=${_tool}/ build-tools
889127499Sgad.endfor
89066377Sbrian.for _tool in \
891127499Sgad    gnu/usr.bin/cc/cc_tools \
89266377Sbrian    ${_kerberos5_tools}
893127499Sgad	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
894127499Sgad		cd ${.CURDIR}/${_tool}; \
895127499Sgad		${MAKE} DIRPRFX=${_tool}/ obj; \
896127539Sgad		${MAKE} DIRPRFX=${_tool}/ depend; \
897127499Sgad		${MAKE} DIRPRFX=${_tool}/ all
89866377Sbrian.endfor
899127499Sgad
900127823Sgad#
901127499Sgad# cross-tools: Build cross-building tools
902127823Sgad#
903129967Sgad.if (${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386") && \
904127499Sgad    ${TARGET_ARCH} != ${MACHINE_ARCH}
905127499Sgad_btxld=		usr.sbin/btxld
906127823Sgad.endif
907127499Sgad
908127499Sgad.if (!defined(NO_RESCUE) || defined(RELEASEDIR)) && \
90966377Sbrian    ${TARGET_ARCH} != ${MACHINE_ARCH}
91066377Sbrian_crunchide=	usr.sbin/crunch/crunchide
911127499Sgad.endif
912127499Sgad
913127499Sgad.if ${TARGET_ARCH} == "alpha" && ${TARGET_ARCH} != ${MACHINE_ARCH}
914127499Sgad_elf2exe=	usr.sbin/elf2exe
915127499Sgad.endif
916127823Sgad
917127823Sgad.if ${TARGET_ARCH} == "i386" && ${TARGET_ARCH} != ${MACHINE_ARCH} && \
918127499Sgad    defined(RELEASEDIR)
919127499Sgad_kgzip=		usr.sbin/kgzip
920127823Sgad.endif
921127499Sgad
922127499Sgadcross-tools:
923127499Sgad.for _tool in \
924127499Sgad    gnu/usr.bin/binutils \
925127499Sgad    gnu/usr.bin/cc \
926127499Sgad    usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
927127499Sgad    ${_btxld} \
928127499Sgad    ${_crunchide} \
929127499Sgad    ${_elf2exe} \
930127499Sgad    ${_kgzip}
931127499Sgad	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
932127823Sgad		cd ${.CURDIR}/${_tool}; \
933127499Sgad		${MAKE} DIRPRFX=${_tool}/ obj; \
934127499Sgad		${MAKE} DIRPRFX=${_tool}/ depend; \
935109502Sjmallett		${MAKE} DIRPRFX=${_tool}/ all; \
936109502Sjmallett		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
937109502Sjmallett.endfor
938109502Sjmallett
939109502Sjmallett#
940130999Sgad# hierarchy - ensure that all the needed directories are present
941109502Sjmallett#
942109502Sjmalletthierarchy:
943109502Sjmallett	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
944109502Sjmallett
945109502Sjmallett#
946109502Sjmallett# libraries - build all libraries, and install them under ${DESTDIR}.
9471556Srgrimes#
94890110Simp# The list of libraries with dependents (${_prebuild_libs}) and their
9491556Srgrimes# interdependencies (__L) are built automatically by the
9501556Srgrimes# ${.CURDIR}/tools/make_libdeps.sh script.
9511556Srgrimes#
95225271Sjkhlibraries:
953130999Sgad	cd ${.CURDIR}; \
95425271Sjkh	    ${MAKE} -f Makefile.inc1 _startup_libs; \
95525271Sjkh	    ${MAKE} -f Makefile.inc1 _prebuild_libs; \
95625271Sjkh	    ${MAKE} -f Makefile.inc1 _generic_libs;
95725271Sjkh
95825271Sjkh# These dependencies are not automatically generated:
95925271Sjkh#
96025271Sjkh# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all
96125271Sjkh# shared libraries for ELF.
96225271Sjkh#
96325271Sjkh_startup_libs=	gnu/lib/csu gnu/lib/libgcc
96425271Sjkh.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
96525271Sjkh_startup_libs+=	lib/csu/${MACHINE_ARCH}-elf
96625271Sjkh.else
96790110Simp_startup_libs+=	lib/csu/${MACHINE_ARCH}
96825271Sjkh.endif
96925271Sjkh
97025271Sjkh_prebuild_libs=
9711556Srgrimes
9721556Srgrimes_generic_libs=	gnu/lib
973130999Sgad
9741556Srgrimes.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL)
97525271Sjkh_prebuild_libs+=	kerberos5/lib/libasn1
97625271Sjkh_prebuild_libs+=	kerberos5/lib/libgssapi
97725271Sjkh_prebuild_libs+=	kerberos5/lib/libkrb5
97825271Sjkh_prebuild_libs+=	kerberos5/lib/libroken
97925271Sjkh_generic_libs+=	kerberos5/lib
98025271Sjkh.endif
98125271Sjkh
98225271Sjkh_prebuild_libs+= lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \
98325271Sjkh		lib/libipx lib/libkiconv lib/libkvm lib/libmd \
98425271Sjkh		lib/libncurses lib/libnetgraph lib/libopie lib/libpam \
98525271Sjkh		lib/libradius \
98690110Simp		lib/libsbuf lib/libtacplus lib/libutil \
98725271Sjkh		lib/libz lib/msun
98825271Sjkh
98925271Sjkhlib/libopie__L lib/libtacplus__L: lib/libmd__L
99025271Sjkh
99125271Sjkh_generic_libs+=	lib
992130999Sgad
99325271Sjkh.if !defined(NO_CRYPT)
994109504Sjmallett.if !defined(NO_OPENSSL)
9951556Srgrimes_prebuild_libs+=	secure/lib/libcrypto secure/lib/libssl
9961556Srgrimeslib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L
9971556Srgrimes.if !defined(NO_OPENSSH)
9981556Srgrimes_prebuild_libs+=	secure/lib/libssh
9991556Srgrimessecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
10001556Srgrimes.if !defined(NO_KERBEROS)
10011556Srgrimessecure/lib/libssh__L: kerberos5/lib/libgssapi__L kerberos5/lib/libkrb5__L \
100290143Smarkm    kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \
100390110Simp    kerberos5/lib/libroken__L
1004127542Sgad.endif
10051556Srgrimes.endif
100690143Smarkm.endif
10071556Srgrimes_generic_libs+=	secure/lib
100890143Smarkm.endif
10091556Srgrimes
10101556Srgrimes.if defined(NO_CRYPT) || defined(NO_OPENSSL)
10111556Srgrimeslib/libradius__L: lib/libmd__L
1012172207Sjeff.endif
101331552Sdyson
10141556Srgrimes.if !defined(NO_NIS)
101590110Simp_prebuild_libs+=	lib/libypclnt
10161556Srgrimes.endif
10171556Srgrimes
1018172207Sjeff_generic_libs+=	usr.bin/lex/lib
10191556Srgrimes
10201556Srgrimes.if ${MACHINE_ARCH} == "i386"
10211556Srgrimes_generic_libs+=	usr.sbin/pcvt/keycap
10221556Srgrimes.endif
10231556Srgrimes
10241556Srgrimes.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
102569896Smckusick${_lib}__L: .PHONY
10261556Srgrimes.if exists(${.CURDIR}/${_lib})
102769896Smckusick	${_+_}@${ECHODIR} "===> ${_lib} (depend,all,install)"; \
10281556Srgrimes		cd ${.CURDIR}/${_lib}; \
10291556Srgrimes		${MAKE} DIRPRFX=${_lib}/ depend; \
10301556Srgrimes		${MAKE} DIRPRFX=${_lib}/ all; \
1031130991Sgad		${MAKE} DIRPRFX=${_lib}/ install
1032130991Sgad.endif
1033130991Sgad.endfor
1034130991Sgad
1035130991Sgad# libpam is special: we need to build static PAM modules before
1036130991Sgad# static PAM library, and dynamic PAM library before dynamic PAM
1037130991Sgad# modules.
1038130991Sgadlib/libpam__L: .PHONY
1039131024Sgad	${_+_}@${ECHODIR} "===> lib/libpam (depend,all,install)"; \
1040130991Sgad		cd ${.CURDIR}/lib/libpam; \
104153276Speter		${MAKE} DIRPRFX=lib/libpam/ depend; \
104253276Speter		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
104353276Speter		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1044130991Sgad
1045130991Sgad_startup_libs: ${_startup_libs:S/$/__L/}
1046130991Sgad_prebuild_libs: ${_prebuild_libs:S/$/__L/}
1047130991Sgad_generic_libs: ${_generic_libs:S/$/__L/}
1048130991Sgad
1049130991Sgad.for __target in all clean cleandepend cleandir depend includes obj
1050130991Sgad.for entry in ${SUBDIR}
1051130991Sgad${entry}.${__target}__D: .PHONY
105253276Speter	${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
105353276Speter		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
105453276Speter		edir=${entry}.${MACHINE_ARCH}; \
10551556Srgrimes		cd ${.CURDIR}/$${edir}; \
10561556Srgrimes	else \
1057130816Sgad		${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1058130816Sgad		edir=${entry}; \
1059130816Sgad		cd ${.CURDIR}/$${edir}; \
1060130816Sgad	fi; \
1061130816Sgad	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1062130816Sgad.endfor
10631556Srgrimespar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
106490110Simp.endfor
10651556Srgrimes
1066127596Sgad.include <bsd.subdir.mk>
10671556Srgrimes
1068127596Sgad.if make(delete-old) || make(delete-old-libs) || make(check-old)
1069127596Sgad
1070127596Sgad#
1071130816Sgad# check for / delete old files section
1072130816Sgad#
1073130816Sgad
1074130816Sgad.include "ObsoleteFiles.inc"
1075127596Sgad
1076127596SgadOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \
1077127596Sgadelse you can not start such an application. Consult UPDATING for more \
1078127596Sgadinformation regarding how to cope with the removal/revision bump of a \
1079130816Sgadspecific library."
1080130816Sgad
1081130816Sgad.if !defined(BATCH_DELETE_OLD_FILES)
1082130816SgadRM_I=-i
1083130816Sgad.else
1084130816SgadRM_I=-v
1085130816Sgad.endif
1086130816Sgad
1087130972Sgaddelete-old-files:
1088130816Sgad	@echo ">>> Removing old files (only deletes safe to delete libs)"
1089130972Sgad.for file in ${OLD_FILES}
1090127596Sgad# Ask for every old file if the user really wants to remove it.
10911556Srgrimes# It's annoying, but better safe than sorry.
1092130816Sgad	@[ ! -f "${DESTDIR}/${file}" ] || (rm ${RM_I} "${DESTDIR}/${file}" \
10931556Srgrimes                ||  ([ -f "${DESTDIR}/${file}" ] \
10941556Srgrimes                        && echo "Removing schg flag on ${DESTDIR}/${file}" \
10951556Srgrimes                        && chflags noschg "${DESTDIR}/${file}" \
10961556Srgrimes                        && rm ${RM_I} "${DESTDIR}/${file}"))
10971556Srgrimes.endfor
10981556Srgrimes# Remove catpages without corresponding manpages.
10991556Srgrimes	@3<&0; \
11001556Srgrimes	find ${DESTDIR}/usr/share/man/cat* ! -type d | \
11011556Srgrimes	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
11021556Srgrimes	while read catpage; do \
11031556Srgrimes		read manpage; \
11041556Srgrimes		if [ ! -e "$${manpage}" ]; then \
11051556Srgrimes			rm ${RM_I} $${catpage} <&3 ; \
1106129915Sgad	        fi; \
11071556Srgrimes	done
11081556Srgrimes	@echo ">>> Old files removed"
1109129914Sgad
11101556Srgrimescheck-old-files:
1111102886Sjmallett	@echo ">>> Checking for old files"
1112129914Sgad.for file in ${OLD_FILES}
1113129914Sgad	@[ ! -f "${DESTDIR}/${file}" ] || echo "${DESTDIR}/${file}"
1114102886Sjmallett.endfor
1115129914Sgad# Check for catpages without corresponding manpages.
1116129914Sgad	@find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1117129914Sgad	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1118129914Sgad	while read catpage; do \
1119129914Sgad		read manpage; \
1120129914Sgad		if [ ! -e "$${manpage}" ]; then \
1121129914Sgad			echo $${catpage} ; \
1122129914Sgad	        fi; \
1123129914Sgad	done
1124129914Sgad
1125129914Sgaddelete-old-libs:
1126129914Sgad	@echo ">>> Removing old libraries"
1127102886Sjmallett	@echo "${OLD_LIBS_MESSAGE}" | fmt
11281556Srgrimes.for file in ${OLD_LIBS}
11291556Srgrimes	@[ ! -f "${DESTDIR}/${file}" ] || (rm ${RM_I} "${DESTDIR}/${file}" \
11301556Srgrimes		||  ([ -f "${DESTDIR}/${file}" ] \
11311556Srgrimes			&& echo "Removing schg flag on ${DESTDIR}/${file}" \
113281743Sbrian			&& chflags noschg "${DESTDIR}/${file}" \
1133129634Sgad			&& rm ${RM_I} "${DESTDIR}/${file}"))
1134129634Sgad.endfor
1135129634Sgad	@echo ">>> Old libraries removed"
1136129914Sgad
1137129914Sgadcheck-old-libs:
1138129914Sgad	@echo ">>> Checking for old libraries"
11391556Srgrimes.for file in ${OLD_LIBS}
1140129914Sgad	@[ ! -f "${DESTDIR}/${file}" ] || echo "${DESTDIR}/${file}"
1141129914Sgad.endfor
1142129914Sgad
1143129915Sgaddelete-old-dirs:
1144129915Sgad	@echo ">>> Removing old directories"
1145129915Sgad.for dir in ${OLD_DIRS}
1146129915Sgad# Don't fail if an old directory isn't empty.
11471556Srgrimes	@[ ! -d "${DESTDIR}/${dir}" ] || (rmdir -v "${DESTDIR}/${dir}" || true)
1148129914Sgad.endfor
1149129914Sgad	@echo ">>> Old directories removed"
1150129914Sgad
1151129914Sgadcheck-old-dirs:
11521556Srgrimes	@echo ">>> Checking for old directories"
1153129914Sgad.for dir in ${OLD_DIRS}
1154129914Sgad	@[ ! -d "${DESTDIR}/${dir}" ] || echo "${DESTDIR}/${dir}"
1155129914Sgad.endfor
1156129914Sgad
1157129914Sgaddelete-old: delete-old-files delete-old-dirs
11581556Srgrimes	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1159129914Sgad
11601556Srgrimescheck-old: check-old-files check-old-libs check-old-dirs
1161129914Sgad	@echo "To remove old files and directories run '${MAKE} delete-old'."
1162129914Sgad	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
11631556Srgrimes
1164129914Sgad.endif
1165129914Sgad
1166129914Sgad