Makefile.inc1 revision 46314
118579Sfenner#
2100787Sfenner#	$Id: Makefile.inc1,v 1.74 1999/04/20 05:33:07 jkoshy Exp $
318579Sfenner#
418579Sfenner# Make command line options:
518579Sfenner#	-DCLOBBER will remove /usr/include
618579Sfenner#	-DMAKE_KERBEROS4 to build KerberosIV
718579Sfenner#	-DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
818579Sfenner#	-DNOCLEAN do not clean at all
918579Sfenner#	-DNOTOOLS do not rebuild any tools first
1018579Sfenner#	-DNOCRYPT will prevent building of crypt versions
1118579Sfenner#	-DNOPROFILE do not build profiled libraries
1218579Sfenner#	-DNOSECURE do not go into secure subdir
1318579Sfenner#	-DNOGAMES do not go into games subdir
1418579Sfenner#	-DNOSHARE do not go into share subdir
1518579Sfenner#	-DNOINFO do not make or install info files
1618579Sfenner#	-DNOLIBC_R do not build libc_r.
1718579Sfenner#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
1818579Sfenner
1918579Sfenner#
2018579Sfenner# The intended user-driven targets are:
2118579Sfenner# buildworld  - rebuild *everything*, including glue to help do upgrades
2218579Sfenner# installworld- install everything built by "buildworld"
2318579Sfenner# update      - convenient way to update your source tree (eg: sup/cvs)
24100787Sfenner# most        - build user commands, no libraries or include files
2518579Sfenner# installmost - install user commands, no libraries or include files
2658835Sshin#
2718579Sfenner# Standard targets (not defined here) are documented in the makefiles in
28100787Sfenner# /usr/share/mk.  These include:
2918579Sfenner#		obj depend all install clean cleandepend cleanobj
3058835Sshin
3158835Sshin# Put initial settings here.
3258835SshinSUBDIR=
3318579Sfenner
3418579Sfenner# We must do share/info early so that installation of info `dir'
3518579Sfenner# entries works correctly.  Do it first since it is less likely to
3618579Sfenner# grow dependencies on include and lib than vice versa.
3718579Sfenner.if exists(${.CURDIR}/share/info)
3818579SfennerSUBDIR+= share/info
3918579Sfenner.endif
4018579Sfenner
4118579Sfenner# We must do include and lib early so that the perl *.ph generation
4218579Sfenner# works correctly as it uses the header files installed by this.
4377816Sru.if exists(${.CURDIR}/include)
4477816SruSUBDIR+= include
4577816Sru.endif
4618579Sfenner.if exists(${.CURDIR}/lib)
4718579SfennerSUBDIR+= lib
4818579Sfenner.endif
4918579Sfenner
5018579Sfenner.if exists(${.CURDIR}/bin)
5118579SfennerSUBDIR+= bin
5218579Sfenner.endif
5318579Sfenner.if exists(${.CURDIR}/games) && !defined(NOGAMES)
5418579SfennerSUBDIR+= games
5518579Sfenner.endif
5618579Sfenner.if exists(${.CURDIR}/gnu)
5718579SfennerSUBDIR+= gnu
5818579Sfenner.endif
5918579Sfenner.if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \
6077816Sru    !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
6118579SfennerSUBDIR+= kerberosIV
6218579Sfenner.endif
6318579Sfenner.if exists(${.CURDIR}/libexec)
6418579SfennerSUBDIR+= libexec
6518579Sfenner.endif
6618579Sfenner.if exists(${.CURDIR}/sbin)
6718579SfennerSUBDIR+= sbin
6818579Sfenner.endif
6918579Sfenner.if exists(${.CURDIR}/share) && !defined(NOSHARE)
7018579SfennerSUBDIR+= share
7118579Sfenner.endif
7218579Sfenner.if exists(${.CURDIR}/sys)
7318579SfennerSUBDIR+= sys
7418579Sfenner.endif
7518579Sfenner.if exists(${.CURDIR}/usr.bin)
7618579SfennerSUBDIR+= usr.bin
7718579Sfenner.endif
7818579Sfenner.if exists(${.CURDIR}/usr.sbin)
7918579SfennerSUBDIR+= usr.sbin
8077816Sru.endif
8118579Sfenner.if exists(${.CURDIR}/secure) && !defined(NOCRYPT) && !defined(NOSECURE)
8218579SfennerSUBDIR+= secure
8318579Sfenner.endif
8418579Sfenner
8518579Sfenner# etc must be last for "distribute" to work
8618579Sfenner.if exists(${.CURDIR}/etc)
8718579SfennerSUBDIR+= etc
8818579Sfenner.endif
8918579Sfenner
9018579Sfenner# These are last, since it is nice to at least get the base system
9118579Sfenner# rebuilt before you do them.
9218579Sfenner.if defined(LOCAL_DIRS)
9318579Sfenner.for _DIR in ${LOCAL_DIRS}
9418579Sfenner.if exists(${.CURDIR}/${_DIR}) & exists(${.CURDIR}/${_DIR}/Makefile)
9518579SfennerSUBDIR+= ${_DIR}
9618579Sfenner.endif
9718579Sfenner.endfor
9818579Sfenner.endif
9918579Sfenner
10018579SfennerOBJDIR=		obj
10118579Sfenner
10218579Sfenner.if defined(NOCLEAN)
10318579SfennerCLEANDIR=
10418579Sfenner.else
10518579Sfenner.if defined(NOCLEANDIR)
10618579SfennerCLEANDIR=	clean cleandepend
10718579Sfenner.else
10818579SfennerCLEANDIR=	cleandir
10918579Sfenner.endif
11018579Sfenner.endif
11118579Sfenner
11218579Sfenner.if !defined(NOCLEAN)
11318579Sfenner_NODEPEND=	true
11418579Sfenner.endif
11518579Sfenner.if defined(_NODEPEND)
11618579Sfenner_DEPEND=	cleandepend
11718579Sfenner.else
11818579Sfenner_DEPEND=	depend
11918579Sfenner.endif
12018579Sfenner
12118579SfennerSUP?=		cvsup
12218579SfennerSUPFLAGS?=	-g -L 2 -P -
12318579Sfenner
12418579Sfenner#
12518579Sfenner# While building tools for bootstrapping, we don't need to waste time on
12618579Sfenner# shared or profiled libraries, shared linkage, or documentation, except
12718579Sfenner# when the tools won't get cleaned we must use the defaults for shared
12818579Sfenner# libraries and shared linkage (and this doesn't waste time).
12918579Sfenner# XXX actually, we do need to waste time building shared libraries.
13018579Sfenner#
13118579Sfenner.if defined(NOCLEAN)
13218579SfennerMK_FLAGS=	-DWORLD -DNOINFO -DNOMAN         -DNOPROFILE
13318579Sfenner.else
13418579SfennerMK_FLAGS=	-DWORLD -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED
13518579Sfenner.endif
13618579Sfenner
13718579Sfenner#
13818579Sfenner# Define the location of the temporary installation directory. Note that
13918579Sfenner# MAKEOBJDIRPREFIX normally isn't defined so if the current directory is
14018579Sfenner# /usr/src, then the world temporary directory is /usr/obj/usr/src/tmp.
14118579Sfenner#
14218579Sfenner# During the transition from aout to elf format on i386, MAKEOBJDIRPREFIX
14318579Sfenner# is set by the parent makefile (Makefile.inc0) to be /usr/obj/${OBJFORMAT}
14418579Sfenner# in order to keep aout and elf format files apart.
14518579Sfenner#
14618579Sfenner.if defined(MAKEOBJDIRPREFIX)
14718579SfennerWORLDTMP=	${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
14818579Sfenner.else
14918579SfennerWORLDTMP=	/usr/obj${.CURDIR}/tmp
15018579Sfenner.endif
15118579Sfenner
15218579Sfenner#
15318579Sfenner# Define the PATH to the build tools.
15418579Sfenner#
15518579Sfenner# If not building tools, the PATH always points to the installed binaries.
15618579Sfenner# The NOTOOLS option assumes that in installed tools are good enough and that
15718579Sfenner# the user's PATH will locate to appropriate tools. This option is required
15818579Sfenner# for a cross-compiled build environment.
15918579Sfenner#
16018579Sfenner# If building tools, then the PATH includes the world temporary directories
16118579Sfenner# so that the bootstrapped tools are used as soon as they are built. The
16218579Sfenner# strict path is for use after all tools are supposed to have been
16318579Sfenner# bootstrapped. It doesn't allow any of the installed tools to be used.
16418579Sfenner#
16518579Sfenner.if	defined(NOTOOLS)
16618579Sfenner# Default root of the tool tree
16718579SfennerTOOLROOT?=	
16818579Sfenner# Choose the PATH relative to the root of the tool tree
16918579SfennerPATH=		${TOOLROOT}/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/sbin:${TOOLROOT}/usr/bin
17018579Sfenner.else
17118579SfennerTOOLROOT=	${WORLDTMP}
17218579Sfenner.endif
17318579SfennerSTRICTTMPPATH=	${TOOLROOT}/sbin:${TOOLROOT}/usr/sbin:${TOOLROOT}/bin:${TOOLROOT}/usr/bin
17418579SfennerTMPPATH=	${STRICTTMPPATH}:${PATH}
17518579Sfenner
17618579Sfenner# XXX COMPILER_PATH is needed for finding cc1, ld and as
17718579Sfenner# XXX GCC_EXEC_PREFIX is for *crt.o.  It is probably unnecessary now
17818579Sfenner#	that LIBRARY_PATH is set.  We still can't use -nostdlib, since gcc
17918579Sfenner#	wouldn't link *crt.o or libgcc if it were used.
18018579Sfenner# XXX LD_LIBRARY_PATH is for ld.so.  It is also used by ld, although we don't
18118579Sfenner#	want that - all compile-time library paths should be resolved by gcc.
18218579Sfenner#	It fails for set[ug]id executables (are any used?).
18318579SfennerCOMPILER_ENV=	BISON_SIMPLE=${TOOLROOT}/usr/share/misc/bison.simple \
18418579Sfenner		COMPILER_PATH=${TOOLROOT}/usr/libexec:${TOOLROOT}/usr/bin \
18518579Sfenner		GCC_EXEC_PREFIX=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib/ \
18618579Sfenner		LD_LIBRARY_PATH=${TOOLROOT}${SHLIBDIR} \
18718579Sfenner		LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
18818579Sfenner
18918579SfennerBMAKEENV=	PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \
19018579Sfenner		OBJFORMAT_PATH=${TOOLROOT}/usr/libexec:/usr/libexec
19118579SfennerXMAKEENV=	PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
19218579Sfenner		PERL5LIB=${DESTDIR}/usr/libdata/perl/5.00503 \
19318579Sfenner		OBJFORMAT_PATH=${TOOLROOT}/usr/libexec \
19418579Sfenner		CFLAGS="-nostdinc ${CFLAGS}"	# XXX -nostdlib
19518579Sfenner
19618579Sfenner# used to compile and install 'make' in temporary build tree
19718579SfennerMAKETMP=	${WORLDTMP}/make
19818579SfennerIBMAKE=	${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
19918579Sfenner
20018579Sfenner.if	defined(NOTOOLS)
20118579Sfenner# bootstrap make
20218579SfennerBMAKE=	${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
20318579Sfenner# cross make used for compilation
20418579SfennerXMAKE=	${XMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
20518579Sfenner# cross make used for final installation
20618579SfennerIXMAKE=	${XMAKEENV} ${MAKE}
20718579Sfenner.else
20818579Sfenner# bootstrap make
20918579SfennerBMAKE=	${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
21018579Sfenner# cross make used for compilation
21118579SfennerXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
21277816Sru# cross make used for final installation
21377816SruIXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/make
21477816Sru.endif
21518579Sfenner
21618579Sfenner#
21718579Sfenner# buildworld
21818579Sfenner#
21918579Sfenner# Attempt to rebuild the entire system, with reasonable chance of
22018579Sfenner# success, regardless of how old your existing system is.
22118579Sfenner#
22218579Sfennerbuildworld: check-objformat
22346542Sarchie.if !defined(NOCLEAN)
224100789Sfenner	@echo
22518579Sfenner	@echo "--------------------------------------------------------------"
22618579Sfenner	@echo ">>> Cleaning up the temporary ${OBJFORMAT} build tree"
22718579Sfenner	@echo "--------------------------------------------------------------"
22858804Sshin	mkdir -p ${WORLDTMP}
22958804Sshin	-chflags -R noschg ${WORLDTMP}/
230171135Sgnn	rm -rf ${WORLDTMP}
23158804Sshin.endif
23258804Sshin.if !defined(NOTOOLS)
23318579Sfenner	@echo
234100787Sfenner	@echo "--------------------------------------------------------------"
23518579Sfenner	@echo ">>> Making make"
236100787Sfenner	@echo "--------------------------------------------------------------"
23718579Sfenner	mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
23818579Sfenner	( \
23918579Sfenner	cd ${.CURDIR}/usr.bin/make; \
24018579Sfenner		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
24118579Sfenner		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \
24218579Sfenner		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
24318579Sfenner		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
24418579Sfenner	)
24518579Sfenner	@echo
24618579Sfenner	@echo "--------------------------------------------------------------"
247100787Sfenner	@echo ">>> Making mtree"
248100787Sfenner	@echo "--------------------------------------------------------------"
249100787Sfenner	mkdir -p ${WORLDTMP}/usr/sbin ${WORLDTMP}/mtree
250100787Sfenner	( \
251100787Sfenner	cd ${.CURDIR}/usr.sbin/mtree; \
252100787Sfenner		MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
253100787Sfenner		export MAKEOBJDIR=${WORLDTMP}/mtree; \
254100787Sfenner		${BMAKE} ${MK_FLAGS} all; \
255100787Sfenner		${BMAKE} ${MK_FLAGS} -B install clean \
256100787Sfenner	)
257100787Sfenner.endif
258100787Sfenner	@echo
259100787Sfenner	@echo "--------------------------------------------------------------"
260176428Srpaulo	@echo ">>> Making hierarchy"
261100787Sfenner	@echo "--------------------------------------------------------------"
262100787Sfenner	mkdir -p ${WORLDTMP}
26318579Sfenner	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 hierarchy
26418579Sfenner.if !defined(NOCLEAN)
26518579Sfenner	@echo
26618579Sfenner	@echo "--------------------------------------------------------------"
26718579Sfenner	@echo ">>> Cleaning up the ${OBJFORMAT} obj tree"
26818579Sfenner	@echo "--------------------------------------------------------------"
26918579Sfenner	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
27018579Sfenner.endif
27118579Sfenner	@echo
27218579Sfenner	@echo "--------------------------------------------------------------"
27346542Sarchie	@echo ">>> Rebuilding the ${OBJFORMAT} obj tree"
27446542Sarchie	@echo "--------------------------------------------------------------"
27546542Sarchie	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 par-${OBJDIR}
27646542Sarchie.if !defined(NOTOOLS)
27746542Sarchie	@echo
27846542Sarchie	@echo "--------------------------------------------------------------"
27946542Sarchie	@echo ">>> Rebuilding ${OBJFORMAT} bootstrap tools"
28046542Sarchie	@echo "--------------------------------------------------------------"
28146542Sarchie	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap
28246542Sarchie	@echo
28346542Sarchie	@echo "--------------------------------------------------------------"
28446542Sarchie	@echo ">>> Rebuilding tools necessary to build the include files"
28546542Sarchie	@echo "--------------------------------------------------------------"
28646542Sarchie	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 include-tools
287100787Sfenner.endif
288100787Sfenner	@echo
289100787Sfenner	@echo "--------------------------------------------------------------"
290100787Sfenner	@echo ">>> Rebuilding ${DESTDIR}/usr/include"
291100787Sfenner	@echo "--------------------------------------------------------------"
292100787Sfenner	cd ${.CURDIR}; SHARED=copies ${BMAKE} -f Makefile.inc1 includes
293100787Sfenner	@echo
29418579Sfenner	@echo "--------------------------------------------------------------"
29518579Sfenner	@echo ">>> Rebuilding bootstrap libraries"
29618579Sfenner	@echo "--------------------------------------------------------------"
29718579Sfenner	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 bootstrap-libraries
29818579Sfenner.if !defined(NOTOOLS)
29918579Sfenner	@echo
30018579Sfenner	@echo "--------------------------------------------------------------"
301100787Sfenner	@echo ">>> Rebuilding tools needed to build libraries"
302100787Sfenner	@echo "--------------------------------------------------------------"
303100787Sfenner	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 lib-tools
304100787Sfenner.endif
305100787Sfenner.if !defined(NOTOOLS)
30646542Sarchie	@echo
307100787Sfenner	@echo "--------------------------------------------------------------"
30846542Sarchie	@echo ">>> Rebuilding all other tools needed to build the ${OBJFORMAT} world"
30918579Sfenner	@echo "--------------------------------------------------------------"
31018579Sfenner	cd ${.CURDIR}; ${BMAKE} -f Makefile.inc1 build-tools
31146542Sarchie.endif
312100787Sfenner.if !defined(_NODEPEND)
31318579Sfenner	@echo
314163387Sdwmalone	@echo "--------------------------------------------------------------"
315163387Sdwmalone	@echo ">>> Rebuilding dependencies"
316163387Sdwmalone	@echo "--------------------------------------------------------------"
31718579Sfenner	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-depend
31818579Sfenner.endif
31918579Sfenner	@echo
32018579Sfenner	@echo "--------------------------------------------------------------"
32118579Sfenner	@echo ">>> Building ${OBJFORMAT} libraries"
32218579Sfenner	@echo "--------------------------------------------------------------"
32318579Sfenner	cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
324100787Sfenner	@echo
32518579Sfenner	@echo "--------------------------------------------------------------"
32646542Sarchie	@echo ">>> Building everything.."
327100787Sfenner	@echo "--------------------------------------------------------------"
32818579Sfenner	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
329100787Sfenner
330100787Sfennereverything:
33118579Sfenner	@echo "--------------------------------------------------------------"
33218579Sfenner	@echo ">>> Building everything.."
33318579Sfenner	@echo "--------------------------------------------------------------"
33418579Sfenner	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 all
335100787Sfenner
336100787Sfenner#
33718579Sfenner# installworld
338163387Sdwmalone#
33977816Sru# Installs everything compiled by a 'buildworld'.
340100787Sfenner#
34118579Sfennerinstallworld:
34246542Sarchie	cd ${.CURDIR}; ${IXMAKE} -f Makefile.inc1 reinstall
34318579Sfenner
34418579Sfenner#
34518579Sfenner# reinstall
34618579Sfenner#
34718579Sfenner# If you have a build server, you can NFS mount the source and obj directories
348176428Srpaulo# and do a 'make reinstall' on the *client* to install new binaries from the
349176428Srpaulo# most recent server build.
350176428Srpaulo#
351100787Sfennerreinstall:
352100787Sfenner	@echo "--------------------------------------------------------------"
353100787Sfenner	@echo ">>> Making hierarchy"
354100787Sfenner	@echo "--------------------------------------------------------------"
355100787Sfenner	cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
356100787Sfenner	@echo
357158424Scjc	@echo "--------------------------------------------------------------"
358163387Sdwmalone	@echo ">>> Installing everything.."
35918579Sfenner	@echo "--------------------------------------------------------------"
36018579Sfenner	cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
36118579Sfenner.if ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout" && !defined(DESTDIR)
36218579Sfenner	@echo
36318579Sfenner	@echo "--------------------------------------------------------------"
36418579Sfenner	@echo ">>> Re-scanning the shared libraries.."
36518579Sfenner	@echo "--------------------------------------------------------------"
366100787Sfenner	-cd ${.CURDIR}; /sbin/ldconfig -R
367100787Sfenner.endif
368100787Sfenner.if !defined(NOMAN)
369100535Sfenner	@echo
37018579Sfenner	@echo "--------------------------------------------------------------"
37118579Sfenner	@echo ">>> Rebuilding man page indices"
372100789Sfenner	@echo "--------------------------------------------------------------"
37318579Sfenner	cd ${.CURDIR}/share/man; ${MAKE} makedb
37418579Sfenner.endif
37518579Sfenner
37658804Sshin#
37758804Sshin# update
37858804Sshin#
37946542Sarchie# Update the source tree, by running sup and/or running cvs to update to the
380100787Sfenner# latest copy.
381100787Sfenner#
38218579Sfennerupdate:
38367682Sobrien.if defined(SUP_UPDATE)
384100787Sfenner	@echo "--------------------------------------------------------------"
385163387Sdwmalone	@echo ">>> Running ${SUP}"
386100787Sfenner	@echo "--------------------------------------------------------------"
387100787Sfenner	@${SUP} ${SUPFLAGS} ${SUPFILE}
388100787Sfenner.if defined(SUPFILE1)
38918579Sfenner	@${SUP} ${SUPFLAGS} ${SUPFILE1}
39046542Sarchie.endif
39146542Sarchie.if defined(SUPFILE2)
39246542Sarchie	@${SUP} ${SUPFLAGS} ${SUPFILE2}
39346542Sarchie.endif
39446542Sarchie.endif
39546542Sarchie.if defined(CVS_UPDATE)
39646542Sarchie	@echo "--------------------------------------------------------------"
39746542Sarchie	@echo ">>> Updating /usr/src from cvs repository" ${CVSROOT}
398100535Sfenner	@echo "--------------------------------------------------------------"
399100535Sfenner	cd ${.CURDIR}; cvs -q update -P -d
40046542Sarchie.endif
401100787Sfenner
402100787Sfenner#
403100787Sfenner# most
404163387Sdwmalone#
405100787Sfenner# Build most of the user binaries on the existing system libs and includes.
406100787Sfenner#
407100787Sfennermost:
408100787Sfenner	@echo "--------------------------------------------------------------"
409100787Sfenner	@echo ">>> Building programs only"
410100787Sfenner	@echo "--------------------------------------------------------------"
411100787Sfenner	cd ${.CURDIR}/bin;		${MAKE} all
412100787Sfenner	cd ${.CURDIR}/sbin;		${MAKE} all
413100787Sfenner	cd ${.CURDIR}/libexec;		${MAKE} all
41446542Sarchie	cd ${.CURDIR}/usr.bin;		${MAKE} all
41546542Sarchie	cd ${.CURDIR}/usr.sbin;		${MAKE} all
41646542Sarchie	cd ${.CURDIR}/gnu/libexec;	${MAKE} all
41746542Sarchie	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} all
41846542Sarchie	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} all
419163387Sdwmalone#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
42046542Sarchie#	cd ${.CURDIR}/kerberosIV;	${MAKE} most
42146542Sarchie#.endif
42246542Sarchie#.if !defined(NOSECURE) && !defined(NOCRYPT)
42346542Sarchie#	cd ${.CURDIR}/secure;		${MAKE} most
42446542Sarchie#.endif
42546542Sarchie
42646542Sarchie#
42746542Sarchie# installmost
428163387Sdwmalone#
42946542Sarchie# Install the binaries built by the 'most' target.  This does not include
43046542Sarchie# libraries or include files.
43146542Sarchie#
43246542Sarchieinstallmost:
43346542Sarchie	@echo "--------------------------------------------------------------"
43446542Sarchie	@echo ">>> Installing programs only"
43546542Sarchie	@echo "--------------------------------------------------------------"
43646542Sarchie	cd ${.CURDIR}/bin;		${MAKE} install
437163387Sdwmalone	cd ${.CURDIR}/sbin;		${MAKE} install
43846542Sarchie	cd ${.CURDIR}/libexec;		${MAKE} install
43946542Sarchie	cd ${.CURDIR}/usr.bin;		${MAKE} install
44046542Sarchie	cd ${.CURDIR}/usr.sbin;		${MAKE} install
44146542Sarchie	cd ${.CURDIR}/gnu/libexec;	${MAKE} install
44246542Sarchie	cd ${.CURDIR}/gnu/usr.bin;	${MAKE} install
44346542Sarchie	cd ${.CURDIR}/gnu/usr.sbin;	${MAKE} install
44446542Sarchie#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
445100535Sfenner#	cd ${.CURDIR}/kerberosIV;	${MAKE} installmost
446163387Sdwmalone#.endif
447100535Sfenner#.if !defined(NOSECURE) && !defined(NOCRYPT)
448100535Sfenner#	cd ${.CURDIR}/secure;		${MAKE} installmost
449100535Sfenner#.endif
450100535Sfenner
451100535Sfenner#
452100535Sfenner# ------------------------------------------------------------------------
453100535Sfenner#
45446542Sarchie# From here onwards are utility targets used by the 'make world' and
455163387Sdwmalone# related targets.  If your 'world' breaks, you may like to try to fix
45646542Sarchie# the problem and manually run the following targets to attempt to
45746542Sarchie# complete the build.  Beware, this is *not* guaranteed to work, you
45846542Sarchie# need to have a pretty good grip on the current state of the system
45946542Sarchie# to attempt to manually finish it.  If in doubt, 'make world' again.
46046542Sarchie#
46146542Sarchie
46246542Sarchie#
46346542Sarchie# hierarchy - ensure that all the needed directories are present
46446542Sarchie#
465163387Sdwmalonehierarchy:
466163387Sdwmalone	cd ${.CURDIR}/etc;		${MAKE} distrib-dirs
46718579Sfenner
46818579Sfenner#
46918579Sfenner# bootstrap - [re]build tools needed to run the actual build, this includes
470100787Sfenner# tools needed by 'make depend', as some tools are needed to generate source
47118579Sfenner# for the dependency information to be gathered from.
472100787Sfenner#
473100787Sfennerbootstrap:
474100787Sfenner	cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
47518579Sfenner		${MAKE} ${MK_FLAGS} all; \
476100787Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
47718579Sfenner	cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
47818579Sfenner		${MAKE} ${MK_FLAGS} all; \
47918579Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
48018579Sfenner	cd ${.CURDIR}/usr.bin/yacc; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
481100787Sfenner		${MAKE} ${MK_FLAGS} all; \
48218579Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
483100787Sfenner	cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
484100787Sfenner		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
485100787Sfenner		${MAKE} ${MK_FLAGS} -DNOLIB all; \
48648221Sarchie		${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
48718803Ssef	cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
48818583Sfenner	cd ${.CURDIR}/usr.sbin/mtree; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
48918579Sfenner		${MAKE} ${MK_FLAGS} all; \
490100787Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
491100787Sfenner
492100787Sfenner#
493100787Sfenner# include-tools - generally the same as 'bootstrap', except that it's for
494100787Sfenner# things that are specifically needed to generate include files.
495100787Sfenner#
496100787Sfenner# XXX should be merged with bootstrap, it's not worth keeeping them separate.
497100787Sfenner# Well, maybe it is now.  We force 'cleandepend' here to avoid dependencies
49818583Sfenner# on cleaned away headers in ${WORLDTMP}.
49918583Sfenner#
50018583Sfennerinclude-tools:
50118583Sfenner.for d in usr.bin/compile_et usr.bin/rpcgen
50218583Sfenner	cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
50318583Sfenner		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
50418583Sfenner		${MAKE} ${MK_FLAGS} all; \
50518583Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
50618583Sfenner.endfor
50718583Sfenner
50818583Sfenner#
50918583Sfenner# includes - possibly generate and install the include files.
51018583Sfenner#
51118583Sfennerincludes:
512220968Ssimon.if defined(CLOBBER)
513220968Ssimon	rm -rf ${DESTDIR}/usr/include/*
514220968Ssimon	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
515220968Ssimon		-p ${DESTDIR}/usr/include
51618583Sfenner.endif
51777816Sru	cd ${.CURDIR}/include;			${MAKE} -B all install
51877816Sru	cd ${.CURDIR}/gnu/include;		${MAKE} install
51977816Sru	cd ${.CURDIR}/gnu/lib/libmp;		${MAKE} beforeinstall
52077816Sru	cd ${.CURDIR}/gnu/lib/libobjc;		${MAKE} beforeinstall
52177816Sru	cd ${.CURDIR}/gnu/lib/libreadline;	${MAKE} beforeinstall
522100787Sfenner	cd ${.CURDIR}/gnu/lib/libregex;		${MAKE} beforeinstall
523100787Sfenner	cd ${.CURDIR}/gnu/lib/libstdc++;	${MAKE} beforeinstall
524100787Sfenner	cd ${.CURDIR}/gnu/lib/libdialog;	${MAKE} beforeinstall
525100787Sfenner	cd ${.CURDIR}/gnu/lib/libgmp;		${MAKE} beforeinstall
52677816Sru	cd ${.CURDIR}/gnu/usr.bin/cc/cc1plus;	${MAKE} beforeinstall
52777816Sru.if exists(${.CURDIR}/secure) && !defined(NOCRYPT)
52877816Sru	cd ${.CURDIR}/secure/lib/libdes;	${MAKE} beforeinstall
52977816Sru.endif
53077816Sru.if exists(${.CURDIR}/kerberosIV) && !defined(NOCRYPT) && \
531100787Sfenner    defined(MAKE_KERBEROS4)
532100787Sfenner	cd ${.CURDIR}/kerberosIV/lib/libacl;	${MAKE} beforeinstall
533100787Sfenner	cd ${.CURDIR}/kerberosIV/lib/libkadm;	${MAKE} beforeinstall
53418579Sfenner	cd ${.CURDIR}/kerberosIV/lib/libkafs;	${MAKE} beforeinstall
53518579Sfenner	cd ${.CURDIR}/kerberosIV/lib/libkdb;	${MAKE} beforeinstall
53618579Sfenner	cd ${.CURDIR}/kerberosIV/lib/libkrb;	${MAKE} beforeinstall
53718579Sfenner	cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
53818579Sfenner.else
539176428Srpaulo	cd ${.CURDIR}/lib/libtelnet;		${MAKE} beforeinstall
54018579Sfenner.endif
541176428Srpaulo.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH})
542176428Srpaulo	cd ${.CURDIR}/lib/csu/${MACHINE_ARCH};	${MAKE} beforeinstall
543176428Srpaulo.endif
544176428Srpaulo	cd ${.CURDIR}/lib/libalias;		${MAKE} beforeinstall
545176428Srpaulo	cd ${.CURDIR}/lib/libatm;		${MAKE} beforeinstall
546176428Srpaulo	cd ${.CURDIR}/lib/libdevstat;		${MAKE} beforeinstall
547176428Srpaulo	cd ${.CURDIR}/lib/libc;			${MAKE} beforeinstall
548176428Srpaulo	cd ${.CURDIR}/lib/libcalendar;		${MAKE} beforeinstall
549176428Srpaulo	cd ${.CURDIR}/lib/libcam;		${MAKE} beforeinstall
55018579Sfenner	cd ${.CURDIR}/lib/libcurses;		${MAKE} beforeinstall
55118579Sfenner	cd ${.CURDIR}/lib/libdisk;		${MAKE} beforeinstall
55218579Sfenner	cd ${.CURDIR}/lib/libedit;		${MAKE} beforeinstall
55318579Sfenner	cd ${.CURDIR}/lib/libftpio;		${MAKE} beforeinstall
554163387Sdwmalone	cd ${.CURDIR}/lib/libmd;		${MAKE} beforeinstall
555163387Sdwmalone	cd ${.CURDIR}/lib/libmytinfo;		${MAKE} beforeinstall
556163387Sdwmalone	cd ${.CURDIR}/lib/libncurses;		${MAKE} beforeinstall
557163387Sdwmalone.if !defined(WANT_CSRG_LIBM)
558158424Scjc	cd ${.CURDIR}/lib/msun;			${MAKE} beforeinstall
559158424Scjc.endif
560158424Scjc	cd ${.CURDIR}/lib/libopie;		${MAKE} beforeinstall
561158424Scjc	cd ${.CURDIR}/lib/libpam/libpam;	${MAKE} beforeinstall
562100787Sfenner	cd ${.CURDIR}/lib/libpcap;		${MAKE} beforeinstall
563100787Sfenner	cd ${.CURDIR}/lib/libradius;		${MAKE} beforeinstall
564100787Sfenner	cd ${.CURDIR}/lib/librpcsvc;		${MAKE} beforeinstall
565100787Sfenner	cd ${.CURDIR}/lib/libskey;		${MAKE} beforeinstall
566100787Sfenner	cd ${.CURDIR}/lib/libstand;		${MAKE} beforeinstall
567100787Sfenner	cd ${.CURDIR}/lib/libtacplus;		${MAKE} beforeinstall
568100787Sfenner	cd ${.CURDIR}/lib/libtermcap;		${MAKE} beforeinstall
569100787Sfenner	cd ${.CURDIR}/lib/libcom_err;		${MAKE} beforeinstall
570100787Sfenner	cd ${.CURDIR}/lib/libss;		${MAKE} -B hdrs beforeinstall
57118579Sfenner	cd ${.CURDIR}/lib/libutil;		${MAKE} beforeinstall
57218579Sfenner	cd ${.CURDIR}/lib/libvgl;		${MAKE} beforeinstall
57318579Sfenner	cd ${.CURDIR}/lib/libwrap;		${MAKE} beforeinstall
57418579Sfenner	cd ${.CURDIR}/lib/libz;			${MAKE} beforeinstall
57518579Sfenner	cd ${.CURDIR}/usr.bin/f2c;		${MAKE} beforeinstall
57618579Sfenner	cd ${.CURDIR}/usr.bin/lex;		${MAKE} beforeinstall
57718579Sfenner
578100787Sfenner#
57918579Sfenner# Declare tools if they are not required on all architectures.
58018579Sfenner#
58118579Sfenner.if ${MACHINE_ARCH} == "i386"
582100787Sfenner# aout tools:
583100787Sfenner_aout_ar	= usr.bin/ar
58447071Sarchie_aout_as	= gnu/usr.bin/as
58547071Sarchie_aout_ld	= gnu/usr.bin/ld
586100787Sfenner_aout_nm	= usr.bin/nm
587100787Sfenner_aout_ranlib	= usr.bin/ranlib
588100787Sfenner_aout_size	= usr.bin/size
589100787Sfenner_aout_strip	= usr.bin/strip
59018579Sfenner# boot block/loader tools:
591100787Sfenner_btxld		= usr.sbin/btxld
59218579Sfenner.endif
59318579Sfenner
59418579Sfenner#
59518579Sfenner# lib-tools - build tools to compile and install the libraries.
59618579Sfenner#
59718579Sfenner# XXX gperf is required for cc
59846542Sarchie# XXX a new ld and tsort is required for cc
599100787Sfennerlib-tools:
60046542Sarchie.for d in				\
60146542Sarchie		gnu/usr.bin/gperf	\
60218579Sfenner		${_aout_ld}		\
603100787Sfenner		usr.bin/tsort		\
604100787Sfenner		${_aout_as}		\
60518579Sfenner		gnu/usr.bin/bison	\
60618579Sfenner		gnu/usr.bin/cc		\
60718579Sfenner		gnu/lib/libgcc		\
608100787Sfenner		${_aout_ar}		\
60918579Sfenner		usr.bin/env		\
61018579Sfenner		usr.bin/lex/lib		\
61118579Sfenner		usr.bin/mk_cmds		\
61218579Sfenner		${_aout_nm}		\
61318579Sfenner		${_aout_ranlib}		\
61418579Sfenner		${_aout_strip}		\
61518579Sfenner		gnu/usr.bin/binutils	\
61618579Sfenner		usr.bin/uudecode	\
61718579Sfenner		usr.bin/objformat
61818579Sfenner	cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
61918579Sfenner		${MAKE} ${MK_FLAGS} all; \
62018579Sfenner		${MAKE} ${MK_FLAGS} -B install; \
62118579Sfenner		${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
62218579Sfenner.endfor
623100787Sfenner
624100787Sfenner#
625100787Sfenner# We have to know too much about ordering and subdirs in the lib trees:
626100787Sfenner#
62718579Sfenner# To satisfy shared library linkage when only the libraries being built
628100787Sfenner# are visible:
629100787Sfenner#
63018579Sfenner# csu must be built before all shared libaries for ELF.
63118579Sfenner# libcom_err must be built before libss.
63218579Sfenner# libcrypt must be built before libskey and libkrb.
63318579Sfenner# libdes must be built before libpam.
63418579Sfenner# libkrb must be built before libpam.
63518579Sfenner# libm must be built before libf2c and libstdc++.
636100787Sfenner# libmd must be built before libatm, libopie, libradius, libskey,
637100787Sfenner# libtacplus and libcrypt.
638100787Sfenner# libmytinfo must be built before libdialog and libncurses.
639100787Sfenner# libncurses must be built before libdialog.
64018579Sfenner# libradius must be built before libpam.
641100787Sfenner# libskey must be built before libpam.
642169144Smaxim# libtacplus must be built before libpam.
64318579Sfenner# libtermcap must be built before libcurses, libedit and libreadline.
64418579Sfenner#
645100787Sfenner# Some libraries are built conditionally and/or are in inconsistently
646100787Sfenner# named directories:
647100787Sfenner#
648100787Sfenner.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}.pcc)
649100787Sfenner_csu=lib/csu/${MACHINE_ARCH}.pcc
65018579Sfenner.elif ${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "elf"
65118579Sfenner_csu=lib/csu/i386-elf
65218579Sfenner.else
65318579Sfenner_csu=lib/csu/${MACHINE_ARCH}
65448221Sarchie.endif
65548221Sarchie
65648221Sarchie.if !defined(NOSECURE) && !defined(NOCRYPT)
657163387Sdwmalone_libcrypt=	lib/libcrypt secure/lib/libcrypt
658163387Sdwmalone_secure_lib=	secure/lib
659163387Sdwmalone.else
660100787Sfenner_libcrypt=	lib/libcrypt
661100787Sfenner.endif
662100787Sfenner
663100787Sfenner.if !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
66447071Sarchie_kerberosIV_lib=kerberosIV/lib
66547071Sarchie.endif
66647071Sarchie
667100787Sfenner.if defined(WANT_CSRG_LIBM)
668100787Sfenner_libm=	lib/libm
669100787Sfenner.else
670100787Sfenner_libm=	lib/msun
671100787Sfenner.endif
672100787Sfenner
673100787Sfenner.if !defined(NOPERL)
674100787Sfenner_libperl=		gnu/usr.bin/perl/libperl
67518579Sfenner.endif
67618579Sfenner
67718579Sfenner#
67818579Sfenner# bootstrap-libraries - build just enough libraries for the bootstrap
679100787Sfenner# tools, and install them under ${WORLDTMP}.
680100787Sfenner#
681100787Sfenner# Build csu early so that some tools get linked to the new
68218579Sfenner# version (too late for the main tools, however).  Then build the
68318579Sfenner# necessary prerequisite libraries (libtermcap just needs to be before
684100787Sfenner# libcurses, and this only matters for the NOCLEAN case when NOPIC is
685100787Sfenner# not set).
686100787Sfenner#
687100787Sfenner# This is mostly wrong.  The build tools must run on the host system,
688100787Sfenner# so they should use host libraries.  We depend on the target being
689100787Sfenner# similar enough to the host for new target libraries to work on the
690100787Sfenner# host.
691100787Sfenner#
692100787Sfennerbootstrap-libraries:
693100787Sfenner.for _lib in ${_csu} lib/libtermcap \
69418579Sfenner    gnu/lib/libregex gnu/lib/libreadline lib/libc \
69518579Sfenner    lib/libcurses lib/libedit ${_libm} \
69618579Sfenner    lib/libmd lib/libcrypt lib/libutil lib/libz usr.bin/lex/lib \
69718579Sfenner    ${_libperl}
69818579Sfenner.if exists(${.CURDIR}/${_lib})
69918579Sfenner	cd ${.CURDIR}/${_lib}; \
70018579Sfenner		${MAKE} ${MK_FLAGS} ${_DEPEND}; \
70118579Sfenner		${MAKE} ${MK_FLAGS} all; \
70218579Sfenner		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
70318579Sfenner.endif
70418579Sfenner.endfor
70518579Sfenner
70646542Sarchie#
70718579Sfenner# libraries - build all libraries, and install them under ${DESTDIR}.
70818579Sfenner#
70918579Sfenner# The ordering is not as special as for bootstrap-libraries.  Build
71018579Sfenner# the prerequisites first, then build almost everything else in
71118579Sfenner# alphabetical order.
71218579Sfenner#
71318579Sfennerlibraries:
71418579Sfenner.for _lib in ${_csu} lib/libcom_err ${_libm} lib/libmd ${_libcrypt} \
71518579Sfenner    lib/libmytinfo lib/libncurses lib/libtermcap \
716100787Sfenner    lib/libradius lib/libskey lib/libtacplus \
717100787Sfenner    ${_secure_lib} ${_kerberosIV_lib} \
718100787Sfenner    gnu/lib ${_libperl} lib usr.bin/lex/lib \
71918579Sfenner    usr.sbin/pcvt/keycap
720100787Sfenner.if exists(${.CURDIR}/${_lib})
72118579Sfenner	cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
72218579Sfenner.endif
723100787Sfenner.endfor
72418579Sfenner
72546542Sarchie#
726100787Sfenner# Exclude unused tools from build-tools.
72718579Sfenner#
72818579Sfenner.if !defined(NOGAMES) && exists(${.CURDIR}/games)
72918579Sfenner_adventure=	games/adventure
73018579Sfenner_caesar=	games/caesar
731100787Sfenner_hack=		games/hack
732100787Sfenner_phantasia=	games/phantasia
73318579Sfenner_strfile=	games/fortune/strfile
73418579Sfenner.endif
73518579Sfenner.if !defined(NOPERL)
73618579Sfenner_perl=		gnu/usr.bin/perl/miniperl
73718579Sfenner.endif
73818579Sfenner.if !defined(NOSHARE) && exists(${.CURDIR}/share)
73918579Sfenner_scrnmaps=	share/syscons/scrnmaps
74018579Sfenner.endif
74118579Sfenner.if ${MACHINE_ARCH} == i386
74218579Sfenner_kldlinux=	sys/modules/linux
74318579Sfenner.endif
74418579Sfenner.if ${OBJFORMAT} == "aout"
74518579Sfenner_netboot=	sys/${MACHINE}/boot/netboot
74618579Sfenner.endif
74718579Sfenner
74818579SfennerBTMAKEFLAGS=	${MK_FLAGS} -D_BUILD_TOOLS
74918579Sfenner
75018579Sfenner#
75118579Sfenner# build-tools - build and install any other tools needed to complete the
752100787Sfenner# compile and install.
75318579Sfenner# ifdef stale
75418579Sfenner# bc and cpp are required to build groff.  Otherwise, the order here is
75518583Sfenner# mostly historical, i.e., bogus.
75618579Sfenner# chmod is used to build gcc's tmpmultilib[2] at obscure times.
75718579Sfenner# endif stale
75818579Sfenner# XXX uname is a bug - the target should not depend on the host.
75918583Sfenner#
76018583Sfennerbuild-tools:
76118579Sfenner.for d in				\
76218579Sfenner		bin/cat 		\
76318579Sfenner		bin/chmod		\
76418579Sfenner		bin/cp 			\
76518579Sfenner		bin/date		\
76618579Sfenner		bin/dd			\
76718579Sfenner		bin/echo		\
76818579Sfenner		bin/expr		\
76918579Sfenner		bin/hostname		\
77018579Sfenner		bin/ln			\
77158804Sshin		bin/ls			\
77258804Sshin		bin/mkdir		\
77366809Skris		bin/mv			\
77458804Sshin		bin/rm			\
77558804Sshin		bin/test		\
77666809Skris		${_caesar}		\
77758804Sshin		${_strfile}		\
77858804Sshin		gnu/usr.bin/awk		\
77918583Sfenner		gnu/usr.bin/bc		\
78018583Sfenner		gnu/usr.bin/grep	\
78118579Sfenner		gnu/usr.bin/groff	\
78218579Sfenner		gnu/usr.bin/gzip	\
78318579Sfenner		gnu/usr.bin/man/makewhatis	\
78418579Sfenner		gnu/usr.bin/patch	\
78518579Sfenner		${_perl}		\
78618579Sfenner		gnu/usr.bin/sort	\
78718579Sfenner		gnu/usr.bin/texinfo	\
78818579Sfenner		usr.bin/basename	\
78918579Sfenner		usr.bin/cap_mkdb	\
79018579Sfenner		usr.bin/chflags		\
79118579Sfenner		usr.bin/cmp		\
79218579Sfenner		usr.bin/col		\
79318579Sfenner		usr.bin/colldef		\
79418579Sfenner		usr.bin/cpp		\
79518579Sfenner		usr.bin/expand		\
79618579Sfenner		usr.bin/file2c		\
79718579Sfenner		usr.bin/find		\
79818579Sfenner		usr.bin/gencat		\
79918579Sfenner		usr.bin/gensetdefs	\
80018579Sfenner		usr.bin/id		\
80118579Sfenner		usr.bin/join		\
80218579Sfenner		usr.bin/lorder		\
80318579Sfenner		usr.bin/m4		\
80418579Sfenner		usr.bin/mkdep		\
80518579Sfenner		usr.bin/mklocale	\
80618579Sfenner		usr.bin/paste		\
80718579Sfenner		usr.bin/printf		\
80818579Sfenner		usr.bin/sed		\
809100787Sfenner		${_aout_size}		\
810100787Sfenner		usr.bin/soelim		\
81118579Sfenner		usr.bin/symorder	\
81218579Sfenner		usr.bin/touch		\
81318579Sfenner		usr.bin/tr		\
81418579Sfenner		usr.bin/true		\
81518579Sfenner		usr.bin/uname		\
81618579Sfenner		usr.bin/uuencode	\
81718579Sfenner		usr.bin/vgrind		\
81818579Sfenner		usr.bin/vi		\
81918579Sfenner		usr.bin/wc		\
82018579Sfenner		usr.bin/xargs		\
82118579Sfenner		usr.bin/yacc		\
82218579Sfenner		${_btxld}		\
82318579Sfenner		usr.sbin/chown		\
82418579Sfenner		usr.sbin/mtree		\
82518579Sfenner		usr.sbin/zic		\
82618579Sfenner		bin/sh
82718579Sfenner	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} ${_DEPEND}; \
82818579Sfenner		${MAKE} ${BTMAKEFLAGS} all; \
82918579Sfenner		${MAKE} ${BTMAKEFLAGS} -B install ${CLEANDIR} ${OBJDIR}
83018579Sfenner.endfor
831100787Sfenner.if !defined(NOGAMES) && exists(${.CURDIR}/games)
832100787Sfenner	cd ${DESTDIR}/usr/games; cp -p caesar strfile ${DESTDIR}/usr/bin
833100787Sfenner.endif
834100787Sfenner.for d in				\
835100787Sfenner		bin/sh			\
836100787Sfenner		${_adventure}		\
837100787Sfenner		${_hack}		\
838100787Sfenner		${_phantasia}		\
83918579Sfenner		gnu/usr.bin/cc/cc_tools	\
840100787Sfenner		lib/libmytinfo		\
84118579Sfenner		${_linux}		\
84218579Sfenner		${_kldlinux}		\
84318579Sfenner		${_scrnmaps}		\
84418579Sfenner		${_netboot}
84518579Sfenner	cd ${.CURDIR}/$d; ${MAKE} ${BTMAKEFLAGS} build-tools
84618579Sfenner.endfor
84718579Sfenner	cd ${.CURDIR}/usr.bin/tn3270/tools; ${MAKE} ${BTMAKEFLAGS} all
848100787Sfenner
849100787Sfenner#
850100787Sfenner# Build aout versions of things that provide legacy support when all the
851100787Sfenner# rest of the world is elf.
852100787Sfenner#
853100787Sfennerlegacy-build:
854100787Sfenner.if	${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
855100787Sfenner	@echo
856100787Sfenner	@echo "--------------------------------------------------------------"
857100787Sfenner	@echo ">>> Making hierarchy"
858100787Sfenner	@echo "--------------------------------------------------------------"
859100787Sfenner	mkdir -p ${WORLDTMP}
860100787Sfenner	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 hierarchy
861100787Sfenner	@echo
862100787Sfenner	@echo "--------------------------------------------------------------"
863100787Sfenner	@echo ">>> Rebuilding the ${OBJFORMAT} obj tree"
864100787Sfenner	@echo "--------------------------------------------------------------"
865100787Sfenner	cd ${.CURDIR}; ${XMAKE} -f Makefile.inc1 par-${OBJDIR}
866100787Sfenner	@echo
867100787Sfenner	@echo "--------------------------------------------------------------"
868100787Sfenner	@echo ">>> Rebuilding ${DESTDIR}/usr/include"
86918579Sfenner	@echo "--------------------------------------------------------------"
87018579Sfenner	cd ${.CURDIR}; SHARED=copies ${XMAKE} -f Makefile.inc1 includes
87118579Sfenner	@echo
872100787Sfenner	@echo "--------------------------------------------------------------"
873100787Sfenner	@echo ">>> Building legacy libraries"
874100787Sfenner	@echo "--------------------------------------------------------------"
875100787Sfenner	cd ${.CURDIR}; \
876100787Sfenner		${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 bootstrap-libraries
877100787Sfenner	cd ${.CURDIR}; \
878100787Sfenner		${XMAKE} -DNOINFO -DNOMAN -f Makefile.inc1 libraries
879100787Sfenner	@echo
880100787Sfenner	@echo "--------------------------------------------------------------"
881100787Sfenner	@echo ">>> Building legacy rtld"
882100787Sfenner	@echo "--------------------------------------------------------------"
883100787Sfenner	cd ${.CURDIR}/libexec/rtld-aout; \
884100787Sfenner		${XMAKE} -DNOMAN depend; ${XMAKE} -DNOMAN all;
885100787Sfenner	@echo
886100787Sfenner	@echo "--------------------------------------------------------------"
887100787Sfenner	@echo ">>> Building legacy boot"
888100787Sfenner	@echo "--------------------------------------------------------------"
889100787Sfenner	cd ${.CURDIR}/sys/${MACHINE}/boot && \
890100787Sfenner		${XMAKE} -DNOMAN -B obj depend; ${XMAKE} -DNOMAN all;
891100787Sfenner.endif
892100787Sfenner
893100787Sfenner#
894100787Sfenner# Install aout versions of things that provide legacy support when all the
895100787Sfenner# rest of the world is elf.
896100787Sfenner#
897100787Sfennerlegacy-install:
898100787Sfenner.if	${MACHINE_ARCH} == "i386" && ${OBJFORMAT} == "aout"
899100787Sfenner	@echo
900100787Sfenner	@echo "--------------------------------------------------------------"
901100787Sfenner	@echo ">>> Installing legacy libraries"
902100787Sfenner	@echo "--------------------------------------------------------------"
903100787Sfenner	cd ${.CURDIR}/lib; ${MAKE} -B -DNOMAN -DNOINFO install
904100787Sfenner	cd ${.CURDIR}/gnu/lib; ${MAKE} -B -DNOMAN -DNOINFO install
905100787Sfenner	cd ${.CURDIR}/gnu/lib/libgcc; \
906100787Sfenner		${MAKE} -B -DNOMAN -DNOINFO install
907100787Sfenner	cd ${.CURDIR}/usr.bin/lex/lib; \
908100787Sfenner		${MAKE} -B -DNOMAN -DNOINFO install
909100787Sfenner	cd ${.CURDIR}/usr.sbin/pcvt/keycap; \
910100787Sfenner		${MAKE} -B -DNOMAN -DNOINFO install
911100787Sfenner.if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
912100787Sfenner	cd ${.CURDIR}/secure/lib; ${MAKE} -B -DNOMAN -DNOINFO install
913100787Sfenner.endif
914100787Sfenner.if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
915100787Sfenner    defined(MAKE_KERBEROS4)
916100787Sfenner	cd ${.CURDIR}/kerberosIV/lib; ${MAKE} -B -DNOMAN -DNOINFO install
917128365Spb.endif
918128365Spb	@echo
919100787Sfenner	@echo "--------------------------------------------------------------"
920100787Sfenner	@echo ">>> Installing legacy rtld"
921100787Sfenner	@echo "--------------------------------------------------------------"
922100787Sfenner	cd ${.CURDIR}/libexec/rtld-aout; ${MAKE} -DNOMAN install
923100787Sfenner	@echo
924100787Sfenner.if ${MACHINE_ARCH} == "i386"
925176428Srpaulo	@echo "--------------------------------------------------------------"
926176428Srpaulo	@echo ">>> Installing legacy boot"
927176428Srpaulo	@echo "--------------------------------------------------------------"
928176428Srpaulo	cd ${.CURDIR}/sys/${MACHINE}/boot && ${MAKE} -DNOMAN install
929176428Srpaulo.endif
930176428Srpaulo.endif
931176428Srpaulo
932176428Srpaulo
933176428Srpaulo# Get the object format that the tools see.
934176428Srpaulo#
93558804Sshin#
93658804Sshin.if exists(/usr/bin/objformat)
93766809Skris__OBJFORMAT!=	objformat
93858804Sshin.else
93958804Sshin__OBJFORMAT=	${OBJFORMAT}
94066809Skris.endif
94158804Sshin
94258804Sshin#
94318579Sfenner# Check if the local /etc/make.conf or /etc/make.conf.local have attempted
94418579Sfenner# to override the OBJFORMAT without updating the environment for the tools
94518579Sfenner# to see.
94618579Sfenner#
94718579Sfennercheck-objformat	:
94818579Sfenner.if	${__OBJFORMAT} != ${OBJFORMAT}
94918579Sfenner	@/bin/sh -c "echo \"It looks like you set OBJFORMAT=${OBJFORMAT} in /etc/make.conf. Don't do that!\" "
950100787Sfenner	@/bin/sh -c "echo \"If you want to override the installed object format, you must set OBJFORMAT\" "
95118579Sfenner	@/bin/sh -c "echo \"in your environment.\" "
952100787Sfenner	@exit 1
95318579Sfenner.endif
95418579Sfenner.if	!defined(REALLY_WANT_DEPRECIATED_AOUT) && ${OBJFORMAT} == "aout"
955100787Sfenner	@echo "==== NOTICE: a.out buildworld is depreciated and disabled! ====="
95618695Ssef	@echo "Read: http://www.freebsd.org/~peter/elfday.html for information."
95718579Sfenner	@echo "You need to complete a 'make aout-to-elf' to bring your system"
95818579Sfenner	@echo "up to date with ELF tools.  This requires a fair amount of disk"
95918695Ssef	@echo "space to complete.  Alternatively, you can do a binary upgrade"
96018579Sfenner	@echo "using the 3.0-RELEASE binaries from CD or ftp.freebsd.org in"
96118579Sfenner	@echo "/pub/FreeBSD/3.0-RELEASE/bin/ to convert your userland to ELF."
96218579Sfenner	@exit 1
96346542Sarchie.endif
96418579Sfenner
965100787Sfenner
966100787Sfenner.for __target in clean cleandepend cleandir depend obj
96746542Sarchie.for entry in ${SUBDIR}
96846542Sarchie${entry}.${__target}__D: .PHONY
96946542Sarchie	@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
97046542Sarchie		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \
97146542Sarchie		edir=${entry}.${MACHINE_ARCH}; \
972211062Sed		cd ${.CURDIR}/$${edir}; \
97346542Sarchie	else \
97446542Sarchie		${ECHODIR} "===> ${DIRPRFX}${entry}"; \
97546542Sarchie		edir=${entry}; \
97646542Sarchie		cd ${.CURDIR}/$${edir}; \
97746542Sarchie	fi; \
978100787Sfenner	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
97946542Sarchie.endfor
98046542Sarchiepar-${__target}: ${SUBDIR:S/$/.${__target}__D/}
981100787Sfenner.endfor
98218583Sfenner
98318583Sfenner.include <bsd.subdir.mk>
98418583Sfenner