Makefile.inc1 revision 246096
1217309Snwhitehorn#
2255852Sdteske# $FreeBSD: head/Makefile.inc1 246096 2013-01-29 21:48:10Z brooks $
3217309Snwhitehorn#
4217309Snwhitehorn# Make command line options:
5217309Snwhitehorn#	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
6251843Sbapt#	-DNO_CLEAN do not clean at all
7217309Snwhitehorn#	-DDB_FROM_SRC use the user/group databases in src/etc instead of
8217309Snwhitehorn#	    the system database when installing.
9217309Snwhitehorn#	-DNO_SHARE do not go into share subdir
10217309Snwhitehorn#	-DKERNFAST define NO_KERNEL{CONFIG,CLEAN,DEPEND,OBJ}
11217309Snwhitehorn#	-DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
12217309Snwhitehorn#	-DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
13217309Snwhitehorn#	-DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
14217309Snwhitehorn#	-DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel
15217309Snwhitehorn#	-DNO_PORTSUPDATE do not update ports in ${MAKE} update
16217309Snwhitehorn#	-DNO_ROOT install without using root privilege
17217309Snwhitehorn#	-DNO_DOCUPDATE do not update doc in ${MAKE} update
18217309Snwhitehorn#	-DNO_CTF do not run the DTrace CTF conversion tools on built objects
19217309Snwhitehorn#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
20217309Snwhitehorn#	LOCAL_LIB_DIRS="list of dirs" to add additional dirs to libraries target
21217309Snwhitehorn#	LOCAL_MTREE="list of mtree files" to process to allow local directories
22217309Snwhitehorn#	    to be created before files are installed
23217309Snwhitehorn#	LOCAL_TOOL_DIRS="list of dirs" to add additional dirs to the build-tools
24217309Snwhitehorn#	    list
25217309Snwhitehorn#	METALOG="path to metadata log" to write permission and ownership
26217309Snwhitehorn#	    when NO_ROOT is set.  (default: ${DESTDIR}/METALOG)
27217309Snwhitehorn#	TARGET="machine" to crossbuild world for a different machine type
28217309Snwhitehorn#	TARGET_ARCH= may be required when a TARGET supports multiple endians
29217309Snwhitehorn#	BUILDENV_SHELL= shell to launch for the buildenv target (def:/bin/sh)
30217309Snwhitehorn
31217309Snwhitehorn#
32217309Snwhitehorn# The intended user-driven targets are:
33217309Snwhitehorn# buildworld  - rebuild *everything*, including glue to help do upgrades
34217309Snwhitehorn# installworld- install everything built by "buildworld"
35217309Snwhitehorn# doxygen     - build API documentation of the kernel
36217309Snwhitehorn# update      - convenient way to update your source tree (eg: cvsup/cvs)
37217309Snwhitehorn#
38217309Snwhitehorn# Standard targets (not defined here) are documented in the makefiles in
39217309Snwhitehorn# /usr/share/mk.  These include:
40217309Snwhitehorn#		obj depend all install clean cleandepend cleanobj
41217309Snwhitehorn
42217309Snwhitehorn# You are supposed to define both of these when calling Makefile.inc1
43217309Snwhitehorn# directly.  However, some old scripts don't.  Cope for the moment, but
44217309Snwhitehorn# issue a new warning for a transition period.
45217309Snwhitehorn.if defined(TARGET) && !defined(TARGET_ARCH)
46217309Snwhitehorn.warning "You must pass both TARGET and TARGET_ARCH to Makefile.inc1.  Setting TARGET_ARCH=${TARGET}."
47217309SnwhitehornTARGET_ARCH=${TARGET}
48217309Snwhitehorn.endif
49217309Snwhitehorn.if !defined(TARGET) || !defined(TARGET_ARCH)
50217309Snwhitehorn.error "Both TARGET and TARGET_ARCH must be defined."
51217309Snwhitehorn.endif
52217309Snwhitehorn
53217309Snwhitehorn.include <bsd.own.mk>
54217309Snwhitehorn.include <bsd.arch.inc.mk>
55217309Snwhitehorn.include <bsd.compiler.mk>
56217309Snwhitehorn
57217309Snwhitehorn# We must do share/info early so that installation of info `dir'
58217309Snwhitehorn# entries works correctly.  Do it first since it is less likely to
59251843Sbapt# grow dependencies on include and lib than vice versa.
60217309Snwhitehorn#
61217309Snwhitehorn# We must do lib/ and libexec/ before bin/, because if installworld
62217309Snwhitehorn# installs a new /bin/sh, the 'make' command will *immediately*
63217309Snwhitehorn# use that new version.  And the new (dynamically-linked) /bin/sh
64217309Snwhitehorn# will expect to find appropriate libraries in /lib and /libexec.
65217309Snwhitehorn#
66217309SnwhitehornSUBDIR=	share/info lib libexec
67217309SnwhitehornSUBDIR+=bin
68217309Snwhitehorn.if ${MK_GAMES} != "no"
69217309SnwhitehornSUBDIR+=games
70224014Snwhitehorn.endif
71217309Snwhitehorn.if ${MK_CDDL} != "no"
72224014SnwhitehornSUBDIR+=cddl
73217309Snwhitehorn.endif
74255852SdteskeSUBDIR+=gnu include
75217309Snwhitehorn.if ${MK_KERBEROS} != "no"
76217309SnwhitehornSUBDIR+=kerberos5
77217309Snwhitehorn.endif
78217309Snwhitehorn.if ${MK_RESCUE} != "no"
79217309SnwhitehornSUBDIR+=rescue
80217309Snwhitehorn.endif
81217309SnwhitehornSUBDIR+=sbin
82217309Snwhitehorn.if ${MK_CRYPT} != "no"
83217309SnwhitehornSUBDIR+=secure
84217309Snwhitehorn.endif
85217309Snwhitehorn.if !defined(NO_SHARE)
86251843SbaptSUBDIR+=share
87217309Snwhitehorn.endif
88217309SnwhitehornSUBDIR+=sys usr.bin usr.sbin
89217309Snwhitehorn.if ${MK_OFED} != "no"
90217309SnwhitehornSUBDIR+=contrib/ofed
91217309Snwhitehorn.endif
92217309Snwhitehorn#
93217309Snwhitehorn# We must do etc/ last for install/distribute to work.
94217309Snwhitehorn#
95217309SnwhitehornSUBDIR+=etc
96217309Snwhitehorn
97217309Snwhitehorn# These are last, since it is nice to at least get the base system
98220749Snwhitehorn# rebuilt before you do them.
99224014Snwhitehorn.for _DIR in ${LOCAL_LIB_DIRS} ${LOCAL_DIRS}
100217309Snwhitehorn.if exists(${.CURDIR}/${_DIR}/Makefile)
101217309SnwhitehornSUBDIR+= ${_DIR}
102217309Snwhitehorn.endif
103217309Snwhitehorn.endfor
104217309Snwhitehorn
105217309Snwhitehorn.if defined(SUBDIR_OVERRIDE)
106217309SnwhitehornSUBDIR=		${SUBDIR_OVERRIDE}
107217309Snwhitehorn.endif
108217309Snwhitehorn
109220749Snwhitehorn.if defined(NOCLEAN)
110217309SnwhitehornNO_CLEAN=	${NOCLEAN}
111217309Snwhitehorn.endif
112217309Snwhitehorn.if defined(NO_CLEANDIR)
113220749SnwhitehornCLEANDIR=	clean cleandepend
114217309Snwhitehorn.else
115217309SnwhitehornCLEANDIR=	cleandir
116217309Snwhitehorn.endif
117217309Snwhitehorn
118217309SnwhitehornLOCAL_TOOL_DIRS?=
119217309Snwhitehorn
120217309SnwhitehornBUILDENV_SHELL?=/bin/sh
121217309Snwhitehorn
122217309SnwhitehornCVS?=		cvs
123217309SnwhitehornCVSFLAGS?=	-A -P -d -I!
124217309SnwhitehornSVN?=		svn
125217309SnwhitehornSVNFLAGS?=	-r HEAD
126217309SnwhitehornSUP?=		/usr/bin/csup
127217309SnwhitehornSUPFLAGS?=	-g -L 2
128217309Snwhitehorn.if defined(SUPHOST)
129217309SnwhitehornSUPFLAGS+=	-h ${SUPHOST}
130217309Snwhitehorn.endif
131217309Snwhitehorn
132217309SnwhitehornMAKEOBJDIRPREFIX?=	/usr/obj
133217309Snwhitehorn.if !defined(OSRELDATE)
134217309Snwhitehorn.if exists(/usr/include/osreldate.h)
135217309SnwhitehornOSRELDATE!=	awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
136217309Snwhitehorn		/usr/include/osreldate.h
137217309Snwhitehorn.else
138217309SnwhitehornOSRELDATE=	0
139224014Snwhitehorn.endif
140217309Snwhitehorn.endif
141217309Snwhitehorn
142217309Snwhitehorn.if !defined(VERSION)
143217309SnwhitehornVERSION!=	uname -srp
144251843SbaptVERSION+=	${OSRELDATE}
145251843Sbapt.endif
146251843Sbapt
147251843SbaptKNOWN_ARCHES?=	amd64 arm armeb/arm armv6/arm armv6eb/arm i386 i386/pc98 ia64 mips mipsel/mips mips64el/mips mips64/mips mipsn32el/mips mipsn32/mips powerpc powerpc64/powerpc sparc64
148251843Sbapt.if ${TARGET} == ${TARGET_ARCH}
149251843Sbapt_t=		${TARGET}
150251843Sbapt.else
151251843Sbapt_t=		${TARGET_ARCH}/${TARGET}
152251843Sbapt.endif
153251843Sbapt.for _t in ${_t}
154251843Sbapt.if empty(KNOWN_ARCHES:M${_t})
155251843Sbapt.error Unknown target ${TARGET_ARCH}:${TARGET}.
156251843Sbapt.endif
157251843Sbapt.endfor
158251843Sbapt
159251843Sbapt.if ${TARGET} == ${MACHINE}
160251843SbaptTARGET_CPUTYPE?=${CPUTYPE}
161251843Sbapt.else
162251843SbaptTARGET_CPUTYPE?=
163251843Sbapt.endif
164217309Snwhitehorn
165217309Snwhitehorn.if !empty(TARGET_CPUTYPE)
166217309Snwhitehorn_TARGET_CPUTYPE=${TARGET_CPUTYPE}
167217309Snwhitehorn.else
168217309Snwhitehorn_TARGET_CPUTYPE=dummy
169217309Snwhitehorn.endif
170217309Snwhitehorn_CPUTYPE!=	MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
171217309Snwhitehorn		-f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
172217309Snwhitehorn.if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
173217309Snwhitehorn.error CPUTYPE global should be set with ?=.
174217309Snwhitehorn.endif
175217309Snwhitehorn.if make(buildworld)
176217309SnwhitehornBUILD_ARCH!=	uname -p
177217309Snwhitehorn.if ${MACHINE_ARCH} != ${BUILD_ARCH}
178217309Snwhitehorn.error To cross-build, set TARGET_ARCH.
179217309Snwhitehorn.endif
180217309Snwhitehorn.endif
181217309Snwhitehorn.if ${MACHINE} == ${TARGET} && ${MACHINE_ARCH} == ${TARGET_ARCH} && !defined(CROSS_BUILD_TESTING)
182217309SnwhitehornOBJTREE=	${MAKEOBJDIRPREFIX}
183217309Snwhitehorn.else
184217309SnwhitehornOBJTREE=	${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH}
185217309Snwhitehorn.endif
186217309SnwhitehornWORLDTMP=	${OBJTREE}${.CURDIR}/tmp
187217309Snwhitehorn# /usr/games added for fortune which depend on strfile
188217309SnwhitehornBPATH=		${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
189217309SnwhitehornXPATH=		${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
190217309SnwhitehornSTRICTTMPPATH=	${BPATH}:${XPATH}
191217309SnwhitehornTMPPATH=	${STRICTTMPPATH}:${PATH}
192217309Snwhitehorn
193217309Snwhitehorn#
194217309Snwhitehorn# Avoid running mktemp(1) unless actually needed.
195217309Snwhitehorn# It may not be functional, e.g., due to new ABI
196217309Snwhitehorn# when in the middle of installing over this system.
197217309Snwhitehorn#
198217309Snwhitehorn.if make(distributeworld) || make(installworld)
199217309SnwhitehornINSTALLTMP!=	/usr/bin/mktemp -d -u -t install
200217309Snwhitehorn.endif
201217309Snwhitehorn
202217309Snwhitehorn#
203217309Snwhitehorn# Building a world goes through the following stages
204217309Snwhitehorn#
205217309Snwhitehorn# 1. legacy stage [BMAKE]
206217309Snwhitehorn#	This stage is responsible for creating compatibility
207217309Snwhitehorn#	shims that are needed by the bootstrap-tools,
208251843Sbapt#	build-tools and cross-tools stages.
209251843Sbapt# 1. bootstrap-tools stage [BMAKE]
210217309Snwhitehorn#	This stage is responsible for creating programs that
211217309Snwhitehorn#	are needed for backward compatibility reasons. They
212217309Snwhitehorn#	are not built as cross-tools.
213217309Snwhitehorn# 2. build-tools stage [TMAKE]
214217309Snwhitehorn#	This stage is responsible for creating the object
215217309Snwhitehorn#	tree and building any tools that are needed during
216217309Snwhitehorn#	the build process.
217217309Snwhitehorn# 3. cross-tools stage [XMAKE]
218217309Snwhitehorn#	This stage is responsible for creating any tools that
219251843Sbapt#	are needed for cross-builds. A cross-compiler is one
220217309Snwhitehorn#	of them.
221217309Snwhitehorn# 4. world stage [WMAKE]
222217309Snwhitehorn#	This stage actually builds the world.
223217309Snwhitehorn# 5. install stage (optional) [IMAKE]
224217309Snwhitehorn#	This stage installs a previously built world.
225217309Snwhitehorn#
226217309Snwhitehorn
227217309SnwhitehornBOOTSTRAPPING?=	0
228217309Snwhitehorn
229217309Snwhitehorn# Common environment for world related stages
230217309SnwhitehornCROSSENV=	MAKEOBJDIRPREFIX=${OBJTREE} \
231217309Snwhitehorn		MACHINE_ARCH=${TARGET_ARCH} \
232217309Snwhitehorn		MACHINE=${TARGET} \
233255852Sdteske		CPUTYPE=${TARGET_CPUTYPE}
234224014Snwhitehorn.if ${MK_GROFF} != "no"
235224014SnwhitehornCROSSENV+=	GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
236217309Snwhitehorn		GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
237217309Snwhitehorn		GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
238217309Snwhitehorn.endif
239217309Snwhitehorn
240217309Snwhitehorn# bootstrap-tools stage
241217309SnwhitehornBMAKEENV=	INSTALL="sh ${.CURDIR}/tools/install.sh" \
242217309Snwhitehorn		PATH=${BPATH}:${PATH} \
243217309Snwhitehorn		WORLDTMP=${WORLDTMP} \
244217309Snwhitehorn		VERSION="${VERSION}" \
245217309Snwhitehorn		MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
246217309Snwhitehorn		COMPILER_TYPE=${COMPILER_TYPE}
247251843SbaptBMAKE=		MAKEOBJDIRPREFIX=${WORLDTMP} \
248217309Snwhitehorn		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
249217309Snwhitehorn		DESTDIR= \
250217309Snwhitehorn		BOOTSTRAPPING=${OSRELDATE} \
251217309Snwhitehorn		SSP_CFLAGS= \
252217309Snwhitehorn		-DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \
253217309Snwhitehorn		-DNO_PIC -DNO_PROFILE -DNO_SHARED \
254217309Snwhitehorn		-DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF -DEARLY_BUILD
255217309Snwhitehorn
256251843Sbapt# build-tools stage
257217309SnwhitehornTMAKE=		MAKEOBJDIRPREFIX=${OBJTREE} \
258217309Snwhitehorn		${BMAKEENV} ${MAKE} -f Makefile.inc1 \
259217309Snwhitehorn		TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
260220749Snwhitehorn		DESTDIR= \
261224014Snwhitehorn		BOOTSTRAPPING=${OSRELDATE} \
262217309Snwhitehorn		SSP_CFLAGS= \
263217309Snwhitehorn		-DNO_LINT \
264217309Snwhitehorn		-DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF -DEARLY_BUILD
265217309Snwhitehorn
266217309Snwhitehorn# cross-tools stage
267217309SnwhitehornXMAKE=		TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
268217309Snwhitehorn		TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
269217309Snwhitehorn		-DWITHOUT_GDB
270217309Snwhitehorn
271217309Snwhitehorn# world stage
272220749SnwhitehornWMAKEENV=	${CROSSENV} \
273217309Snwhitehorn		_SHLIBDIRPREFIX=${WORLDTMP} \
274217309Snwhitehorn		_LDSCRIPTROOT= \
275217309Snwhitehorn		VERSION="${VERSION}" \
276220749Snwhitehorn		INSTALL="sh ${.CURDIR}/tools/install.sh" \
277220749Snwhitehorn		PATH=${TMPPATH}
278217309Snwhitehorn.if ${MK_CDDL} == "no"
279217309SnwhitehornWMAKEENV+=	NO_CTF=1
280217309Snwhitehorn.endif
281217309Snwhitehorn.if ${CC:T:Mgcc} == "gcc"
282217309SnwhitehornWMAKE_COMPILER_TYPE=	gcc
283217309Snwhitehorn.elif ${CC:T:Mclang} == "clang"
284217309SnwhitehornWMAKE_COMPILER_TYPE=	clang
285217309Snwhitehorn.elif ${MK_CLANG_IS_CC} == "no"
286217309SnwhitehornWMAKE_COMPILER_TYPE=	gcc
287217309Snwhitehorn.else
288217309SnwhitehornWMAKE_COMPILER_TYPE=	clang
289217309Snwhitehorn.endif
290217309SnwhitehornWMAKEENV+=	COMPILER_TYPE=${WMAKE_COMPILER_TYPE}
291217309SnwhitehornWMAKE=		${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
292217309Snwhitehorn
293217309Snwhitehorn.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "powerpc64"
294217309Snwhitehorn# 32 bit world
295217309SnwhitehornLIB32TMP=	${OBJTREE}${.CURDIR}/lib32
296217309Snwhitehorn
297217309Snwhitehorn.if ${TARGET_ARCH} == "amd64"
298217309Snwhitehorn.if empty(TARGET_CPUTYPE)
299217309SnwhitehornLIB32CPUFLAGS=	-march=i686 -mmmx -msse -msse2
300217309Snwhitehorn.else
301217309SnwhitehornLIB32CPUFLAGS=	-march=${TARGET_CPUTYPE}
302224014Snwhitehorn.endif
303217309SnwhitehornLIB32WMAKEENV=	MACHINE=i386 MACHINE_ARCH=i386 \
304217309Snwhitehorn		MACHINE_CPU="i686 mmx sse sse2"
305217309SnwhitehornLIB32WMAKEFLAGS=	\
306217309Snwhitehorn		AS="${AS} --32" \
307251843Sbapt		LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32"
308251843Sbapt
309251843Sbapt.elif ${TARGET_ARCH} == "powerpc64"
310251843Sbapt.if empty(TARGET_CPUTYPE)
311251843SbaptLIB32CPUFLAGS=	-mcpu=powerpc
312251843Sbapt.else
313251843SbaptLIB32CPUFLAGS=	-mcpu=${TARGET_CPUTYPE}
314251843Sbapt.endif
315251843SbaptLIB32WMAKEENV=	MACHINE=powerpc MACHINE_ARCH=powerpc
316251843SbaptLIB32WMAKEFLAGS=	\
317251843Sbapt		LD="${LD} -m elf32ppc_fbsd"
318251843Sbapt.endif
319251843Sbapt
320251843Sbapt
321251843SbaptLIB32FLAGS=	-m32 ${LIB32CPUFLAGS} -DCOMPAT_32BIT \
322251843Sbapt		-isystem ${LIB32TMP}/usr/include/ \
323251843Sbapt		-L${LIB32TMP}/usr/lib32 \
324251843Sbapt		-B${LIB32TMP}/usr/lib32
325251843Sbapt
326251843Sbapt# Yes, the flags are redundant.
327251843SbaptLIB32WMAKEENV+=	MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
328251843Sbapt		_SHLIBDIRPREFIX=${LIB32TMP} \
329251843Sbapt		_LDSCRIPTROOT=${LIB32TMP} \
330251843Sbapt		VERSION="${VERSION}" \
331251843Sbapt		INSTALL="sh ${.CURDIR}/tools/install.sh" \
332251843Sbapt		PATH=${TMPPATH} \
333251843Sbapt		LIBDIR=/usr/lib32 \
334251843Sbapt		SHLIBDIR=/usr/lib32 \
335217309Snwhitehorn		COMPILER_TYPE=${WMAKE_COMPILER_TYPE}
336217309SnwhitehornLIB32WMAKEFLAGS+=	\
337217309Snwhitehorn		CC="${CC} ${LIB32FLAGS}" \
338217309Snwhitehorn		CXX="${CXX} ${LIB32FLAGS}" \
339217309Snwhitehorn		DESTDIR=${LIB32TMP} \
340217309Snwhitehorn		-DCOMPAT_32BIT \
341217309Snwhitehorn		-DLIBRARIES_ONLY \
342217309Snwhitehorn		-DNO_CPU_CFLAGS \
343217309Snwhitehorn		-DNO_CTF \
344217309Snwhitehorn		-DNO_LINT
345217309Snwhitehorn
346217309SnwhitehornLIB32WMAKE=	${LIB32WMAKEENV} ${MAKE} ${LIB32WMAKEFLAGS} \
347217309Snwhitehorn		-DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_INFO -DWITHOUT_HTML
348217309SnwhitehornLIB32IMAKE=	${LIB32WMAKE:NINSTALL=*:NDESTDIR=*:N_LDSCRIPTROOT=*} -DNO_INCS \
349217309Snwhitehorn		${IMAKE_INSTALL}
350217309Snwhitehorn.endif
351217309Snwhitehorn
352217309SnwhitehornIMAKEENV=	${CROSSENV:N_LDSCRIPTROOT=*}
353217309SnwhitehornIMAKE=		${IMAKEENV} ${MAKE} -f Makefile.inc1 \
354217309Snwhitehorn		${IMAKE_INSTALL} ${IMAKE_MTREE}
355217309Snwhitehorn.if empty(.MAKEFLAGS:M-n)
356217309SnwhitehornIMAKEENV+=	PATH=${STRICTTMPPATH}:${INSTALLTMP} \
357217309Snwhitehorn		LD_LIBRARY_PATH=${INSTALLTMP} \
358217309Snwhitehorn		PATH_LOCALE=${INSTALLTMP}/locale
359217309SnwhitehornIMAKE+=		__MAKE_SHELL=${INSTALLTMP}/sh
360217309Snwhitehorn.else
361217309SnwhitehornIMAKEENV+=	PATH=${TMPPATH}:${INSTALLTMP}
362217309Snwhitehorn.endif
363217309Snwhitehorn.if defined(DB_FROM_SRC)
364217309SnwhitehornINSTALLFLAGS+=	-N ${.CURDIR}/etc
365217309SnwhitehornMTREEFLAGS+=	-N ${.CURDIR}/etc
366217309Snwhitehorn.endif
367217309Snwhitehorn.if defined(NO_ROOT)
368217309SnwhitehornMETALOG?=	${DESTDIR}/${DISTDIR}/METALOG
369217309SnwhitehornIMAKE+=		-DNO_ROOT METALOG=${METALOG}
370217309SnwhitehornINSTALL_DDIR=	${DESTDIR}/${DISTDIR}
371220749SnwhitehornINSTALLFLAGS+=	-U -M ${METALOG} -D ${INSTALL_DDIR:S://:/:g:C:/$::}
372217309SnwhitehornMTREEFLAGS+=	-W
373217309Snwhitehorn.endif
374217309Snwhitehorn.if defined(DB_FROM_SRC) || defined(NO_ROOT)
375217309SnwhitehornIMAKE_INSTALL=	INSTALL="install ${INSTALLFLAGS}"
376217309SnwhitehornIMAKE_MTREE=	MTREE_CMD="nmtree ${MTREEFLAGS}"
377220749Snwhitehorn.endif
378217309Snwhitehorn
379217309Snwhitehorn# kernel stage
380217309SnwhitehornKMAKEENV=	${WMAKEENV}
381217309SnwhitehornKMAKE=		${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME}
382217309Snwhitehorn
383217309Snwhitehorn#
384217309Snwhitehorn# buildworld
385217309Snwhitehorn#
386217309Snwhitehorn# Attempt to rebuild the entire system, with reasonable chance of
387217309Snwhitehorn# success, regardless of how old your existing system is.
388217309Snwhitehorn#
389217309Snwhitehorn_worldtmp:
390217309Snwhitehorn.if ${.CURDIR:C/[^,]//g} != ""
391217309Snwhitehorn#	The m4 build of sendmail files doesn't like it if ',' is used
392217309Snwhitehorn#	anywhere in the path of it's files.
393217309Snwhitehorn	@echo
394217309Snwhitehorn	@echo "*** Error: path to source tree contains a comma ','"
395217309Snwhitehorn	@echo
396217309Snwhitehorn	false
397217309Snwhitehorn.endif
398217309Snwhitehorn	@echo
399217309Snwhitehorn	@echo "--------------------------------------------------------------"
400217309Snwhitehorn	@echo ">>> Rebuilding the temporary build tree"
401217309Snwhitehorn	@echo "--------------------------------------------------------------"
402217309Snwhitehorn.if !defined(NO_CLEAN)
403217309Snwhitehorn	rm -rf ${WORLDTMP}
404217309Snwhitehorn.if defined(LIB32TMP)
405220749Snwhitehorn	rm -rf ${LIB32TMP}
406217309Snwhitehorn.endif
407217309Snwhitehorn.else
408217309Snwhitehorn	rm -rf ${WORLDTMP}/legacy/usr/include
409217309Snwhitehorn#	XXX - These three can depend on any header file.
410217309Snwhitehorn	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
411217309Snwhitehorn	rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c
412217309Snwhitehorn	rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
413217309Snwhitehorn.endif
414217309Snwhitehorn.for _dir in \
415220749Snwhitehorn    lib usr legacy/usr
416220749Snwhitehorn	mkdir -p ${WORLDTMP}/${_dir}
417217309Snwhitehorn.endfor
418217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
419217309Snwhitehorn	    -p ${WORLDTMP}/legacy/usr >/dev/null
420217309Snwhitehorn.if ${MK_GROFF} != "no"
421217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.groff.dist \
422217309Snwhitehorn	    -p ${WORLDTMP}/legacy/usr >/dev/null
423217309Snwhitehorn.endif
424217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
425217309Snwhitehorn	    -p ${WORLDTMP}/usr >/dev/null
426217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
427217309Snwhitehorn	    -p ${WORLDTMP}/usr/include >/dev/null
428217309Snwhitehorn	ln -sf ${.CURDIR}/sys ${WORLDTMP}
429217309Snwhitehorn.if ${MK_BIND_LIBS} != "no"
430217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
431217309Snwhitehorn	    -p ${WORLDTMP}/usr/include >/dev/null
432217309Snwhitehorn.endif
433217309Snwhitehorn.for _mtree in ${LOCAL_MTREE}
434217309Snwhitehorn	mtree -deU -f ${.CURDIR}/${_mtree} -p ${WORLDTMP} > /dev/null
435217309Snwhitehorn.endfor
436217309Snwhitehorn_legacy:
437217309Snwhitehorn	@echo
438217309Snwhitehorn	@echo "--------------------------------------------------------------"
439217309Snwhitehorn	@echo ">>> stage 1.1: legacy release compatibility shims"
440217309Snwhitehorn	@echo "--------------------------------------------------------------"
441217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${BMAKE} legacy
442217309Snwhitehorn_bootstrap-tools:
443217309Snwhitehorn	@echo
444217309Snwhitehorn	@echo "--------------------------------------------------------------"
445217309Snwhitehorn	@echo ">>> stage 1.2: bootstrap tools"
446217309Snwhitehorn	@echo "--------------------------------------------------------------"
447217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
448217309Snwhitehorn_cleanobj:
449217309Snwhitehorn.if !defined(NO_CLEAN)
450217309Snwhitehorn	@echo
451217309Snwhitehorn	@echo "--------------------------------------------------------------"
452217309Snwhitehorn	@echo ">>> stage 2.1: cleaning up the object tree"
453217309Snwhitehorn	@echo "--------------------------------------------------------------"
454217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
455217309Snwhitehorn.if defined(LIB32TMP)
456217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
457220749Snwhitehorn.endif
458217309Snwhitehorn.endif
459217309Snwhitehorn_obj:
460217309Snwhitehorn	@echo
461217309Snwhitehorn	@echo "--------------------------------------------------------------"
462217309Snwhitehorn	@echo ">>> stage 2.2: rebuilding the object tree"
463217309Snwhitehorn	@echo "--------------------------------------------------------------"
464217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
465217309Snwhitehorn_build-tools:
466217309Snwhitehorn	@echo
467217309Snwhitehorn	@echo "--------------------------------------------------------------"
468217309Snwhitehorn	@echo ">>> stage 2.3: build tools"
469217309Snwhitehorn	@echo "--------------------------------------------------------------"
470217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
471217309Snwhitehorn_cross-tools:
472217309Snwhitehorn	@echo
473251843Sbapt	@echo "--------------------------------------------------------------"
474251843Sbapt	@echo ">>> stage 3: cross tools"
475251843Sbapt	@echo "--------------------------------------------------------------"
476251843Sbapt	${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
477251843Sbapt_includes:
478251843Sbapt	@echo
479217309Snwhitehorn	@echo "--------------------------------------------------------------"
480217309Snwhitehorn	@echo ">>> stage 4.1: building includes"
481217309Snwhitehorn	@echo "--------------------------------------------------------------"
482217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
483217309Snwhitehorn_libraries:
484217309Snwhitehorn	@echo
485217309Snwhitehorn	@echo "--------------------------------------------------------------"
486217309Snwhitehorn	@echo ">>> stage 4.2: building libraries"
487217309Snwhitehorn	@echo "--------------------------------------------------------------"
488217309Snwhitehorn	${_+_}cd ${.CURDIR}; \
489217309Snwhitehorn	    ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \
490217309Snwhitehorn	    -DWITHOUT_MAN -DNO_PROFILE libraries
491217309Snwhitehorn_depend:
492217309Snwhitehorn	@echo
493217309Snwhitehorn	@echo "--------------------------------------------------------------"
494217309Snwhitehorn	@echo ">>> stage 4.3: make dependencies"
495217309Snwhitehorn	@echo "--------------------------------------------------------------"
496220749Snwhitehorn	${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
497251843Sbapteverything:
498251843Sbapt	@echo
499251843Sbapt	@echo "--------------------------------------------------------------"
500251843Sbapt	@echo ">>> stage 4.4: building everything"
501251843Sbapt	@echo "--------------------------------------------------------------"
502217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${WMAKE} par-all
503217309Snwhitehorn.if defined(LIB32TMP)
504217309Snwhitehornbuild32:
505217309Snwhitehorn	@echo
506217309Snwhitehorn	@echo "--------------------------------------------------------------"
507217309Snwhitehorn	@echo ">>> stage 5.1: building 32 bit shim libraries"
508217309Snwhitehorn	@echo "--------------------------------------------------------------"
509217309Snwhitehorn	mkdir -p ${LIB32TMP}/usr/include
510217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
511251843Sbapt	    -p ${LIB32TMP}/usr >/dev/null
512217309Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
513217309Snwhitehorn	    -p ${LIB32TMP}/usr/include >/dev/null
514217309Snwhitehorn	mkdir -p ${WORLDTMP}
515217309Snwhitehorn	ln -sf ${.CURDIR}/sys ${WORLDTMP}
516217309Snwhitehorn.for _t in obj includes
517217309Snwhitehorn	cd ${.CURDIR}/include; ${LIB32WMAKE} DIRPRFX=include/ ${_t}
518251843Sbapt	cd ${.CURDIR}/lib; ${LIB32WMAKE} DIRPRFX=lib/ ${_t}
519251843Sbapt.if ${MK_CDDL} != "no"
520217309Snwhitehorn	cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} DIRPRFX=cddl/lib/ ${_t}
521217309Snwhitehorn.endif
522217309Snwhitehorn	cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} DIRPRFX=gnu/lib/ ${_t}
523251843Sbapt.if ${MK_CRYPT} != "no"
524217309Snwhitehorn	cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} DIRPRFX=secure/lib/ ${_t}
525217309Snwhitehorn.endif
526217309Snwhitehorn.if ${MK_KERBEROS} != "no"
527217309Snwhitehorn	cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} DIRPRFX=kerberos5/lib ${_t}
528217309Snwhitehorn.endif
529217309Snwhitehorn.endfor
530217309Snwhitehorn.for _dir in usr.bin/lex/lib
531217309Snwhitehorn	cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} DIRPRFX=${_dir}/ obj
532217309Snwhitehorn.endfor
533217309Snwhitehorn.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
534217309Snwhitehorn	cd ${.CURDIR}/${_dir}; \
535217309Snwhitehorn	    WORLDTMP=${WORLDTMP} \
536217309Snwhitehorn	    MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
537217309Snwhitehorn	    MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \
538217309Snwhitehorn	    DIRPRFX=${_dir}/ -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS -DNO_CTF \
539217309Snwhitehorn	    -DEARLY_BUILD build-tools
540217309Snwhitehorn.endfor
541217309Snwhitehorn	cd ${.CURDIR}; \
542217309Snwhitehorn	    ${LIB32WMAKE} -f Makefile.inc1 libraries
543217309Snwhitehorn.for _t in obj depend all
544217309Snwhitehorn	cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} \
545217309Snwhitehorn	    DIRPRFX=libexec/rtld-elf/ ${_t}
546217309Snwhitehorn	cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} \
547217309Snwhitehorn	    DIRPRFX=usr.bin/ldd ${_t}
548217309Snwhitehorn.endfor
549217309Snwhitehorn
550217309Snwhitehorndistribute32 install32:
551217309Snwhitehorn	cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
552217309Snwhitehorn.if ${MK_CDDL} != "no"
553217309Snwhitehorn	cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
554217309Snwhitehorn.endif
555217309Snwhitehorn	cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
556217309Snwhitehorn.if ${MK_CRYPT} != "no"
557217309Snwhitehorn	cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
558217309Snwhitehorn.endif
559217309Snwhitehorn.if ${MK_KERBEROS} != "no"
560217309Snwhitehorn	cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
561217309Snwhitehorn.endif
562217309Snwhitehorn	cd ${.CURDIR}/libexec/rtld-elf; \
563217309Snwhitehorn	    PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
564217309Snwhitehorn	cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//}
565217309Snwhitehorn.endif
566217309Snwhitehorn
567217309SnwhitehornWMAKE_TGTS=
568217309Snwhitehorn.if !defined(SUBDIR_OVERRIDE)
569217309SnwhitehornWMAKE_TGTS+=	_worldtmp _legacy _bootstrap-tools
570217309Snwhitehorn.endif
571217309SnwhitehornWMAKE_TGTS+=	_cleanobj _obj _build-tools
572217309Snwhitehorn.if !defined(SUBDIR_OVERRIDE)
573217309SnwhitehornWMAKE_TGTS+=	_cross-tools
574217309Snwhitehorn.endif
575217309SnwhitehornWMAKE_TGTS+=	_includes _libraries _depend everything
576217309Snwhitehorn.if defined(LIB32TMP) && ${MK_LIB32} != "no"
577251843SbaptWMAKE_TGTS+=	build32
578217309Snwhitehorn.endif
579251843Sbapt
580251843Sbaptbuildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
581251843Sbapt.ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
582251843Sbapt
583251843Sbaptbuildworld_prologue:
584251843Sbapt	@echo "--------------------------------------------------------------"
585251843Sbapt	@echo ">>> World build started on `LC_ALL=C date`"
586251843Sbapt	@echo "--------------------------------------------------------------"
587251843Sbapt
588217309Snwhitehornbuildworld_epilogue:
589217309Snwhitehorn	@echo
590217309Snwhitehorn	@echo "--------------------------------------------------------------"
591217309Snwhitehorn	@echo ">>> World build completed on `LC_ALL=C date`"
592217309Snwhitehorn	@echo "--------------------------------------------------------------"
593217309Snwhitehorn
594217309Snwhitehorn#
595217309Snwhitehorn# We need to have this as a target because the indirection between Makefile
596217309Snwhitehorn# and Makefile.inc1 causes the correct PATH to be used, rather than a
597217309Snwhitehorn# modification of the current environment's PATH.  In addition, we need
598217309Snwhitehorn# to quote multiword values.
599217309Snwhitehorn#
600217309Snwhitehornbuildenvvars:
601217309Snwhitehorn	@echo ${WMAKEENV:Q}
602217309Snwhitehorn
603217309Snwhitehornbuildenv:
604217309Snwhitehorn	@echo Entering world for ${TARGET_ARCH}:${TARGET}
605217309Snwhitehorn	@cd ${.CURDIR} && env ${WMAKEENV} ${BUILDENV_SHELL} || true
606217309Snwhitehorn
607217309SnwhitehornTOOLCHAIN_TGTS=	${WMAKE_TGTS:N_depend:Neverything:Nbuild32}
608217309Snwhitehorntoolchain: ${TOOLCHAIN_TGTS}
609217309Snwhitehornkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
610217309Snwhitehorn
611217309Snwhitehorn#
612217309Snwhitehorn# installcheck
613217309Snwhitehorn#
614217309Snwhitehorn# Checks to be sure system is ready for installworld/installkernel.
615217309Snwhitehorn#
616217309Snwhitehorninstallcheck:
617217309Snwhitehorn
618217309Snwhitehorn#
619217309Snwhitehorn# Require DESTDIR to be set if installing for a different architecture or
620217309Snwhitehorn# using the user/group database in the source tree.
621217309Snwhitehorn#
622217309Snwhitehorn.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} || \
623217309Snwhitehorn    defined(DB_FROM_SRC)
624217309Snwhitehorn.if !make(distributeworld)
625217309Snwhitehorninstallcheck: installcheck_DESTDIR
626217309Snwhitehorninstallcheck_DESTDIR:
627217309Snwhitehorn.if !defined(DESTDIR) || empty(DESTDIR)
628217309Snwhitehorn	@echo "ERROR: Please set DESTDIR!"; \
629217309Snwhitehorn	false
630217309Snwhitehorn.endif
631217309Snwhitehorn.endif
632217309Snwhitehorn.endif
633217309Snwhitehorn
634220749Snwhitehorn.if !defined(DB_FROM_SRC)
635220749Snwhitehorn#
636217309Snwhitehorn# Check for missing UIDs/GIDs.
637217309Snwhitehorn#
638217309SnwhitehornCHECK_UIDS=	auditdistd
639217309SnwhitehornCHECK_GIDS=	audit
640217309Snwhitehorn.if ${MK_SENDMAIL} != "no"
641217309SnwhitehornCHECK_UIDS+=	smmsp
642217309SnwhitehornCHECK_GIDS+=	smmsp
643217309Snwhitehorn.endif
644217309Snwhitehorn.if ${MK_PF} != "no"
645217309SnwhitehornCHECK_UIDS+=	proxy
646217309SnwhitehornCHECK_GIDS+=	proxy authpf
647217309Snwhitehorn.endif
648217309Snwhitehorninstallcheck: installcheck_UGID
649217309Snwhitehorninstallcheck_UGID:
650217309Snwhitehorn.for uid in ${CHECK_UIDS}
651217309Snwhitehorn	@if ! `id -u ${uid} >/dev/null 2>&1`; then \
652217309Snwhitehorn		echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
653217309Snwhitehorn		false; \
654217309Snwhitehorn	fi
655217309Snwhitehorn.endfor
656217309Snwhitehorn.for gid in ${CHECK_GIDS}
657217309Snwhitehorn	@if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
658217309Snwhitehorn		echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
659217309Snwhitehorn		false; \
660217309Snwhitehorn	fi
661217309Snwhitehorn.endfor
662217309Snwhitehorn.endif
663217309Snwhitehorn
664217309Snwhitehorn#
665217309Snwhitehorn# Required install tools to be saved in a scratch dir for safety.
666217309Snwhitehorn#
667217309Snwhitehorn.if ${MK_INFO} != "no"
668217309Snwhitehorn_install-info=	install-info
669217309Snwhitehorn.endif
670217309Snwhitehorn.if ${MK_ZONEINFO} != "no"
671217309Snwhitehorn_zoneinfo=	zic tzsetup
672217309Snwhitehorn.endif
673217309Snwhitehorn
674217309SnwhitehornITOOLS=	[ awk cap_mkdb cat chflags chmod chown \
675217309Snwhitehorn	date echo egrep find grep id install ${_install-info} \
676217309Snwhitehorn	ln lockf make mkdir mtree ${_nmtree_itools} mv pwd_mkdb \
677217309Snwhitehorn	rm sed sh sysctl test true uname wc ${_zoneinfo}
678217309Snwhitehorn
679217309Snwhitehorn#
680217309Snwhitehorn# distributeworld
681217309Snwhitehorn#
682217309Snwhitehorn# Distributes everything compiled by a `buildworld'.
683217309Snwhitehorn#
684217309Snwhitehorn# installworld
685217309Snwhitehorn#
686217309Snwhitehorn# Installs everything compiled by a 'buildworld'.
687217309Snwhitehorn#
688217309Snwhitehorn
689217309Snwhitehorn# Non-base distributions produced by the base system
690217309SnwhitehornEXTRA_DISTRIBUTIONS=	doc
691217309Snwhitehorn.if ${MK_GAMES} != "no"
692217309SnwhitehornEXTRA_DISTRIBUTIONS+=	games
693217309Snwhitehorn.endif
694217309Snwhitehorn.if defined(LIB32TMP) && ${MK_LIB32} != "no"
695217309SnwhitehornEXTRA_DISTRIBUTIONS+=	lib32
696217309Snwhitehorn.endif
697217309Snwhitehorn
698217309SnwhitehornMTREE_MAGIC?=	mtree 2.0
699217309Snwhitehorn
700217309Snwhitehorndistributeworld installworld: installcheck
701217309Snwhitehorn	mkdir -p ${INSTALLTMP}
702217309Snwhitehorn	progs=$$(for prog in ${ITOOLS}; do \
703217309Snwhitehorn		if progpath=`which $$prog`; then \
704217309Snwhitehorn			echo $$progpath; \
705217309Snwhitehorn		else \
706217309Snwhitehorn			echo "Required tool $$prog not found in PATH." >&2; \
707217309Snwhitehorn			exit 1; \
708217309Snwhitehorn		fi; \
709220749Snwhitehorn	    done); \
710220749Snwhitehorn	libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \
711217309Snwhitehorn	    while read line; do \
712217309Snwhitehorn		set -- $$line; \
713217309Snwhitehorn		if [ "$$2 $$3" != "not found" ]; then \
714217309Snwhitehorn			echo $$2; \
715217309Snwhitehorn		else \
716217309Snwhitehorn			echo "Required library $$1 not found." >&2; \
717220749Snwhitehorn			exit 1; \
718220749Snwhitehorn		fi; \
719220749Snwhitehorn	    done); \
720220749Snwhitehorn	cp $$libs $$progs ${INSTALLTMP}
721217309Snwhitehorn	cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale
722217309Snwhitehorn.if defined(NO_ROOT)
723217309Snwhitehorn	echo "#${MTREE_MAGIC}" > ${METALOG}
724217309Snwhitehorn.endif
725220749Snwhitehorn.if make(distributeworld)
726220749Snwhitehorn.for dist in ${EXTRA_DISTRIBUTIONS}
727220749Snwhitehorn	-mkdir ${DESTDIR}/${DISTDIR}/${dist}
728220749Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \
729220749Snwhitehorn	    -p ${DESTDIR}/${DISTDIR}/${dist} >/dev/null
730220749Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
731220749Snwhitehorn	    -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
732220749Snwhitehorn	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
733220749Snwhitehorn	    -p ${DESTDIR}/${DISTDIR}/${dist}/usr/include >/dev/null
734220749Snwhitehorn.if defined(NO_ROOT)
735220749Snwhitehorn	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \
736217309Snwhitehorn	    sed -e 's#^\./#./${dist}/#' >> ${METALOG}
737217309Snwhitehorn	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.usr.dist | \
738217309Snwhitehorn	    sed -e 's#^\./#./${dist}/usr/#' >> ${METALOG}
739217309Snwhitehorn	${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.include.dist | \
740217309Snwhitehorn	    sed -e 's#^\./#./${dist}/usr/include/#' >> ${METALOG}
741217309Snwhitehorn.endif
742217309Snwhitehorn.endfor
743217309Snwhitehorn	-mkdir ${DESTDIR}/${DISTDIR}/base
744217309Snwhitehorn	cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
745217309Snwhitehorn	    METALOG=${METALOG} ${IMAKE_INSTALL} ${IMAKE_MTREE} \
746217309Snwhitehorn	    DISTBASE=/base DESTDIR=${DESTDIR}/${DISTDIR}/base \
747217309Snwhitehorn	    LOCAL_MTREE=${LOCAL_MTREE} distrib-dirs
748217309Snwhitehorn.endif
749217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \
750217309Snwhitehorn	    ${IMAKEENV} rm -rf ${INSTALLTMP}
751217309Snwhitehorn.if make(distributeworld)
752217309Snwhitehorn.for dist in ${EXTRA_DISTRIBUTIONS}
753217309Snwhitehorn	find ${DESTDIR}/${DISTDIR}/${dist} -empty -delete
754217309Snwhitehorn.endfor
755217309Snwhitehorn.if defined(NO_ROOT)
756217309Snwhitehorn.for dist in base ${EXTRA_DISTRIBUTIONS}
757217309Snwhitehorn	@# For each file that exists in this dist, print the corresponding
758217309Snwhitehorn	@# line from the METALOG.  This relies on the fact that
759217309Snwhitehorn	@# a line containing only the filename will sort immediatly before
760217309Snwhitehorn	@# the relevant mtree line.
761217309Snwhitehorn	cd ${DESTDIR}/${DISTDIR}; \
762217309Snwhitehorn	find ./${dist} | sort -u ${METALOG} - | \
763217309Snwhitehorn	awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \
764217309Snwhitehorn	${DESTDIR}/${DISTDIR}/${dist}.meta
765217309Snwhitehorn.endfor
766217309Snwhitehorn.endif
767217309Snwhitehorn.endif
768217309Snwhitehorn
769217309Snwhitehornpackageworld:
770217309Snwhitehorn.for dist in base ${EXTRA_DISTRIBUTIONS}
771217309Snwhitehorn.if defined(NO_ROOT)
772217309Snwhitehorn	${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \
773217309Snwhitehorn	    tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz \
774217309Snwhitehorn	    @${DESTDIR}/${DISTDIR}/${dist}.meta
775217309Snwhitehorn.else
776217309Snwhitehorn	${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \
777217309Snwhitehorn	    tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz .
778217309Snwhitehorn.endif
779217309Snwhitehorn.endfor
780217309Snwhitehorn
781217309Snwhitehorn#
782217309Snwhitehorn# reinstall
783217309Snwhitehorn#
784217309Snwhitehorn# If you have a build server, you can NFS mount the source and obj directories
785217309Snwhitehorn# and do a 'make reinstall' on the *client* to install new binaries from the
786217309Snwhitehorn# most recent server build.
787217309Snwhitehorn#
788217309Snwhitehornreinstall:
789217309Snwhitehorn	@echo "--------------------------------------------------------------"
790217309Snwhitehorn	@echo ">>> Making hierarchy"
791217309Snwhitehorn	@echo "--------------------------------------------------------------"
792217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 \
793217309Snwhitehorn	    LOCAL_MTREE=${LOCAL_MTREE} hierarchy
794217309Snwhitehorn	@echo
795217309Snwhitehorn	@echo "--------------------------------------------------------------"
796217309Snwhitehorn	@echo ">>> Installing everything"
797217309Snwhitehorn	@echo "--------------------------------------------------------------"
798217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
799217309Snwhitehorn.if defined(LIB32TMP) && ${MK_LIB32} != "no"
800217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
801217309Snwhitehorn.endif
802217309Snwhitehorn
803217309Snwhitehornredistribute:
804217309Snwhitehorn	@echo "--------------------------------------------------------------"
805217309Snwhitehorn	@echo ">>> Distributing everything"
806217309Snwhitehorn	@echo "--------------------------------------------------------------"
807217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
808217309Snwhitehorn.if defined(LIB32TMP) && ${MK_LIB32} != "no"
809217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 \
810217309Snwhitehorn	    DISTRIBUTION=lib32
811217309Snwhitehorn.endif
812217309Snwhitehorn
813217309Snwhitehorndistrib-dirs distribution:
814217309Snwhitehorn	cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
815217309Snwhitehorn	    ${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
816217309Snwhitehorn
817217309Snwhitehorn#
818217309Snwhitehorn# buildkernel and installkernel
819217309Snwhitehorn#
820217309Snwhitehorn# Which kernels to build and/or install is specified by setting
821217309Snwhitehorn# KERNCONF. If not defined a GENERIC kernel is built/installed.
822217309Snwhitehorn# Only the existing (depending TARGET) config files are used
823217309Snwhitehorn# for building kernels and only the first of these is designated
824217309Snwhitehorn# as the one being installed.
825217309Snwhitehorn#
826217309Snwhitehorn# Note that we have to use TARGET instead of TARGET_ARCH when
827217309Snwhitehorn# we're in kernel-land. Since only TARGET_ARCH is (expected) to
828217309Snwhitehorn# be set to cross-build, we have to make sure TARGET is set
829217309Snwhitehorn# properly.
830217309Snwhitehorn
831217309Snwhitehorn.if defined(KERNFAST)
832217309SnwhitehornNO_KERNELCLEAN=	t
833217309SnwhitehornNO_KERNELCONFIG=	t
834217309SnwhitehornNO_KERNELDEPEND=	t
835217309SnwhitehornNO_KERNELOBJ=		t
836217309Snwhitehorn# Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah
837217309Snwhitehorn.if !defined(KERNCONF) && ${KERNFAST} != "1"
838217309SnwhitehornKERNCONF=${KERNFAST}
839217309Snwhitehorn.endif
840217309Snwhitehorn.endif
841217309Snwhitehorn.if !defined(KERNCONF) && defined(KERNEL)
842217309SnwhitehornKERNCONF=	${KERNEL}
843217309SnwhitehornKERNWARN=
844217309Snwhitehorn.else
845217309Snwhitehorn.if ${TARGET_ARCH} == "powerpc64"
846217309SnwhitehornKERNCONF?=	GENERIC64
847251843Sbapt.else
848251843SbaptKERNCONF?=	GENERIC
849251843Sbapt.endif
850251843Sbapt.endif
851251843SbaptINSTKERNNAME?=	kernel
852251843Sbapt
853251843SbaptKERNSRCDIR?=	${.CURDIR}/sys
854251843SbaptKRNLCONFDIR=	${KERNSRCDIR}/${TARGET}/conf
855251843SbaptKRNLOBJDIR=	${OBJTREE}${KERNSRCDIR}
856251843SbaptKERNCONFDIR?=	${KRNLCONFDIR}
857251843Sbapt
858251843SbaptBUILDKERNELS=
859251843SbaptINSTALLKERNEL=
860251843Sbapt.for _kernel in ${KERNCONF}
861251843Sbapt.if exists(${KERNCONFDIR}/${_kernel})
862251843SbaptBUILDKERNELS+=	${_kernel}
863251843Sbapt.if empty(INSTALLKERNEL)
864251843SbaptINSTALLKERNEL= ${_kernel}
865251843Sbapt.endif
866251843Sbapt.endif
867251843Sbapt.endfor
868251843Sbapt
869251843Sbapt#
870251843Sbapt# buildkernel
871251843Sbapt#
872251843Sbapt# Builds all kernels defined by BUILDKERNELS.
873251843Sbapt#
874251843Sbaptbuildkernel:
875251843Sbapt.if empty(BUILDKERNELS)
876251843Sbapt	@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
877251843Sbapt	false
878251843Sbapt.endif
879251843Sbapt.if defined(KERNWARN)
880251843Sbapt	@echo "--------------------------------------------------------------"
881251843Sbapt	@echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
882251843Sbapt	@echo "--------------------------------------------------------------"
883251843Sbapt	@sleep 3
884251843Sbapt.endif
885251843Sbapt	@echo
886251843Sbapt.for _kernel in ${BUILDKERNELS}
887251843Sbapt	@echo "--------------------------------------------------------------"
888251843Sbapt	@echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
889251843Sbapt	@echo "--------------------------------------------------------------"
890251843Sbapt	@echo "===> ${_kernel}"
891251843Sbapt	mkdir -p ${KRNLOBJDIR}
892251843Sbapt.if !defined(NO_KERNELCONFIG)
893251843Sbapt	@echo
894251843Sbapt	@echo "--------------------------------------------------------------"
895251843Sbapt	@echo ">>> stage 1: configuring the kernel"
896251843Sbapt	@echo "--------------------------------------------------------------"
897251843Sbapt	cd ${KRNLCONFDIR}; \
898251843Sbapt		PATH=${TMPPATH} \
899251843Sbapt		    config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
900251843Sbapt			${KERNCONFDIR}/${_kernel}
901251843Sbapt.endif
902251843Sbapt.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
903251843Sbapt	@echo
904251843Sbapt	@echo "--------------------------------------------------------------"
905251843Sbapt	@echo ">>> stage 2.1: cleaning up the object tree"
906251843Sbapt	@echo "--------------------------------------------------------------"
907251843Sbapt	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
908251843Sbapt.endif
909251843Sbapt.if !defined(NO_KERNELOBJ)
910251843Sbapt	@echo
911251843Sbapt	@echo "--------------------------------------------------------------"
912251843Sbapt	@echo ">>> stage 2.2: rebuilding the object tree"
913251843Sbapt	@echo "--------------------------------------------------------------"
914251843Sbapt	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
915251843Sbapt.endif
916217309Snwhitehorn	@echo
917217309Snwhitehorn	@echo "--------------------------------------------------------------"
918217309Snwhitehorn	@echo ">>> stage 2.3: build tools"
919217309Snwhitehorn	@echo "--------------------------------------------------------------"
920217309Snwhitehorn	cd ${KRNLOBJDIR}/${_kernel}; \
921217309Snwhitehorn	    PATH=${BPATH}:${PATH} \
922217309Snwhitehorn	    MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
923217309Snwhitehorn	    ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF -DEARLY_BUILD \
924217309Snwhitehorn	    -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
925217309Snwhitehorn# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
926217309Snwhitehorn.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
927217309Snwhitehorn.for target in obj depend all
928217309Snwhitehorn	cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
929217309Snwhitehorn	    PATH=${BPATH}:${PATH} \
930217309Snwhitehorn	    MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
931217309Snwhitehorn	    ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF -DEARLY_BUILD ${target}
932217309Snwhitehorn.endfor
933217309Snwhitehorn.endif
934217309Snwhitehorn.if !defined(NO_KERNELDEPEND)
935217309Snwhitehorn	@echo
936217309Snwhitehorn	@echo "--------------------------------------------------------------"
937217309Snwhitehorn	@echo ">>> stage 3.1: making dependencies"
938217309Snwhitehorn	@echo "--------------------------------------------------------------"
939217309Snwhitehorn	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
940217309Snwhitehorn.endif
941217309Snwhitehorn	@echo
942217309Snwhitehorn	@echo "--------------------------------------------------------------"
943217309Snwhitehorn	@echo ">>> stage 3.2: building everything"
944217309Snwhitehorn	@echo "--------------------------------------------------------------"
945217309Snwhitehorn	cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
946217309Snwhitehorn	@echo "--------------------------------------------------------------"
947217309Snwhitehorn	@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
948217309Snwhitehorn	@echo "--------------------------------------------------------------"
949217309Snwhitehorn.endfor
950217309Snwhitehorn
951217309Snwhitehorn#
952217309Snwhitehorn# installkernel, etc.
953217309Snwhitehorn#
954217309Snwhitehorn# Install the kernel defined by INSTALLKERNEL
955217309Snwhitehorn#
956217309Snwhitehorninstallkernel installkernel.debug \
957217309Snwhitehornreinstallkernel reinstallkernel.debug: installcheck
958217309Snwhitehorn.if empty(INSTALLKERNEL)
959217309Snwhitehorn	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
960217309Snwhitehorn	false
961217309Snwhitehorn.endif
962217309Snwhitehorn	@echo "--------------------------------------------------------------"
963217309Snwhitehorn	@echo ">>> Installing kernel ${INSTALLKERNEL}"
964217309Snwhitehorn	@echo "--------------------------------------------------------------"
965217309Snwhitehorn	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
966217309Snwhitehorn	    ${CROSSENV} PATH=${TMPPATH} \
967217309Snwhitehorn	    ${MAKE} ${IMAKE_INSTALL} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
968217309Snwhitehorn
969217309Snwhitehorndistributekernel distributekernel.debug:
970217309Snwhitehorn.if empty(INSTALLKERNEL)
971217309Snwhitehorn	@echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
972217309Snwhitehorn	false
973217309Snwhitehorn.endif
974217309Snwhitehorn	cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
975217309Snwhitehorn	    ${CROSSENV} PATH=${TMPPATH} ${MAKE} KERNEL=${INSTKERNNAME} \
976217309Snwhitehorn	    DESTDIR=${DESTDIR}/${DISTDIR}/kernel \
977217309Snwhitehorn	    ${.TARGET:S/distributekernel/install/}
978217309Snwhitehorn.for _kernel in ${BUILDKERNELS:S/${INSTALLKERNEL}//}
979217309Snwhitehorn	cd ${KRNLOBJDIR}/${_kernel}; \
980217309Snwhitehorn	    ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
981217309Snwhitehorn	    KERNEL=${INSTKERNNAME}.${_kernel} \
982217309Snwhitehorn	    DESTDIR=${DESTDIR}/${DISTDIR}/kernel.${_kernel} \
983217309Snwhitehorn	    ${.TARGET:S/distributekernel/install/}
984217309Snwhitehorn.endfor
985217309Snwhitehorn
986217309Snwhitehornpackagekernel:
987217309Snwhitehorn	cd ${DESTDIR}/${DISTDIR}/kernel; \
988217309Snwhitehorn	    tar cvJf ${DESTDIR}/${DISTDIR}/kernel.txz .
989217309Snwhitehorn.for _kernel in ${BUILDKERNELS:S/${INSTALLKERNEL}//}
990217309Snwhitehorn	cd ${DESTDIR}/${DISTDIR}/kernel.${_kernel}; \
991217309Snwhitehorn	    tar cvJf ${DESTDIR}/${DISTDIR}/kernel.${_kernel}.txz .
992217309Snwhitehorn.endfor
993217309Snwhitehorn
994217309Snwhitehorn#
995217309Snwhitehorn# doxygen
996217309Snwhitehorn#
997217309Snwhitehorn# Build the API documentation with doxygen
998217309Snwhitehorn#
999217309Snwhitehorndoxygen:
1000217309Snwhitehorn	@if [ ! -x `/usr/bin/which doxygen` ]; then \
1001217309Snwhitehorn		echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
1002217309Snwhitehorn		exit 1; \
1003224014Snwhitehorn	fi
1004220749Snwhitehorn	cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
1005220749Snwhitehorn
1006220749Snwhitehorn#
1007220749Snwhitehorn# update
1008220749Snwhitehorn#
1009220749Snwhitehorn# Update the source tree(s), by running cvsup/cvs/svn to update to the
1010220749Snwhitehorn# latest copy.
1011220749Snwhitehorn#
1012220749Snwhitehornupdate:
1013220749Snwhitehorn.if defined(SUP_UPDATE)
1014220749Snwhitehorn	@echo "--------------------------------------------------------------"
1015220749Snwhitehorn	@echo ">>> Running ${SUP}"
1016220749Snwhitehorn	@echo "--------------------------------------------------------------"
1017220749Snwhitehorn	@echo "!! WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!"
1018220749Snwhitehorn	@echo "!! Update methods with ${SUP} are deprecated."
1019220749Snwhitehorn	@echo "!! Please see http://www.freebsd.org/handbook/svn.html"
1020220749Snwhitehorn	@echo "!! and convert your update method to SVN_UPDATE or"
1021220749Snwhitehorn	@echo "!! freebsd-update(8)."
1022220749Snwhitehorn	@echo "!! WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!"
1023224014Snwhitehorn	@sleep 5
1024220749Snwhitehorn.if defined(SUPFILE)
1025217309Snwhitehorn	@${SUP} ${SUPFLAGS} ${SUPFILE}
1026217309Snwhitehorn.endif
1027220749Snwhitehorn.if defined(SUPFILE1)
1028220749Snwhitehorn	@${SUP} ${SUPFLAGS} ${SUPFILE1}
1029220749Snwhitehorn.endif
1030220749Snwhitehorn.if defined(SUPFILE2)
1031220749Snwhitehorn	@${SUP} ${SUPFLAGS} ${SUPFILE2}
1032220749Snwhitehorn.endif
1033220749Snwhitehorn.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
1034220749Snwhitehorn	@${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
1035220749Snwhitehorn.endif
1036220749Snwhitehorn.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
1037220749Snwhitehorn	@${SUP} ${SUPFLAGS} ${DOCSUPFILE}
1038220749Snwhitehorn.endif
1039220749Snwhitehorn.endif
1040220749Snwhitehorn.if defined(CVS_UPDATE)
1041220749Snwhitehorn	@cd ${.CURDIR} ; \
1042220749Snwhitehorn	if [ -d CVS ] ; then \
1043220749Snwhitehorn		echo "--------------------------------------------------------------" ; \
1044220749Snwhitehorn		echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} ; \
1045220749Snwhitehorn		echo "--------------------------------------------------------------" ; \
1046220749Snwhitehorn		echo "!! WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!" ; \
1047220749Snwhitehorn		echo "!! Update methods with CVS are deprecated." ; \
1048220749Snwhitehorn		echo "!! Please see http://www.freebsd.org/handbook/svn.html" ; \
1049220749Snwhitehorn		echo "!! and convert your update method to SVN_UPDATE or" ; \
1050220749Snwhitehorn		echo "!! freebsd-update(8)." ; \
1051220749Snwhitehorn		echo "!! WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!" ; \
1052220749Snwhitehorn		sleep 5 ; \
1053220749Snwhitehorn		echo ${CVS} -R -q update ${CVSFLAGS} ; \
1054217309Snwhitehorn		${CVS} -R -q update ${CVSFLAGS} ; \
1055217309Snwhitehorn	fi
1056217309Snwhitehorn.endif
1057217309Snwhitehorn.if defined(SVN_UPDATE)
1058217309Snwhitehorn	@cd ${.CURDIR} ; \
1059217309Snwhitehorn	if [ -d .svn ] ; then \
1060217309Snwhitehorn		echo "--------------------------------------------------------------" ; \
1061217309Snwhitehorn		echo ">>> Updating ${.CURDIR} using Subversion" ; \
1062217309Snwhitehorn		echo "--------------------------------------------------------------" ; \
1063217309Snwhitehorn		echo ${SVN} update ${SVNFLAGS} ; \
1064217309Snwhitehorn		${SVN} update ${SVNFLAGS} ; \
1065217309Snwhitehorn	fi
1066217309Snwhitehorn.endif
1067217309Snwhitehorn
1068217309Snwhitehorn#
1069217309Snwhitehorn# ------------------------------------------------------------------------
1070217309Snwhitehorn#
1071217309Snwhitehorn# From here onwards are utility targets used by the 'make world' and
1072217309Snwhitehorn# related targets.  If your 'world' breaks, you may like to try to fix
1073217309Snwhitehorn# the problem and manually run the following targets to attempt to
1074217309Snwhitehorn# complete the build.  Beware, this is *not* guaranteed to work, you
1075217309Snwhitehorn# need to have a pretty good grip on the current state of the system
1076217309Snwhitehorn# to attempt to manually finish it.  If in doubt, 'make world' again.
1077217309Snwhitehorn#
1078217309Snwhitehorn
1079217309Snwhitehorn#
1080217309Snwhitehorn# legacy: Build compatibility shims for the next three targets
1081217309Snwhitehorn#
1082217309Snwhitehornlegacy:
1083217309Snwhitehorn.if ${BOOTSTRAPPING} < 700055 && ${BOOTSTRAPPING} != 0
1084217309Snwhitehorn	@echo "ERROR: Source upgrades from versions prior to 7.0 not supported."; \
1085217309Snwhitehorn	false
1086217309Snwhitehorn.endif
1087217309Snwhitehorn.for _tool in tools/build
1088217309Snwhitehorn	${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
1089217309Snwhitehorn	    cd ${.CURDIR}/${_tool}; \
1090217309Snwhitehorn	    ${MAKE} DIRPRFX=${_tool}/ obj; \
1091217309Snwhitehorn	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
1092217309Snwhitehorn	    ${MAKE} DIRPRFX=${_tool}/ depend; \
1093217309Snwhitehorn	    ${MAKE} DIRPRFX=${_tool}/ all; \
1094217309Snwhitehorn	    ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
1095217309Snwhitehorn.endfor
1096217309Snwhitehorn
1097217309Snwhitehorn#
1098217309Snwhitehorn# bootstrap-tools: Build tools needed for compatibility
1099217309Snwhitehorn#
1100217309Snwhitehorn.if ${MK_GAMES} != "no"
1101217309Snwhitehorn_strfile=	games/fortune/strfile
1102217309Snwhitehorn.endif
1103217309Snwhitehorn
1104217309Snwhitehorn.if ${MK_CXX} != "no"
1105217309Snwhitehorn_gperf=		gnu/usr.bin/gperf
1106217309Snwhitehorn.endif
1107217309Snwhitehorn
1108217309Snwhitehorn.if ${MK_GROFF} != "no"
1109217309Snwhitehorn_groff=		gnu/usr.bin/groff
1110217309Snwhitehorn.endif
1111220749Snwhitehorn
1112220749Snwhitehorn.if ${BOOTSTRAPPING} < 800022
1113217309Snwhitehorn_ar=		usr.bin/ar
1114217309Snwhitehorn.endif
1115217309Snwhitehorn
1116217309Snwhitehorn.if ${BOOTSTRAPPING} < 800013
1117217309Snwhitehorn_mklocale=	usr.bin/mklocale
1118217309Snwhitehorn.endif
1119217309Snwhitehorn
1120217309Snwhitehorn.if ${BOOTSTRAPPING} < 900002
1121217309Snwhitehorn_sed=		usr.bin/sed
1122217309Snwhitehorn.endif
1123217309Snwhitehorn
1124217309Snwhitehorn.if ${BOOTSTRAPPING} < 900006
1125217309Snwhitehorn_lex=		usr.bin/lex
1126217309Snwhitehorn.endif
1127217309Snwhitehorn
1128217309Snwhitehorn.if ${BOOTSTRAPPING} < 1000013
1129217309Snwhitehorn_yacc=		usr.bin/yacc
1130251843Sbapt.endif
1131217309Snwhitehorn
1132217309Snwhitehorn.if ${BOOTSTRAPPING} < 1000026
1133217309Snwhitehorn_nmtree=	lib/libnetbsd \
1134217309Snwhitehorn		usr.sbin/nmtree
1135251843Sbapt.else
1136217309Snwhitehorn_nmtree_itools=	nmtree
1137251843Sbapt.endif
1138217309Snwhitehorn
1139217309Snwhitehorn.if ${BOOTSTRAPPING} >= 900040 && ${BOOTSTRAPPING} < 900041
1140217309Snwhitehorn_awk=		usr.bin/awk
1141217309Snwhitehorn.endif
1142217309Snwhitehorn
1143217309Snwhitehorn.if ${MK_BSNMP} != "no" && !exists(/usr/sbin/gensnmptree)
1144217309Snwhitehorn_gensnmptree=	usr.sbin/bsnmpd/gensnmptree
1145217309Snwhitehorn.endif
1146217309Snwhitehorn
1147217309Snwhitehorn.if ${MK_CLANG} != "no"
1148217309Snwhitehorn_clang_tblgen= \
1149217309Snwhitehorn	lib/clang/libllvmsupport \
1150217309Snwhitehorn	lib/clang/libllvmtablegen \
1151217309Snwhitehorn	usr.bin/clang/tblgen \
1152217309Snwhitehorn	usr.bin/clang/clang-tblgen
1153217309Snwhitehorn.endif
1154217309Snwhitehorn
1155217309Snwhitehorn# dtrace tools are required for older bootstrap env and cross-build
1156217309Snwhitehorn.if ${MK_CDDL} != "no" && \
1157217309Snwhitehorn    ((${BOOTSTRAPPING} < 800038 && \
1158217309Snwhitehorn          !(${BOOTSTRAPPING} >= 700112 && ${BOOTSTRAPPING} < 799999)) \
1159217309Snwhitehorn      || (${MACHINE} != ${TARGET} || ${MACHINE_ARCH} != ${TARGET_ARCH}))
1160217309Snwhitehorn_dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf lib/libelf \
1161217309Snwhitehorn    lib/libdwarf cddl/usr.bin/ctfconvert cddl/usr.bin/ctfmerge
1162217309Snwhitehorn.endif
1163217309Snwhitehorn
1164217309Snwhitehorn# Default to building the BSDL DTC, but build the GPL one if users explicitly
1165220749Snwhitehorn# request it.
1166217309Snwhitehorn_dtc= usr.bin/dtc
1167217309Snwhitehorn.if ${MK_GPL_DTC} != "no"
1168217309Snwhitehorn_dtc= gnu/usr.bin/dtc
1169217309Snwhitehorn.endif
1170217309Snwhitehorn
1171217309Snwhitehorn.if ${MK_KERBEROS} != "no"
1172217309Snwhitehorn_kerberos5_bootstrap_tools= \
1173217309Snwhitehorn	kerberos5/tools/make-roken \
1174217309Snwhitehorn	kerberos5/lib/libroken \
1175217309Snwhitehorn	kerberos5/lib/libvers \
1176217309Snwhitehorn	kerberos5/tools/asn1_compile \
1177217309Snwhitehorn	kerberos5/tools/slc
1178217309Snwhitehorn.endif
1179251843Sbapt
1180251843Sbapt#	Please document (add comment) why something is in 'bootstrap-tools'.
1181251843Sbapt#	Try to bound the building of the bootstrap-tool to just the
1182251843Sbapt#	FreeBSD versions that need the tool built at this stage of the build.
1183251843Sbaptbootstrap-tools:
1184251843Sbapt.for _tool in \
1185251843Sbapt    ${_clang_tblgen} \
1186251843Sbapt    ${_kerberos5_bootstrap_tools} \
1187251843Sbapt    ${_dtrace_tools} \
1188251843Sbapt    ${_strfile} \
1189251843Sbapt    ${_gperf} \
1190251843Sbapt    ${_groff} \
1191251843Sbapt    ${_ar} \
1192251843Sbapt    ${_dtc} \
1193251843Sbapt    ${_awk} \
1194251843Sbapt    usr.bin/lorder \
1195251843Sbapt    usr.bin/makewhatis \
1196251843Sbapt    ${_mklocale} \
1197251843Sbapt    usr.bin/rpcgen \
1198251843Sbapt    ${_sed} \
1199251843Sbapt    ${_yacc} \
1200251843Sbapt    ${_lex} \
1201251843Sbapt    usr.bin/xinstall \
1202251843Sbapt    ${_gensnmptree} \
1203251843Sbapt    usr.sbin/config \
1204251843Sbapt    ${_nmtree}
1205251843Sbapt	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
1206251843Sbapt		cd ${.CURDIR}/${_tool}; \
1207251843Sbapt		${MAKE} DIRPRFX=${_tool}/ obj; \
1208251843Sbapt		${MAKE} DIRPRFX=${_tool}/ depend; \
1209251843Sbapt		${MAKE} DIRPRFX=${_tool}/ all; \
1210251843Sbapt		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
1211251843Sbapt.endfor
1212251843Sbapt
1213251843Sbapt#
1214251843Sbapt# build-tools: Build special purpose build tools
1215251843Sbapt#
1216217309Snwhitehorn.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
1217217309Snwhitehorn_aicasm= sys/modules/aic7xxx/aicasm
1218217309Snwhitehorn.endif
1219217309Snwhitehorn
1220217309Snwhitehorn.if !defined(NO_SHARE)
1221217309Snwhitehorn_share=	share/syscons/scrnmaps
1222217309Snwhitehorn.endif
1223217309Snwhitehorn
1224217309Snwhitehorn.if ${MK_GCC} != "no"
1225217309Snwhitehorn_gcc_tools= gnu/usr.bin/cc/cc_tools
1226217309Snwhitehorn.endif
1227217309Snwhitehorn
1228217309Snwhitehorn.if ${MK_RESCUE} != "no"
1229217309Snwhitehorn_rescue= rescue/rescue
1230217309Snwhitehorn.endif
1231217309Snwhitehorn
1232217309Snwhitehornbuild-tools:
1233217309Snwhitehorn.for _tool in \
1234217309Snwhitehorn    bin/csh \
1235217309Snwhitehorn    bin/sh \
1236217309Snwhitehorn    ${_rescue} \
1237217309Snwhitehorn    ${LOCAL_TOOL_DIRS} \
1238217309Snwhitehorn    lib/ncurses/ncurses \
1239217309Snwhitehorn    lib/ncurses/ncursesw \
1240217309Snwhitehorn    ${_share} \
1241217309Snwhitehorn    ${_aicasm} \
1242217309Snwhitehorn    usr.bin/awk \
1243217309Snwhitehorn    lib/libmagic \
1244217309Snwhitehorn    usr.bin/mkesdb_static \
1245217309Snwhitehorn    usr.bin/mkcsmapper_static
1246217309Snwhitehorn	${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
1247217309Snwhitehorn		cd ${.CURDIR}/${_tool}; \
1248217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ obj; \
1249217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ build-tools
1250217309Snwhitehorn.endfor
1251217309Snwhitehorn.for _tool in \
1252217309Snwhitehorn    ${_gcc_tools}
1253217309Snwhitehorn	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
1254217309Snwhitehorn		cd ${.CURDIR}/${_tool}; \
1255217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ obj; \
1256217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ depend; \
1257217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ all
1258217309Snwhitehorn.endfor
1259217309Snwhitehorn
1260217309Snwhitehorn#
1261217309Snwhitehorn# cross-tools: Build cross-building tools
1262224014Snwhitehorn#
1263224014Snwhitehorn.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${BOOTSTRAPPING} < 800035
1264224014Snwhitehorn.if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
1265224014Snwhitehorn_btxld=		usr.sbin/btxld
1266224014Snwhitehorn.endif
1267224014Snwhitehorn.endif
1268224014Snwhitehorn.if ${TARGET_ARCH} != ${MACHINE_ARCH}
1269224014Snwhitehorn.if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
1270224014Snwhitehorn_crunchide=	usr.sbin/crunch/crunchide
1271217309Snwhitehorn.endif
1272217309Snwhitehorn.if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR)
1273217309Snwhitehorn_kgzip=		usr.sbin/kgzip
1274217309Snwhitehorn.endif
1275217309Snwhitehorn.endif
1276217309Snwhitehorn
1277217309Snwhitehorn.if ${MK_BINUTILS} != "no"
1278217309Snwhitehorn_binutils=	gnu/usr.bin/binutils
1279251843Sbapt.endif
1280217309Snwhitehorn
1281217309Snwhitehorn.if ${MK_CLANG} != "no" && (${MK_CLANG_IS_CC} != "no" || ${CC:T:Mclang} == "clang")
1282217309Snwhitehorn_clang=		usr.bin/clang
1283217309Snwhitehorn_clang_libs=	lib/clang
1284217309Snwhitehorn.endif
1285217309Snwhitehorn
1286217309Snwhitehorn.if ${MK_GCC} != "no" && (${MK_CLANG_IS_CC} == "no" || ${TARGET} == "pc98")
1287217309Snwhitehorn_cc=		gnu/usr.bin/cc
1288217309Snwhitehorn.endif
1289217309Snwhitehorn
1290217309Snwhitehorncross-tools:
1291217309Snwhitehorn.for _tool in \
1292217309Snwhitehorn    ${_clang_libs} \
1293217309Snwhitehorn    ${_clang} \
1294217309Snwhitehorn    ${_binutils} \
1295217309Snwhitehorn    ${_cc} \
1296217309Snwhitehorn    usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
1297217309Snwhitehorn    ${_btxld} \
1298217309Snwhitehorn    ${_crunchide} \
1299217309Snwhitehorn    ${_kgzip}
1300220749Snwhitehorn	${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
1301220749Snwhitehorn		cd ${.CURDIR}/${_tool}; \
1302217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ obj; \
1303217309Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ depend; \
1304224014Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ all; \
1305224014Snwhitehorn		${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
1306224014Snwhitehorn.endfor
1307217309Snwhitehorn
1308217309Snwhitehorn#
1309217309Snwhitehorn# hierarchy - ensure that all the needed directories are present
1310217309Snwhitehorn#
1311217309Snwhitehornhierarchy hier:
1312217309Snwhitehorn.if defined(NO_ROOT)
1313217309Snwhitehorn	cd ${.CURDIR}/etc; ${MAKE} LOCAL_MTREE=${LOCAL_MTREE} \
1314217309Snwhitehorn	    -DNO_ROOT METALOG=${METALOG} distrib-dirs
1315217309Snwhitehorn.else
1316217309Snwhitehorn	cd ${.CURDIR}/etc; ${MAKE} LOCAL_MTREE=${LOCAL_MTREE} distrib-dirs
1317217309Snwhitehorn.endif
1318217309Snwhitehorn
1319220749Snwhitehorn#
1320217309Snwhitehorn# libraries - build all libraries, and install them under ${DESTDIR}.
1321217309Snwhitehorn#
1322217309Snwhitehorn# The list of libraries with dependents (${_prebuild_libs}) and their
1323217309Snwhitehorn# interdependencies (__L) are built automatically by the
1324217309Snwhitehorn# ${.CURDIR}/tools/make_libdeps.sh script.
1325217309Snwhitehorn#
1326217309Snwhitehornlibraries:
1327217309Snwhitehorn	cd ${.CURDIR}; \
1328217309Snwhitehorn	    ${MAKE} -f Makefile.inc1 _prereq_libs; \
1329217309Snwhitehorn	    ${MAKE} -f Makefile.inc1 _startup_libs; \
1330217309Snwhitehorn	    ${MAKE} -f Makefile.inc1 _prebuild_libs; \
1331217309Snwhitehorn	    ${MAKE} -f Makefile.inc1 _generic_libs;
1332217309Snwhitehorn
1333217309Snwhitehorn#
1334217309Snwhitehorn# static libgcc.a prerequisite for shared libc
1335217309Snwhitehorn#
1336217309Snwhitehorn_prereq_libs= gnu/lib/libssp/libssp_nonshared gnu/lib/libgcc lib/libcompiler_rt
1337217309Snwhitehorn
1338217309Snwhitehorn# These dependencies are not automatically generated:
1339217309Snwhitehorn#
1340217309Snwhitehorn# gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before
1341217309Snwhitehorn# all shared libraries for ELF.
1342217309Snwhitehorn#
1343251843Sbapt_startup_libs=	gnu/lib/csu
1344217309Snwhitehorn.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
1345251843Sbapt_startup_libs+=	lib/csu/${MACHINE_ARCH}-elf
1346251843Sbapt.elif exists(${.CURDIR}/lib/csu/${MACHINE_ARCH})
1347251843Sbapt_startup_libs+=	lib/csu/${MACHINE_ARCH}
1348251843Sbapt.else
1349251843Sbapt_startup_libs+=	lib/csu/${MACHINE_CPUARCH}
1350251843Sbapt.endif
1351251843Sbapt_startup_libs+=	gnu/lib/libgcc
1352251843Sbapt_startup_libs+=	lib/libcompiler_rt
1353251843Sbapt_startup_libs+=	lib/libc
1354251843Sbapt.if ${MK_LIBCPLUSPLUS} != "no"
1355251843Sbapt_startup_libs+=	lib/libcxxrt
1356251843Sbapt.endif
1357251843Sbapt
1358251843Sbaptgnu/lib/libgcc__L: lib/libc__L
1359251843Sbapt.if ${MK_LIBCPLUSPLUS} != "no"
1360251843Sbaptlib/libcxxrt__L: gnu/lib/libgcc__L
1361251843Sbapt.endif
1362251843Sbapt
1363251843Sbapt_prebuild_libs=	${_kerberos5_lib_libasn1} \
1364251843Sbapt		${_kerberos5_lib_libhdb} \
1365251843Sbapt		${_kerberos5_lib_libheimbase} \
1366251843Sbapt		${_kerberos5_lib_libheimntlm} \
1367251843Sbapt		${_kerberos5_lib_libheimsqlite} \
1368251843Sbapt		${_kerberos5_lib_libheimipcc} \
1369251843Sbapt		${_kerberos5_lib_libhx509} ${_kerberos5_lib_libkrb5} \
1370217309Snwhitehorn		${_kerberos5_lib_libroken} \
1371217309Snwhitehorn		${_kerberos5_lib_libwind} \
1372217309Snwhitehorn		${_lib_atf_libatf_c} \
1373217309Snwhitehorn		lib/libbz2 ${_libcom_err} lib/libcrypt \
1374217309Snwhitehorn		lib/libexpat \
1375217309Snwhitehorn		${_lib_libgssapi} ${_lib_libipx} \
1376217309Snwhitehorn		lib/libkiconv lib/libkvm lib/liblzma lib/libmd \
1377217309Snwhitehorn		lib/ncurses/ncurses lib/ncurses/ncursesw \
1378217309Snwhitehorn		lib/libopie lib/libpam ${_lib_libthr} \
1379251843Sbapt		lib/libradius lib/libsbuf lib/libtacplus \
1380251843Sbapt		${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \
1381217309Snwhitehorn		lib/libutil ${_lib_libypclnt} lib/libz lib/msun \
1382251843Sbapt		${_secure_lib_libcrypto} ${_secure_lib_libssh} \
1383217309Snwhitehorn		${_secure_lib_libssl}
1384217309Snwhitehorn
1385217309Snwhitehorn.if ${MK_ATF} != "no"
1386217309Snwhitehorn_lib_atf_libatf_c=	lib/atf/libatf-c
1387217309Snwhitehorn.endif
1388217309Snwhitehorn
1389217309Snwhitehorn.if ${MK_LIBTHR} != "no"
1390217309Snwhitehorn_lib_libthr=	lib/libthr
1391217309Snwhitehorn.endif
1392217309Snwhitehorn
1393217309Snwhitehorn.if ${MK_OFED} != "no"
1394217309Snwhitehorn_ofed_lib=	contrib/ofed/usr.lib/
1395217309Snwhitehorn.endif
1396217309Snwhitehorn
1397217309Snwhitehorn_generic_libs=	${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib ${_ofed_lib}
1398217309Snwhitehorn.for _DIR in ${LOCAL_LIB_DIRS}
1399217309Snwhitehorn.if exists(${.CURDIR}/${_DIR}/Makefile)
1400217309Snwhitehorn_generic_libs+= ${_DIR}
1401217309Snwhitehorn.endif
1402224014Snwhitehorn.endfor
1403224014Snwhitehorn
1404224014Snwhitehornlib/libopie__L lib/libtacplus__L: lib/libmd__L
1405217309Snwhitehorn
1406217309Snwhitehorn.if ${MK_CDDL} != "no"
1407217309Snwhitehorn_cddl_lib_libumem= cddl/lib/libumem
1408217309Snwhitehorn_cddl_lib_libnvpair= cddl/lib/libnvpair
1409217309Snwhitehorn_cddl_lib= cddl/lib
1410217309Snwhitehorn.endif
1411217309Snwhitehorn
1412217309Snwhitehorn.if ${MK_CRYPT} != "no"
1413217309Snwhitehorn.if ${MK_OPENSSL} != "no"
1414217309Snwhitehorn_secure_lib_libcrypto= secure/lib/libcrypto
1415217309Snwhitehorn_secure_lib_libssl= secure/lib/libssl
1416217309Snwhitehornlib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L
1417217309Snwhitehorn.if ${MK_OPENSSH} != "no"
1418217309Snwhitehorn_secure_lib_libssh= secure/lib/libssh
1419217309Snwhitehornsecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
1420217309Snwhitehorn.if ${MK_KERBEROS_SUPPORT} != "no"
1421217309Snwhitehornsecure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \
1422217309Snwhitehorn    kerberos5/lib/libhx509__L kerberos5/lib/libasn1__L lib/libcom_err__L \
1423217309Snwhitehorn    lib/libmd__L kerberos5/lib/libroken__L
1424217309Snwhitehorn.endif
1425217309Snwhitehorn.endif
1426217309Snwhitehorn.endif
1427217309Snwhitehorn_secure_lib=	secure/lib
1428217309Snwhitehorn.endif
1429217309Snwhitehorn
1430217309Snwhitehorn.if ${MK_KERBEROS} != "no"
1431217309Snwhitehornkerberos5/lib/libasn1__L: lib/libcom_err__L kerberos5/lib/libroken__L
1432217309Snwhitehornkerberos5/lib/libhdb__L: kerberos5/lib/libasn1__L lib/libcom_err__L \
1433217309Snwhitehorn    kerberos5/lib/libkrb5__L kerberos5/lib/libroken__L \
1434217309Snwhitehorn    kerberos5/lib/libwind__L kerberos5/lib/libheimsqlite__L 
1435217309Snwhitehornkerberos5/lib/libheimntlm__L: secure/lib/libcrypto__L kerberos5/lib/libkrb5__L \
1436217309Snwhitehorn    kerberos5/lib/libroken__L lib/libcom_err__L
1437217309Snwhitehornkerberos5/lib/libhx509__L: kerberos5/lib/libasn1__L lib/libcom_err__L \
1438217309Snwhitehorn    secure/lib/libcrypto__L kerberos5/lib/libroken__L kerberos5/lib/libwind__L
1439217309Snwhitehornkerberos5/lib/libkrb5__L: kerberos5/lib/libasn1__L lib/libcom_err__L \
1440251843Sbapt    lib/libcrypt__L secure/lib/libcrypto__L kerberos5/lib/libhx509__L \
1441217309Snwhitehorn    kerberos5/lib/libroken__L kerberos5/lib/libwind__L \
1442251843Sbapt    kerberos5/lib/libheimbase__L kerberos5/lib/libheimipcc__L
1443251843Sbaptkerberos5/lib/libroken__L: lib/libcrypt__L
1444251843Sbaptkerberos5/lib/libwind__L: kerberos5/lib/libroken__L lib/libcom_err__L
1445251843Sbaptkerberos5/lib/libheimbase__L: lib/libthr__L
1446217309Snwhitehornkerberos5/lib/libheimipcc__L: kerberos5/lib/libroken__L kerberos5/lib/libheimbase__L lib/libthr__L
1447217309Snwhitehornkerberos5/lib/libheimsqlite__L: lib/libthr__L
1448217309Snwhitehorn.endif
1449217309Snwhitehorn
1450217309Snwhitehorn.if ${MK_GSSAPI} != "no"
1451217309Snwhitehorn_lib_libgssapi=	lib/libgssapi
1452217309Snwhitehorn.endif
1453217309Snwhitehorn
1454217309Snwhitehorn.if ${MK_IPX} != "no"
1455224014Snwhitehorn_lib_libipx=	lib/libipx
1456224014Snwhitehorn.endif
1457224014Snwhitehorn
1458224014Snwhitehorn.if ${MK_KERBEROS} != "no"
1459224014Snwhitehorn_kerberos5_lib=	kerberos5/lib
1460224014Snwhitehorn_kerberos5_lib_libasn1= kerberos5/lib/libasn1
1461217309Snwhitehorn_kerberos5_lib_libhdb= kerberos5/lib/libhdb
1462217309Snwhitehorn_kerberos5_lib_libheimbase= kerberos5/lib/libheimbase
1463217309Snwhitehorn_kerberos5_lib_libkrb5= kerberos5/lib/libkrb5
1464217309Snwhitehorn_kerberos5_lib_libhx509= kerberos5/lib/libhx509
1465217309Snwhitehorn_kerberos5_lib_libroken= kerberos5/lib/libroken
1466217309Snwhitehorn_kerberos5_lib_libheimntlm= kerberos5/lib/libheimntlm
1467255852Sdteske_kerberos5_lib_libheimsqlite= kerberos5/lib/libheimsqlite
1468255852Sdteske_kerberos5_lib_libheimipcc= kerberos5/lib/libheimipcc
1469255852Sdteske_kerberos5_lib_libwind= kerberos5/lib/libwind
1470217309Snwhitehorn_libcom_err= lib/libcom_err
1471217309Snwhitehorn.endif
1472217309Snwhitehorn
1473217309Snwhitehorn.if ${MK_NIS} != "no"
1474217309Snwhitehorn_lib_libypclnt=	lib/libypclnt
1475217309Snwhitehorn.endif
1476217309Snwhitehorn
1477217309Snwhitehorn.if ${MK_OPENSSL} == "no"
1478217309Snwhitehornlib/libradius__L: lib/libmd__L
1479251843Sbapt.endif
1480251843Sbapt
1481251843Sbapt.for _lib in ${_prereq_libs}
1482217309Snwhitehorn${_lib}__PL: .PHONY
1483217309Snwhitehorn.if exists(${.CURDIR}/${_lib})
1484217309Snwhitehorn	${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \
1485217309Snwhitehorn		cd ${.CURDIR}/${_lib}; \
1486217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ obj; \
1487217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ depend; \
1488217309Snwhitehorn		${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all; \
1489217309Snwhitehorn		${MAKE} -DNO_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install
1490217309Snwhitehorn.endif
1491217309Snwhitehorn.endfor
1492217309Snwhitehorn
1493217309Snwhitehorn.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
1494217309Snwhitehorn${_lib}__L: .PHONY
1495217309Snwhitehorn.if exists(${.CURDIR}/${_lib})
1496217309Snwhitehorn	${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \
1497217309Snwhitehorn		cd ${.CURDIR}/${_lib}; \
1498217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ obj; \
1499217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ depend; \
1500217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ all; \
1501217309Snwhitehorn		${MAKE} DIRPRFX=${_lib}/ install
1502217309Snwhitehorn.endif
1503217309Snwhitehorn.endfor
1504217309Snwhitehorn
1505224014Snwhitehorn# libpam is special: we need to build static PAM modules before
1506217309Snwhitehorn# static PAM library, and dynamic PAM library before dynamic PAM
1507217309Snwhitehorn# modules.
1508217309Snwhitehornlib/libpam__L: .PHONY
1509217309Snwhitehorn	${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \
1510217309Snwhitehorn		cd ${.CURDIR}/lib/libpam; \
1511217309Snwhitehorn		${MAKE} DIRPRFX=lib/libpam/ obj; \
1512217309Snwhitehorn		${MAKE} DIRPRFX=lib/libpam/ depend; \
1513217309Snwhitehorn		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
1514217309Snwhitehorn		${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1515217309Snwhitehorn
1516217309Snwhitehorn_prereq_libs: ${_prereq_libs:S/$/__PL/}
1517217309Snwhitehorn_startup_libs: ${_startup_libs:S/$/__L/}
1518217309Snwhitehorn_prebuild_libs: ${_prebuild_libs:S/$/__L/}
1519217309Snwhitehorn_generic_libs: ${_generic_libs:S/$/__L/}
1520217309Snwhitehorn
1521217309Snwhitehorn.for __target in all clean cleandepend cleandir depend includes obj
1522217309Snwhitehorn.for entry in ${SUBDIR}
1523217309Snwhitehorn${entry}.${__target}__D: .PHONY
1524217309Snwhitehorn	${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1525217309Snwhitehorn		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
1526217309Snwhitehorn		edir=${entry}.${MACHINE_ARCH}; \
1527217309Snwhitehorn		cd ${.CURDIR}/$${edir}; \
1528217309Snwhitehorn	else \
1529217309Snwhitehorn		${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1530217309Snwhitehorn		edir=${entry}; \
1531217309Snwhitehorn		cd ${.CURDIR}/$${edir}; \
1532217309Snwhitehorn	fi; \
1533217309Snwhitehorn	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1534217309Snwhitehorn.endfor
1535251843Sbaptpar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
1536217309Snwhitehorn.endfor
1537217309Snwhitehorn
1538217309Snwhitehorn.include <bsd.subdir.mk>
1539217309Snwhitehorn
1540217309Snwhitehorn.if make(check-old) || make(check-old-dirs) || \
1541217309Snwhitehorn    make(check-old-files) || make(check-old-libs) || \
1542217309Snwhitehorn    make(delete-old) || make(delete-old-dirs) || \
1543217309Snwhitehorn    make(delete-old-files) || make(delete-old-libs)
1544217309Snwhitehorn
1545217309Snwhitehorn#
1546217309Snwhitehorn# check for / delete old files section
1547217309Snwhitehorn#
1548217309Snwhitehorn
1549217309Snwhitehorn.include "ObsoleteFiles.inc"
1550217309Snwhitehorn
1551217309SnwhitehornOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \
1552217309Snwhitehornelse you can not start such an application. Consult UPDATING for more \
1553217309Snwhitehorninformation regarding how to cope with the removal/revision bump of a \
1554217309Snwhitehornspecific library."
1555217309Snwhitehorn
1556217309Snwhitehorn.if !defined(BATCH_DELETE_OLD_FILES)
1557217309SnwhitehornRM_I=-i
1558217309Snwhitehorn.else
1559217309SnwhitehornRM_I=-v
1560217309Snwhitehorn.endif
1561217309Snwhitehorn
1562217309Snwhitehorndelete-old-files:
1563217309Snwhitehorn	@echo ">>> Removing old files (only deletes safe to delete libs)"
1564217309Snwhitehorn# Ask for every old file if the user really wants to remove it.
1565217309Snwhitehorn# It's annoying, but better safe than sorry.
1566217309Snwhitehorn# NB: We cannot pass the list of OLD_FILES as a parameter because the
1567217309Snwhitehorn# argument list will get too long. Using .for/.endfor make "loops" will make
1568217309Snwhitehorn# the Makefile parser segfault.
1569217309Snwhitehorn	@exec 3<&0; \
1570217309Snwhitehorn	${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1571217309Snwhitehorn	    -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \
1572217309Snwhitehorn	while read file; do \
1573217309Snwhitehorn		if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1574217309Snwhitehorn			chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
1575217309Snwhitehorn			rm ${RM_I} "${DESTDIR}/$${file}" <&3; \
1576217309Snwhitehorn		fi; \
1577217309Snwhitehorn	done
1578217309Snwhitehorn# Remove catpages without corresponding manpages.
1579217309Snwhitehorn	@exec 3<&0; \
1580217309Snwhitehorn	find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1581217309Snwhitehorn	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1582217309Snwhitehorn	while read catpage; do \
1583217309Snwhitehorn		read manpage; \
1584217309Snwhitehorn		if [ ! -e "$${manpage}" ]; then \
1585217309Snwhitehorn			rm ${RM_I} $${catpage} <&3; \
1586220749Snwhitehorn	        fi; \
1587220749Snwhitehorn	done
1588224014Snwhitehorn	@echo ">>> Old files removed"
1589220749Snwhitehorn
1590251843Sbaptcheck-old-files:
1591251843Sbapt	@echo ">>> Checking for old files"
1592251843Sbapt	@${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1593251843Sbapt	    -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \
1594251843Sbapt	while read file; do \
1595251843Sbapt		if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1596217309Snwhitehorn		 	echo "${DESTDIR}/$${file}"; \
1597217309Snwhitehorn		fi; \
1598217309Snwhitehorn	done
1599251843Sbapt# Check for catpages without corresponding manpages.
1600217309Snwhitehorn	@find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1601217309Snwhitehorn	sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1602217309Snwhitehorn	while read catpage; do \
1603217309Snwhitehorn		read manpage; \
1604217309Snwhitehorn		if [ ! -e "$${manpage}" ]; then \
1605217309Snwhitehorn			echo $${catpage}; \
1606217309Snwhitehorn	        fi; \
1607217309Snwhitehorn	done
1608217309Snwhitehorn
1609217309Snwhitehorndelete-old-libs:
1610217309Snwhitehorn	@echo ">>> Removing old libraries"
1611217309Snwhitehorn	@echo "${OLD_LIBS_MESSAGE}" | fmt
1612217309Snwhitehorn	@exec 3<&0; \
1613217309Snwhitehorn	${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1614217309Snwhitehorn	    -V OLD_LIBS | xargs -n1 | \
1615217309Snwhitehorn	while read file; do \
1616217309Snwhitehorn		if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1617217309Snwhitehorn			chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
1618217309Snwhitehorn			rm ${RM_I} "${DESTDIR}/$${file}" <&3; \
1619217309Snwhitehorn		fi; \
1620217309Snwhitehorn	done
1621217309Snwhitehorn	@echo ">>> Old libraries removed"
1622217309Snwhitehorn
1623217309Snwhitehorncheck-old-libs:
1624251843Sbapt	@echo ">>> Checking for old libraries"
1625217309Snwhitehorn	@${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1626217309Snwhitehorn	    -V OLD_LIBS | xargs -n1 | \
1627251843Sbapt	while read file; do \
1628251843Sbapt		if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1629251843Sbapt			echo "${DESTDIR}/$${file}"; \
1630251843Sbapt		fi; \
1631251843Sbapt	done
1632251843Sbapt
1633251843Sbaptdelete-old-dirs:
1634251843Sbapt	@echo ">>> Removing old directories"
1635217309Snwhitehorn	@${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1636217309Snwhitehorn	    -V OLD_DIRS | xargs -n1 | \
1637217309Snwhitehorn	while read dir; do \
1638217309Snwhitehorn		if [ -d "${DESTDIR}/$${dir}" ]; then \
1639217309Snwhitehorn			rmdir -v "${DESTDIR}/$${dir}" || true; \
1640217309Snwhitehorn		elif [ -L "${DESTDIR}/$${dir}" ]; then \
1641217309Snwhitehorn			echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \
1642217309Snwhitehorn		fi; \
1643217309Snwhitehorn	done
1644217309Snwhitehorn	@echo ">>> Old directories removed"
1645217309Snwhitehorn
1646217309Snwhitehorncheck-old-dirs:
1647217309Snwhitehorn	@echo ">>> Checking for old directories"
1648217309Snwhitehorn	@${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1649217309Snwhitehorn	    -V OLD_DIRS | xargs -n1 | \
1650217309Snwhitehorn	while read dir; do \
1651217309Snwhitehorn		if [ -d "${DESTDIR}/$${dir}" ]; then \
1652217309Snwhitehorn			echo "${DESTDIR}/$${dir}"; \
1653251843Sbapt		elif [ -L "${DESTDIR}/$${dir}" ]; then \
1654251843Sbapt			echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \
1655217309Snwhitehorn		fi; \
1656217309Snwhitehorn	done
1657217309Snwhitehorn
1658217309Snwhitehorndelete-old: delete-old-files delete-old-dirs
1659217309Snwhitehorn	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1660217309Snwhitehorn
1661251843Sbaptcheck-old: check-old-files check-old-libs check-old-dirs
1662251843Sbapt	@echo "To remove old files and directories run '${MAKE} delete-old'."
1663217309Snwhitehorn	@echo "To remove old libraries run '${MAKE} delete-old-libs'."
1664217309Snwhitehorn
1665217309Snwhitehorn.endif
1666217309Snwhitehorn
1667217309Snwhitehorn#
1668217309Snwhitehorn# showconfig - show build configuration.
1669217309Snwhitehorn#
1670217309Snwhitehornshowconfig:
1671217309Snwhitehorn	@${MAKE} -n -f bsd.own.mk -V dummy -dg1 2>&1 | grep ^MK_ | sort
1672220749Snwhitehorn
1673220749Snwhitehorn.if !empty(KRNLOBJDIR) && !empty(KERNCONF)
1674217309SnwhitehornDTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/
1675251843Sbapt
1676217309Snwhitehorn.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE)
1677251843Sbapt.if exists(${KERNCONFDIR}/${KERNCONF})
1678251843SbaptFDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \
1679251843Sbapt	${KERNCONFDIR}/${KERNCONF} ; echo
1680251843Sbapt.endif
1681251843Sbapt.endif
1682217309Snwhitehorn
1683217309Snwhitehorn.endif
1684217309Snwhitehorn
1685217309Snwhitehorn.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH})
1686217309SnwhitehornDTBOUTPUTPATH= ${.CURDIR}
1687251843Sbapt.endif
1688251843Sbapt
1689217309Snwhitehorn#
1690217309Snwhitehorn# Build 'standalone' Device Tree Blob
1691217309Snwhitehorn#
1692217309Snwhitehornbuilddtb:
1693217309Snwhitehorn	@if [ "${FDT_DTS_FILE}" = "" ]; then \
1694217309Snwhitehorn		echo "ERROR: FDT_DTS_FILE must be specified!"; \
1695217309Snwhitehorn		exit 1; \
1696217309Snwhitehorn	fi;	\
1697217309Snwhitehorn	if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \
1698217309Snwhitehorn		echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \
1699217309Snwhitehorn			exist!"; \
1700217309Snwhitehorn		exit 1;	\
1701217309Snwhitehorn	fi;	\
1702217309Snwhitehorn	if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then	\
1703217309Snwhitehorn		echo "WARNING: DTB will be placed in the current working \
1704217309Snwhitehorn			directory"; \
1705217309Snwhitehorn	fi
1706217309Snwhitehorn	@PATH=${TMPPATH} \
1707217309Snwhitehorn	dtc -O dtb -o \
1708217309Snwhitehorn	    ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \
1709217309Snwhitehorn	    -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE}
1710217309Snwhitehorn
1711217309Snwhitehorn###############
1712217309Snwhitehorn
1713217309Snwhitehorn.if defined(XDEV) && defined(XDEV_ARCH)
1714220749Snwhitehorn
1715220749Snwhitehorn.if ${XDEV} == ${MACHINE} && ${XDEV_ARCH} == ${MACHINE_ARCH}
1716217309SnwhitehornXDEV_CPUTYPE?=${CPUTYPE}
1717217309Snwhitehorn.else
1718217309SnwhitehornXDEV_CPUTYPE?=${TARGET_CPUTYPE}
1719217309Snwhitehorn.endif
1720217309Snwhitehorn
1721217309SnwhitehornNOFUN=-DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \
1722217309Snwhitehorn	-DWITHOUT_MAN -DWITHOUT_NLS -DNO_PROFILE \
1723217309Snwhitehorn	-DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS \
1724217309Snwhitehorn	TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \
1725217309Snwhitehorn	CPUTYPE=${XDEV_CPUTYPE}
1726217309Snwhitehorn
1727217309SnwhitehornXDDIR=${XDEV_ARCH}-freebsd
1728217309SnwhitehornXDTP=/usr/${XDDIR}
1729217309SnwhitehornCDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR}
1730224014SnwhitehornCDENV= ${CDBENV} \
1731224014Snwhitehorn	_SHLIBDIRPREFIX=${XDTP} \
1732224014Snwhitehorn	TOOLS_PREFIX=${XDTP}
1733217309SnwhitehornCD2ENV=${CDENV} \
1734217309Snwhitehorn	MACHINE=${XDEV} MACHINE_ARCH=${XDEV_ARCH}
1735217309Snwhitehorn
1736217309SnwhitehornCDTMP=	${MAKEOBJDIRPREFIX}/${XDEV}/${.CURDIR}/tmp
1737217309SnwhitehornCDMAKE=${CDENV} ${MAKE} ${NOFUN}
1738217309SnwhitehornCD2MAKE=${CD2ENV} PATH=${CDTMP}/usr/bin:${XDTP}/usr/bin:${PATH} ${MAKE} ${NOFUN}
1739217309SnwhitehornXDDESTDIR=${DESTDIR}${XDTP}
1740217309Snwhitehorn.if !defined(OSREL)
1741217309SnwhitehornOSREL!= uname -r | sed -e 's/[-(].*//'
1742217309Snwhitehorn.endif
1743217309Snwhitehorn
1744217309Snwhitehorn.ORDER: xdev-build xdev-install
1745217309Snwhitehornxdev: xdev-build xdev-install
1746217309Snwhitehorn
1747217309Snwhitehorn.ORDER: _xb-build-tools _xb-cross-tools
1748217309Snwhitehornxdev-build: _xb-build-tools _xb-cross-tools
1749217309Snwhitehorn
1750217309Snwhitehorn_xb-build-tools:
1751217309Snwhitehorn	${_+_}@cd ${.CURDIR}; \
1752217309Snwhitehorn	${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools
1753217309Snwhitehorn
1754217309Snwhitehorn_xb-cross-tools:
1755217309Snwhitehorn.for _tool in \
1756224014Snwhitehorn    gnu/usr.bin/binutils \
1757224014Snwhitehorn    gnu/usr.bin/cc \
1758224014Snwhitehorn    usr.bin/ar
1759224014Snwhitehorn	${_+_}@${ECHODIR} "===> xdev ${_tool} (obj,depend,all)"; \
1760224014Snwhitehorn	cd ${.CURDIR}/${_tool}; \
1761224014Snwhitehorn	${CDMAKE} DIRPRFX=${_tool}/ obj; \
1762224014Snwhitehorn	${CDMAKE} DIRPRFX=${_tool}/ depend; \
1763224014Snwhitehorn	${CDMAKE} DIRPRFX=${_tool}/ all
1764251843Sbapt.endfor
1765251843Sbapt
1766251843Sbapt_xi-mtree:
1767251843Sbapt	${_+_}@${ECHODIR} "mtree populating ${XDDESTDIR}"
1768251843Sbapt	mkdir -p ${XDDESTDIR}
1769251843Sbapt	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \
1770251843Sbapt	    -p ${XDDESTDIR} >/dev/null
1771251843Sbapt	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
1772251843Sbapt	    -p ${XDDESTDIR}/usr >/dev/null
1773251843Sbapt	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
1774251843Sbapt	    -p ${XDDESTDIR}/usr/include >/dev/null
1775251843Sbapt
1776251843Sbapt.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links
1777251843Sbaptxdev-install: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries _xi-links
1778251843Sbapt
1779217309Snwhitehorn_xi-cross-tools:
1780217309Snwhitehorn	@echo "_xi-cross-tools"
1781217309Snwhitehorn.for _tool in \
1782217309Snwhitehorn    gnu/usr.bin/binutils \
1783251843Sbapt    gnu/usr.bin/cc \
1784251843Sbapt    usr.bin/ar
1785251843Sbapt	${_+_}@${ECHODIR} "===> xdev ${_tool} (install)"; \
1786217309Snwhitehorn	cd ${.CURDIR}/${_tool}; \
1787217309Snwhitehorn	${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR}
1788217309Snwhitehorn.endfor
1789217309Snwhitehorn
1790217309Snwhitehorn_xi-includes:
1791217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 par-includes \
1792217309Snwhitehorn		DESTDIR=${XDDESTDIR}
1793217309Snwhitehorn
1794217309Snwhitehorn_xi-libraries:
1795217309Snwhitehorn	${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \
1796217309Snwhitehorn		DESTDIR=${XDDESTDIR}
1797224014Snwhitehorn
1798224014Snwhitehorn_xi-links:
1799224014Snwhitehorn	${_+_}cd ${XDDESTDIR}/usr/bin; \
1800224014Snwhitehorn		for i in *; do \
1801224014Snwhitehorn			ln -sf ../../${XDTP}/usr/bin/$$i \
1802217309Snwhitehorn			    ../../../../usr/bin/${XDDIR}-$$i; \
1803217309Snwhitehorn			ln -sf ../../${XDTP}/usr/bin/$$i \
1804217309Snwhitehorn			    ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \
1805217309Snwhitehorn		done
1806217309Snwhitehorn.else
1807217309Snwhitehornxdev xdev-buil xdev-install:
1808217309Snwhitehorn	@echo "*** Error: Both XDEV and XDEV_ARCH must be defined for \"${.TARGET}\" target"
1809217309Snwhitehorn.endif
1810224014Snwhitehorn