Makefile revision 30205
1#
2#	$Id: Makefile,v 1.153 1997/10/06 10:21:36 jkh Exp $
3#
4# Make command line options:
5#	-DCLOBBER will remove /usr/include
6#	-DMAKE_KERBEROS4 to build KerberosIV
7#	-DALLLANG to build documentation for all languages
8#	  (where available -- see share/doc/Makefile)
9#
10#	-DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
11#	-DNOCLEAN do not clean at all
12#	-DNOCRYPT will prevent building of crypt versions
13#	-DNOLKM do not build loadable kernel modules
14#	-DNOOBJDIR do not run ``${MAKE} obj''
15#	-DNOPROFILE do not build profiled libraries
16#	-DNOSECURE do not go into secure subdir
17#	-DNOGAMES do not go into games subdir
18#	-DNOSHARE do not go into share subdir
19#	-DNOINFO do not make or install info files
20#	-DNOLIBC_R do not build libc_r.
21#	LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
22
23#
24# The intended user-driven targets are:
25# buildworld  - rebuild *everything*, including glue to help do upgrades
26# installworld- install everything built by "buildworld"
27# world       - buildworld + installworld
28# update      - convenient way to update your source tree (eg: sup/cvs)
29# most        - build user commands, no libraries or include files
30# installmost - install user commands, no libraries or include files
31#
32# Standard targets (not defined here) are documented in the makefiles in
33# /usr/share/mk.  These include:
34#		obj depend all install clean cleandepend cleanobj
35
36.if (!make(world)) && (!make(buildworld)) && (!make(installworld))
37.MAKEFLAGS:=	${.MAKEFLAGS} -m ${.CURDIR}/share/mk
38.endif
39
40# Put initial settings here.
41SUBDIR=
42
43# We must do share/info early so that installation of info `dir'
44# entries works correctly.  Do it first since it is less likely to
45# grow dependencies on include and lib than vice versa.
46.if exists(share/info)
47SUBDIR+= share/info
48.endif
49
50# We must do include and lib early so that the perl *.ph generation
51# works correctly as it uses the header files installed by this.
52.if exists(include)
53SUBDIR+= include
54.endif
55.if exists(lib)
56SUBDIR+= lib
57.endif
58
59.if exists(bin)
60SUBDIR+= bin
61.endif
62.if exists(games) && !defined(NOGAMES)
63SUBDIR+= games
64.endif
65.if exists(gnu)
66SUBDIR+= gnu
67.endif
68.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
69SUBDIR+= kerberosIV
70.endif
71.if exists(libexec)
72SUBDIR+= libexec
73.endif
74.if exists(sbin)
75SUBDIR+= sbin
76.endif
77.if exists(share) && !defined(NOSHARE)
78SUBDIR+= share
79.endif
80.if exists(sys)
81SUBDIR+= sys
82.endif
83.if exists(usr.bin)
84SUBDIR+= usr.bin
85.endif
86.if exists(usr.sbin)
87SUBDIR+= usr.sbin
88.endif
89.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
90SUBDIR+= secure
91.endif
92.if exists(lkm) && !defined(NOLKM)
93SUBDIR+= lkm
94.endif
95
96# etc must be last for "distribute" to work
97.if exists(etc) && make(distribute)
98SUBDIR+= etc
99.endif
100
101# These are last, since it is nice to at least get the base system
102# rebuilt before you do them.
103.if defined(LOCAL_DIRS)
104.for _DIR in ${LOCAL_DIRS}
105.if exists(${_DIR}) & exists(${_DIR}/Makefile)
106SUBDIR+= ${_DIR}
107.endif
108.endfor
109.endif
110
111# Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR
112.if defined(NOOBJDIR)
113OBJDIR=
114.else
115OBJDIR=		obj
116.endif
117
118.if defined(NOCLEAN)
119CLEANDIR=
120.else
121.if defined(NOCLEANDIR)
122CLEANDIR=	clean
123.else
124CLEANDIR=	cleandir
125.endif
126.endif
127
128SUP?=		sup
129SUPFLAGS?=	-v
130
131#
132# While building tools for bootstrapping, we dont need to waste time on
133# profiled libraries or man pages.  This speeds things up somewhat.
134#
135MK_FLAGS=	-DNOINFO -DNOMAN -DNOPROFILE
136
137#
138# world
139#
140# Attempt to rebuild and reinstall *everything*, with reasonable chance of
141# success, regardless of how old your existing system is.
142#
143# >> Beware, it overwrites the local build environment! <<
144#
145world:
146	@echo "--------------------------------------------------------------"
147	@echo "make world started on `LC_TIME=C date`"
148	@echo "--------------------------------------------------------------"
149.if target(pre-world)
150	@echo
151	@echo "--------------------------------------------------------------"
152	@echo " Making 'pre-world' target"
153	@echo "--------------------------------------------------------------"
154	cd ${.CURDIR} && ${MAKE} pre-world
155.endif
156	cd ${.CURDIR} && ${MAKE} buildworld
157	cd ${.CURDIR} && ${MAKE} -B installworld
158.if target(post-world)
159	@echo
160	@echo "--------------------------------------------------------------"
161	@echo " Making 'post-world' target"
162	@echo "--------------------------------------------------------------"
163	cd ${.CURDIR} && ${MAKE} post-world
164.endif
165	@echo
166	@echo "--------------------------------------------------------------"
167	@echo "make world completed on `LC_TIME=C date`"
168	@echo "--------------------------------------------------------------"
169
170.if defined(MAKEOBJDIRPREFIX)
171WORLDTMP=	${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
172.else
173WORLDTMP=	/usr/obj${.CURDIR}/tmp
174.endif
175STRICTTMPPATH=	${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/usr/bin
176TMPPATH=	${STRICTTMPPATH}:${PATH}
177
178# XXX COMPILER_PATH is needed for finding cc1, ld and as
179# XXX GCC_EXEC_PREFIX is for *crt.o.  It is probably unnecssary now
180#	tbat LIBRARY_PATH is set.  We still can't use -nostdlib, since gcc
181#	wouldn't link *crt.o or libgcc if it were used.
182# XXX LD_LIBRARY_PATH is for ld.so.  It is also used by ld, although we don't
183#	want that - all compile-time library paths should be resolved by gcc.
184#	It fails for set[ug]id executables (are any used?).
185COMPILER_ENV=	BISON_SIMPLE=${WORLDTMP}/usr/share/misc/bison.simple \
186		COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \
187		GCC_EXEC_PREFIX=${WORLDTMP}/usr/lib/ \
188		LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \
189		LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib
190
191BMAKEENV=	PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t
192XMAKEENV=	PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
193		CC='cc -nostdinc'	# XXX -nostdlib
194
195# used to compile and install 'make' in temporary build tree
196IBMAKE=	${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP}
197# bootstrap make
198BMAKE=	${BMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} DESTDIR=${WORLDTMP}
199# cross make used for compilation
200XMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} DESTDIR=${WORLDTMP}
201# cross make used for final installation
202IXMAKE=	${XMAKEENV} ${WORLDTMP}/usr/bin/${MAKE}
203
204#
205# buildworld
206#
207# Attempt to rebuild the entire system, with reasonable chance of
208# success, regardless of how old your existing system is.
209#
210buildworld:
211.if !defined(NOCLEAN)
212	@echo
213	@echo "--------------------------------------------------------------"
214	@echo " Cleaning up the temporary build tree"
215	@echo "--------------------------------------------------------------"
216	mkdir -p ${WORLDTMP}
217	chflags -R noschg ${WORLDTMP}/
218	rm -rf ${WORLDTMP}
219.endif
220	@echo
221	@echo "--------------------------------------------------------------"
222	@echo " Making make"
223	@echo "--------------------------------------------------------------"
224	mkdir -p ${WORLDTMP}/usr/bin
225	cd ${.CURDIR}/usr.bin/make && \
226		${IBMAKE} -I${.CURDIR}/share/mk -B ${CLEANDIR} ${OBJDIR} depend && \
227		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \
228		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} \
229			-B install clean cleandepend
230	@echo
231	@echo "--------------------------------------------------------------"
232	@echo " Making hierarchy"
233	@echo "--------------------------------------------------------------"
234	cd ${.CURDIR} && ${BMAKE} hierarchy
235.if !defined(NOCLEAN)
236	@echo
237	@echo "--------------------------------------------------------------"
238	@echo " Cleaning up the obj tree"
239	@echo "--------------------------------------------------------------"
240	cd ${.CURDIR} && ${BMAKE} par-${CLEANDIR}
241.endif
242.if !defined(NOOBJDIR)
243	@echo
244	@echo "--------------------------------------------------------------"
245	@echo " Rebuilding the obj tree"
246	@echo "--------------------------------------------------------------"
247	cd ${.CURDIR} && ${BMAKE} par-obj
248.endif
249	@echo
250	@echo "--------------------------------------------------------------"
251	@echo " Rebuilding bootstrap tools"
252	@echo "--------------------------------------------------------------"
253	cd ${.CURDIR} && ${BMAKE} bootstrap
254	@echo
255	@echo "--------------------------------------------------------------"
256	@echo " Rebuilding tools necessary to build the include files"
257	@echo "--------------------------------------------------------------"
258	cd ${.CURDIR} && ${BMAKE} include-tools
259	@echo
260	@echo "--------------------------------------------------------------"
261	@echo " Rebuilding /usr/include"
262	@echo "--------------------------------------------------------------"
263	cd ${.CURDIR} && SHARED=symlinks ${BMAKE} includes
264	@echo
265	@echo "--------------------------------------------------------------"
266	@echo " Rebuilding tools needed to build the libraries"
267	@echo "--------------------------------------------------------------"
268	cd ${.CURDIR} && ${BMAKE} lib-tools
269	@echo
270	@echo "--------------------------------------------------------------"
271	@echo " Rebuilding /usr/lib"
272	@echo "--------------------------------------------------------------"
273	cd ${.CURDIR} && ${BMAKE} libraries
274	@echo
275	@echo "--------------------------------------------------------------"
276	@echo " Rebuilding all other tools needed to build the world"
277	@echo "--------------------------------------------------------------"
278	cd ${.CURDIR} && ${BMAKE} build-tools
279	@echo
280	@echo "--------------------------------------------------------------"
281	@echo " Rebuilding dependencies"
282	@echo "--------------------------------------------------------------"
283	cd ${.CURDIR} && ${XMAKE} par-depend
284	@echo
285	@echo "--------------------------------------------------------------"
286	@echo " Building everything.."
287	@echo "--------------------------------------------------------------"
288	cd ${.CURDIR} && ${XMAKE} all
289
290#
291# installworld
292#
293# Installs everything compiled by a 'buildworld'.
294#
295installworld:
296	cd ${.CURDIR} && ${IXMAKE} reinstall
297
298#
299# reinstall
300#
301# If you have a build server, you can NFS mount the source and obj directories
302# and do a 'make reinstall' on the *client* to install new binaries from the
303# most recent server build.
304#
305reinstall:
306	@echo "--------------------------------------------------------------"
307	@echo " Making hierarchy"
308	@echo "--------------------------------------------------------------"
309	cd ${.CURDIR} && ${MAKE} hierarchy
310	@echo
311	@echo "--------------------------------------------------------------"
312	@echo " Installing everything.."
313	@echo "--------------------------------------------------------------"
314	cd ${.CURDIR} && ${MAKE} install
315	@echo
316	@echo "--------------------------------------------------------------"
317	@echo " Rebuilding man page indexes"
318	@echo "--------------------------------------------------------------"
319	cd ${.CURDIR}/share/man && ${MAKE} makedb
320
321#
322# update
323#
324# Update the source tree, by running sup and/or running cvs to update to the
325# latest copy.
326#
327update:
328.if defined(SUP_UPDATE)
329	@echo "--------------------------------------------------------------"
330	@echo "Running sup"
331	@echo "--------------------------------------------------------------"
332	@${SUP} ${SUPFLAGS} ${SUPFILE}
333.if defined(SUPFILE1)
334	@${SUP} ${SUPFLAGS} ${SUPFILE1}
335.endif
336.if defined(SUPFILE2)
337	@${SUP} ${SUPFLAGS} ${SUPFILE2}
338.endif
339.endif
340.if defined(CVS_UPDATE)
341	@echo "--------------------------------------------------------------"
342	@echo "Updating /usr/src from cvs repository" ${CVSROOT}
343	@echo "--------------------------------------------------------------"
344	cd ${.CURDIR} && cvs -q update -P -d
345.endif
346
347#
348# most
349#
350# Build most of the user binaries on the existing system libs and includes.
351#
352most:
353	@echo "--------------------------------------------------------------"
354	@echo " Building programs only"
355	@echo "--------------------------------------------------------------"
356	cd ${.CURDIR}/bin	&&	${MAKE} all
357	cd ${.CURDIR}/sbin	&&	${MAKE} all
358	cd ${.CURDIR}/libexec	&&	${MAKE} all
359	cd ${.CURDIR}/usr.bin	&&	${MAKE} all
360	cd ${.CURDIR}/usr.sbin	&&	${MAKE} all
361	cd ${.CURDIR}/gnu/libexec &&	${MAKE} all
362	cd ${.CURDIR}/gnu/usr.bin &&	${MAKE} all
363	cd ${.CURDIR}/gnu/usr.sbin &&	${MAKE} all
364#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
365#	cd ${.CURDIR}/kerberosIV	&&	${MAKE} most
366#.endif
367#.if !defined(NOSECURE) && !defined(NOCRYPT)
368#	cd ${.CURDIR}/secure	&&	${MAKE} most
369#.endif
370
371#
372# installmost
373#
374# Install the binaries built by the 'most' target.  This does not include
375# libraries or include files.
376#
377installmost:
378	@echo "--------------------------------------------------------------"
379	@echo " Installing programs only"
380	@echo "--------------------------------------------------------------"
381	cd ${.CURDIR}/bin	&&	${MAKE} install
382	cd ${.CURDIR}/sbin	&&	${MAKE} install
383	cd ${.CURDIR}/libexec	&&	${MAKE} install
384	cd ${.CURDIR}/usr.bin	&&	${MAKE} install
385	cd ${.CURDIR}/usr.sbin	&&	${MAKE} install
386	cd ${.CURDIR}/gnu/libexec &&	${MAKE} install
387	cd ${.CURDIR}/gnu/usr.bin &&	${MAKE} install
388	cd ${.CURDIR}/gnu/usr.sbin &&	${MAKE} install
389#.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
390#	cd ${.CURDIR}/kerberosIV &&	${MAKE} installmost
391#.endif
392#.if !defined(NOSECURE) && !defined(NOCRYPT)
393#	cd ${.CURDIR}/secure	&&	${MAKE} installmost
394#.endif
395
396#
397# ------------------------------------------------------------------------
398#
399# From here onwards are utility targets used by the 'make world' and
400# related targets.  If your 'world' breaks, you may like to try to fix
401# the problem and manually run the following targets to attempt to
402# complete the build.  Beware, this is *not* guaranteed to work, you
403# need to have a pretty good grip on the current state of the system
404# to attempt to manually finish it.  If in doubt, 'make world' again.
405#
406
407#
408# heirarchy - ensure that all the needed directories are present
409#
410hierarchy:
411	cd ${.CURDIR}/etc &&		${MAKE} distrib-dirs
412
413#
414# bootstrap - [re]build tools needed to run the actual build, this includes
415# tools needed by 'make depend', as some tools are needed to generate source
416# for the dependency information to be gathered from.
417#
418bootstrap:
419.if defined(DESTDIR)
420	rm -f ${DESTDIR}/usr/src/sys
421	ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
422	cd ${.CURDIR}/include && find -dx . | cpio -dump ${DESTDIR}/usr/include
423	cd ${.CURDIR}/include && make symlinks
424.endif
425	cd ${.CURDIR}/usr.bin/make && ${MAKE} depend && \
426		${MAKE} ${MK_FLAGS} all && \
427		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
428	cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} depend && \
429		${MAKE} ${MK_FLAGS} all && \
430		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
431	cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} depend && \
432		${MAKE} ${MK_FLAGS} -DNOLIB all && \
433		${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
434.if !defined(NOOBJDIR)
435	cd ${.CURDIR}/usr.bin/lex && ${MAKE} obj
436.endif
437
438#
439# include-tools - generally the same as 'bootstrap', except that it's for
440# things that are specifically needed to generate include files.
441#
442# XXX should be merged with bootstrap, it's not worth keeeping them separate.
443# Well, maybe it is now.  We force 'cleandepend' here to avoid dependencies
444# on cleaned away headers in ${WORLDTMP}.
445#
446include-tools:
447	cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} -B cleandepend depend && \
448		${MAKE} ${MK_FLAGS} all && \
449		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
450
451#
452# includes - possibly generate and install the include files.
453#
454includes:
455.if defined(CLOBBER)
456	rm -rf ${DESTDIR}/usr/include/*
457	mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
458		-p ${DESTDIR}/usr/include
459.endif
460	cd ${.CURDIR}/include &&		${MAKE} -B all install
461	cd ${.CURDIR}/gnu/include &&		${MAKE} install
462	cd ${.CURDIR}/gnu/lib/libmp &&		${MAKE} beforeinstall
463	cd ${.CURDIR}/gnu/lib/libobjc &&	${MAKE} beforeinstall
464	cd ${.CURDIR}/gnu/lib/libreadline &&	${MAKE} beforeinstall
465	cd ${.CURDIR}/gnu/lib/libregex &&	${MAKE} beforeinstall
466	cd ${.CURDIR}/gnu/lib/libstdc++ &&	${MAKE} beforeinstall
467	cd ${.CURDIR}/gnu/lib/libg++ &&		${MAKE} beforeinstall
468	cd ${.CURDIR}/gnu/lib/libdialog &&	${MAKE} beforeinstall
469	cd ${.CURDIR}/gnu/lib/libgmp &&		${MAKE} beforeinstall
470.if exists(secure) && !defined(NOCRYPT)
471	cd ${.CURDIR}/secure/lib/libdes &&	${MAKE} beforeinstall
472.endif
473.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
474	cd ${.CURDIR}/kerberosIV/lib/libacl &&	${MAKE} beforeinstall
475	cd ${.CURDIR}/kerberosIV/lib/libkadm &&	${MAKE} beforeinstall
476	cd ${.CURDIR}/kerberosIV/lib/libkafs &&	${MAKE} beforeinstall
477	cd ${.CURDIR}/kerberosIV/lib/libkdb &&	${MAKE} beforeinstall
478	cd ${.CURDIR}/kerberosIV/lib/libkrb &&	${MAKE} beforeinstall
479	cd ${.CURDIR}/kerberosIV/lib/libtelnet && ${MAKE} beforeinstall
480.else
481	cd ${.CURDIR}/lib/libtelnet &&		${MAKE} beforeinstall
482.endif
483	cd ${.CURDIR}/lib/csu/i386 &&		${MAKE} beforeinstall
484	cd ${.CURDIR}/lib/libalias &&		${MAKE} beforeinstall
485	cd ${.CURDIR}/lib/libc &&		${MAKE} beforeinstall
486	cd ${.CURDIR}/lib/libcurses &&		${MAKE} beforeinstall
487	cd ${.CURDIR}/lib/libdisk &&		${MAKE} beforeinstall
488	cd ${.CURDIR}/lib/libedit &&		${MAKE} beforeinstall
489	cd ${.CURDIR}/lib/libftpio &&		${MAKE} beforeinstall
490	cd ${.CURDIR}/lib/libmd &&		${MAKE} beforeinstall
491	cd ${.CURDIR}/lib/libmytinfo &&		${MAKE} beforeinstall
492	cd ${.CURDIR}/lib/libncurses &&		${MAKE} beforeinstall
493.if !defined(WANT_CSRG_LIBM)
494	cd ${.CURDIR}/lib/msun &&		${MAKE} beforeinstall
495.endif
496	cd ${.CURDIR}/lib/libopie &&		${MAKE} beforeinstall
497	cd ${.CURDIR}/lib/libpcap &&		${MAKE} beforeinstall
498	cd ${.CURDIR}/lib/librpcsvc &&		${MAKE} beforeinstall
499	cd ${.CURDIR}/lib/libskey &&		${MAKE} beforeinstall
500.if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \
501	exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl)
502	cd ${.CURDIR}/lib/libtcl &&		${MAKE} installhdrs
503.endif
504	cd ${.CURDIR}/lib/libtermcap &&		${MAKE} beforeinstall
505	cd ${.CURDIR}/lib/libcom_err &&		${MAKE} beforeinstall
506	cd ${.CURDIR}/lib/libss &&		${MAKE} beforeinstall
507	cd ${.CURDIR}/lib/libscsi &&		${MAKE} beforeinstall
508	cd ${.CURDIR}/lib/libutil &&		${MAKE} beforeinstall
509	cd ${.CURDIR}/lib/libvgl &&		${MAKE} beforeinstall
510	cd ${.CURDIR}/lib/libz &&		${MAKE} beforeinstall
511	cd ${.CURDIR}/usr.bin/f2c &&		${MAKE} beforeinstall
512	cd ${.CURDIR}/usr.bin/lex &&		${MAKE} beforeinstall
513
514#
515# lib-tools - build tools to compile and install the libraries.
516#
517# XXX gperf is required for cc
518# XXX a new ld and tsort is required for cc
519lib-tools:
520.for d in				\
521		gnu/usr.bin/gperf	\
522		gnu/usr.bin/ld		\
523		usr.bin/tsort		\
524		gnu/usr.bin/as		\
525		gnu/usr.bin/bison	\
526		gnu/usr.bin/cc		\
527		usr.bin/ar		\
528		usr.bin/compile_et	\
529		usr.bin/lex/lib		\
530		usr.bin/mk_cmds		\
531		usr.bin/nm		\
532		usr.bin/ranlib		\
533		usr.bin/uudecode
534	cd ${.CURDIR}/$d && ${MAKE} depend && \
535		${MAKE} ${MK_FLAGS} all && \
536		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
537.endfor
538
539#
540# libraries - build and install the libraries
541#
542libraries:
543.if exists(lib/csu/i386)
544	cd ${.CURDIR}/lib/csu/i386 && ${MAKE} depend && \
545		${MAKE} ${MK_FLAGS} all && \
546		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
547.endif
548.if exists(lib/libcompat)
549	cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \
550		${MAKE} ${MK_FLAGS} all && \
551		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
552.endif
553.if exists(lib/libncurses)
554	cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \
555		${MAKE} ${MK_FLAGS} all && \
556		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
557.endif
558.if exists(lib/libtermcap)
559	cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \
560		${MAKE} ${MK_FLAGS} all && \
561		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
562.endif
563.if exists(gnu)
564	cd ${.CURDIR}/gnu/lib && ${MAKE} depend && \
565		${MAKE} ${MK_FLAGS} all && \
566		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
567.endif
568.if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
569	cd ${.CURDIR}/secure/lib && ${MAKE} depend && \
570		${MAKE} ${MK_FLAGS} all && \
571		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
572.endif
573.if exists(lib)
574	cd ${.CURDIR}/lib && ${MAKE} depend && \
575		${MAKE} ${MK_FLAGS} all && \
576		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
577.endif
578.if exists(usr.bin/lex/lib)
579	cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \
580		${MAKE} ${MK_FLAGS} all && \
581		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
582.endif
583.if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
584	cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && \
585		${MAKE} ${MK_FLAGS} all && \
586		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
587.endif
588.if exists(usr.sbin/pcvt/keycap)
589	cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${MAKE} depend && \
590		${MAKE} ${MK_FLAGS} all && \
591		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
592.endif
593
594#
595# build-tools - build and install any other tools needed to complete the
596# compile and install.
597# ifdef stale
598# bc and cpp are required to build groff.  Otherwise, the order here is
599# mostly historical, i.e., bogus.
600# chmod is used to build gcc's tmpmultilib[2] at obscure times.
601# endif stale
602# XXX uname is a bug - the target should not depend on the host.
603#
604build-tools:
605.for d in				\
606		bin/cat 		\
607		bin/chmod		\
608		bin/cp 			\
609		bin/date		\
610		bin/dd			\
611		bin/echo		\
612		bin/expr		\
613		bin/hostname		\
614		bin/ln			\
615		bin/ls			\
616		bin/mkdir		\
617		bin/mv			\
618		bin/rm			\
619		bin/sh			\
620		bin/test		\
621		gnu/usr.bin/awk		\
622		gnu/usr.bin/bc		\
623		gnu/usr.bin/grep	\
624		gnu/usr.bin/groff	\
625		gnu/usr.bin/gzip	\
626		gnu/usr.bin/man/makewhatis	\
627		gnu/usr.bin/sort	\
628		gnu/usr.bin/texinfo     \
629		share/info		\
630		usr.bin/basename	\
631		usr.bin/cap_mkdb	\
632		usr.bin/chflags		\
633		usr.bin/cmp		\
634		usr.bin/col		\
635		usr.bin/cpp		\
636		usr.bin/expand		\
637		usr.bin/file2c		\
638		usr.bin/find		\
639		usr.bin/gencat		\
640		usr.bin/lorder		\
641		usr.bin/m4		\
642		usr.bin/mkdep		\
643		usr.bin/paste		\
644		usr.bin/sed		\
645		usr.bin/size		\
646		usr.bin/soelim		\
647		usr.bin/strip		\
648		usr.bin/symorder	\
649		usr.bin/touch		\
650		usr.bin/tr		\
651		usr.bin/true		\
652		usr.bin/uname		\
653		usr.bin/uuencode	\
654		usr.bin/vgrind		\
655		usr.bin/vi		\
656		usr.bin/wc		\
657		usr.bin/yacc		\
658		usr.sbin/chown		\
659		usr.sbin/mtree		\
660		usr.sbin/zic
661	cd ${.CURDIR}/$d && ${MAKE} depend && \
662		${MAKE} ${MK_FLAGS} all && \
663		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
664.endfor
665
666.for __target in clean cleandir obj depend
667.for entry in ${SUBDIR}
668${entry}.${__target}__D: .PHONY
669	if test -d ${.CURDIR}/${entry}.${MACHINE}; then \
670		${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \
671		edir=${entry}.${MACHINE}; \
672		cd ${.CURDIR}/$${edir}; \
673	else \
674		${ECHODIR} "===> ${DIRPRFX}${entry}"; \
675		edir=${entry}; \
676		cd ${.CURDIR}/$${edir}; \
677	fi; \
678	${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
679.endfor
680par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
681.endfor
682
683.include <bsd.subdir.mk>
684