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