]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - Makefile
This commit was generated by cvs2svn to compensate for changes in r36201,
[FreeBSD/FreeBSD.git] / Makefile
1 #
2 #       $Id: Makefile,v 1.178 1998/05/16 22:20:44 jb 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.
49 SUBDIR=
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)
55 SUBDIR+= 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)
61 SUBDIR+= include
62 .endif
63 .if exists(lib)
64 SUBDIR+= lib
65 .endif
66
67 .if exists(bin)
68 SUBDIR+= bin
69 .endif
70 .if exists(games) && !defined(NOGAMES)
71 SUBDIR+= games
72 .endif
73 .if exists(gnu)
74 SUBDIR+= gnu
75 .endif
76 .if exists(kerberosIV) && exists(crypto) && !defined(NOCRYPT) && \
77     defined(MAKE_KERBEROS4)
78 SUBDIR+= kerberosIV
79 .endif
80 .if exists(libexec)
81 SUBDIR+= libexec
82 .endif
83 .if exists(sbin)
84 SUBDIR+= sbin
85 .endif
86 .if exists(share) && !defined(NOSHARE)
87 SUBDIR+= share
88 .endif
89 .if exists(sys)
90 SUBDIR+= sys
91 .endif
92 .if exists(usr.bin)
93 SUBDIR+= usr.bin
94 .endif
95 .if exists(usr.sbin)
96 SUBDIR+= usr.sbin
97 .endif
98 .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
99 SUBDIR+= secure
100 .endif
101 .if exists(lkm) && !defined(NOLKM)
102 SUBDIR+= lkm
103 .endif
104
105 # etc must be last for "distribute" to work
106 .if exists(etc) && make(distribute)
107 SUBDIR+= 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)
115 SUBDIR+= ${_DIR}
116 .endif
117 .endfor
118 .endif
119
120 # Handle -DNOOBJDIR, -DNOCLEAN and -DNOCLEANDIR
121 .if defined(NOOBJDIR)
122 OBJDIR=
123 .else
124 OBJDIR=         obj
125 .endif
126
127 .if defined(NOCLEAN)
128 CLEANDIR=
129 .else
130 .if defined(NOCLEANDIR)
131 CLEANDIR=       clean cleandepend
132 .else
133 CLEANDIR=       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
146 SUP?=           cvsup
147 SUPFLAGS?=      -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)
157 MK_FLAGS=       -DNOINFO -DNOMAN         -DNOPROFILE
158 .else
159 MK_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 #
170 world:
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)
196 WORLDTMP=       ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp
197 .else
198 WORLDTMP=       /usr/obj${.CURDIR}/tmp
199 .endif
200 STRICTTMPPATH=  ${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/usr/bin
201 TMPPATH=        ${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?).
210 COMPILER_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
216 BMAKEENV=       PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t
217 XMAKEENV=       PATH=${STRICTTMPPATH} ${COMPILER_ENV} \
218                 CFLAGS="-nostdinc ${CFLAGS}"    # XXX -nostdlib
219
220 # used to compile and install 'make' in temporary build tree
221 MAKETMP=        ${WORLDTMP}/make
222 IBMAKE= ${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
223 # bootstrap make
224 BMAKE=  ${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
225 # cross make used for compilation
226 XMAKE=  ${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
227 # cross make used for final installation
228 IXMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/make
229
230 #
231 # buildworld
232 #
233 # Attempt to rebuild the entire system, with reasonable chance of
234 # success, regardless of how old your existing system is.
235 #
236 buildworld:
237 .if !defined(NOCLEAN)
238         @echo
239         @echo "--------------------------------------------------------------"
240         @echo " Cleaning up the temporary build tree"
241         @echo "--------------------------------------------------------------"
242         mkdir -p ${WORLDTMP}
243         chflags -R noschg ${WORLDTMP}/
244         rm -rf ${WORLDTMP}
245 .endif
246 .if !defined(NOTOOLS)
247         @echo
248         @echo "--------------------------------------------------------------"
249         @echo " Making make"
250         @echo "--------------------------------------------------------------"
251         mkdir -p ${WORLDTMP}/usr/bin ${MAKETMP}
252         ( \
253         cd ${.CURDIR}/usr.bin/make; \
254                 MAKEOBJDIRPREFIX=""; unset MAKEOBJDIRPREFIX; \
255                 ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all; \
256                 ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install; \
257                 ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean \
258         )
259 .endif
260         @echo
261         @echo "--------------------------------------------------------------"
262         @echo " Making hierarchy"
263         @echo "--------------------------------------------------------------"
264         cd ${.CURDIR}; ${BMAKE} hierarchy
265 .if !defined(NOCLEAN)
266         @echo
267         @echo "--------------------------------------------------------------"
268         @echo " Cleaning up the obj tree"
269         @echo "--------------------------------------------------------------"
270         cd ${.CURDIR}; ${BMAKE} ${CLEANDIR:S/^/par-/}
271 .endif
272 .if !defined(NOOBJDIR)
273         @echo
274         @echo "--------------------------------------------------------------"
275         @echo " Rebuilding the obj tree"
276         @echo "--------------------------------------------------------------"
277         cd ${.CURDIR}; ${BMAKE} par-${OBJDIR}
278 .endif
279 .if !defined(NOTOOLS)
280         @echo
281         @echo "--------------------------------------------------------------"
282         @echo " Rebuilding bootstrap tools"
283         @echo "--------------------------------------------------------------"
284         cd ${.CURDIR}; ${BMAKE} bootstrap
285         @echo
286         @echo "--------------------------------------------------------------"
287         @echo " Rebuilding tools necessary to build the include files"
288         @echo "--------------------------------------------------------------"
289         cd ${.CURDIR}; ${BMAKE} include-tools
290 .endif
291         @echo
292         @echo "--------------------------------------------------------------"
293         @echo " Rebuilding ${DESTDIR}/usr/include"
294         @echo "--------------------------------------------------------------"
295         cd ${.CURDIR}; SHARED=symlinks ${BMAKE} includes
296         @echo
297         @echo "--------------------------------------------------------------"
298         @echo " Rebuilding bootstrap libraries"
299         @echo "--------------------------------------------------------------"
300         cd ${.CURDIR}; ${BMAKE} bootstrap-libraries
301 .if !defined(NOTOOLS)
302         @echo
303         @echo "--------------------------------------------------------------"
304         @echo " Rebuilding tools needed to build libraries"
305         @echo "--------------------------------------------------------------"
306         cd ${.CURDIR}; ${BMAKE} lib-tools
307 .endif
308 .if !defined(NOTOOLS)
309         @echo
310         @echo "--------------------------------------------------------------"
311         @echo " Rebuilding all other tools needed to build the world"
312         @echo "--------------------------------------------------------------"
313         cd ${.CURDIR}; ${BMAKE} build-tools
314 .endif
315 .if !defined(_NODEPEND)
316         @echo
317         @echo "--------------------------------------------------------------"
318         @echo " Rebuilding dependencies"
319         @echo "--------------------------------------------------------------"
320         cd ${.CURDIR}; ${XMAKE} par-depend
321 .endif
322         @echo
323         @echo "--------------------------------------------------------------"
324         @echo " Building libraries"
325         @echo "--------------------------------------------------------------"
326         cd ${.CURDIR}; ${XMAKE} -DNOINFO -DNOMAN libraries
327         @echo
328         @echo "--------------------------------------------------------------"
329         @echo " Building everything.."
330         @echo "--------------------------------------------------------------"
331         cd ${.CURDIR}; ${XMAKE} all
332
333 #
334 # installworld
335 #
336 # Installs everything compiled by a 'buildworld'.
337 #
338 installworld:
339         cd ${.CURDIR}; ${IXMAKE} reinstall
340
341 #
342 # reinstall
343 #
344 # If you have a build server, you can NFS mount the source and obj directories
345 # and do a 'make reinstall' on the *client* to install new binaries from the
346 # most recent server build.
347 #
348 reinstall:
349         @echo "--------------------------------------------------------------"
350         @echo " Making hierarchy"
351         @echo "--------------------------------------------------------------"
352         cd ${.CURDIR}; ${MAKE} hierarchy
353         @echo
354         @echo "--------------------------------------------------------------"
355         @echo " Installing everything.."
356         @echo "--------------------------------------------------------------"
357         cd ${.CURDIR}; ${MAKE} install
358         @echo
359         @echo "--------------------------------------------------------------"
360         @echo " Re-scanning the shared libraries.."
361         @echo "--------------------------------------------------------------"
362         cd ${.CURDIR}; ldconfig -R
363         @echo
364         @echo "--------------------------------------------------------------"
365         @echo " Rebuilding man page indexes"
366         @echo "--------------------------------------------------------------"
367         cd ${.CURDIR}/share/man; ${MAKE} makedb
368
369 #
370 # update
371 #
372 # Update the source tree, by running sup and/or running cvs to update to the
373 # latest copy.
374 #
375 update:
376 .if defined(SUP_UPDATE)
377         @echo "--------------------------------------------------------------"
378         @echo "Running ${SUP}"
379         @echo "--------------------------------------------------------------"
380         @${SUP} ${SUPFLAGS} ${SUPFILE}
381 .if defined(SUPFILE1)
382         @${SUP} ${SUPFLAGS} ${SUPFILE1}
383 .endif
384 .if defined(SUPFILE2)
385         @${SUP} ${SUPFLAGS} ${SUPFILE2}
386 .endif
387 .endif
388 .if defined(CVS_UPDATE)
389         @echo "--------------------------------------------------------------"
390         @echo "Updating /usr/src from cvs repository" ${CVSROOT}
391         @echo "--------------------------------------------------------------"
392         cd ${.CURDIR}; cvs -q update -P -d
393 .endif
394
395 #
396 # most
397 #
398 # Build most of the user binaries on the existing system libs and includes.
399 #
400 most:
401         @echo "--------------------------------------------------------------"
402         @echo " Building programs only"
403         @echo "--------------------------------------------------------------"
404         cd ${.CURDIR}/bin;              ${MAKE} all
405         cd ${.CURDIR}/sbin;             ${MAKE} all
406         cd ${.CURDIR}/libexec;          ${MAKE} all
407         cd ${.CURDIR}/usr.bin;          ${MAKE} all
408         cd ${.CURDIR}/usr.sbin;         ${MAKE} all
409         cd ${.CURDIR}/gnu/libexec;      ${MAKE} all
410         cd ${.CURDIR}/gnu/usr.bin;      ${MAKE} all
411         cd ${.CURDIR}/gnu/usr.sbin;     ${MAKE} all
412 #.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
413 #       cd ${.CURDIR}/kerberosIV;       ${MAKE} most
414 #.endif
415 #.if !defined(NOSECURE) && !defined(NOCRYPT)
416 #       cd ${.CURDIR}/secure;           ${MAKE} most
417 #.endif
418
419 #
420 # installmost
421 #
422 # Install the binaries built by the 'most' target.  This does not include
423 # libraries or include files.
424 #
425 installmost:
426         @echo "--------------------------------------------------------------"
427         @echo " Installing programs only"
428         @echo "--------------------------------------------------------------"
429         cd ${.CURDIR}/bin;              ${MAKE} install
430         cd ${.CURDIR}/sbin;             ${MAKE} install
431         cd ${.CURDIR}/libexec;          ${MAKE} install
432         cd ${.CURDIR}/usr.bin;          ${MAKE} install
433         cd ${.CURDIR}/usr.sbin;         ${MAKE} install
434         cd ${.CURDIR}/gnu/libexec;      ${MAKE} install
435         cd ${.CURDIR}/gnu/usr.bin;      ${MAKE} install
436         cd ${.CURDIR}/gnu/usr.sbin;     ${MAKE} install
437 #.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT)
438 #       cd ${.CURDIR}/kerberosIV;       ${MAKE} installmost
439 #.endif
440 #.if !defined(NOSECURE) && !defined(NOCRYPT)
441 #       cd ${.CURDIR}/secure;           ${MAKE} installmost
442 #.endif
443
444 #
445 # ------------------------------------------------------------------------
446 #
447 # From here onwards are utility targets used by the 'make world' and
448 # related targets.  If your 'world' breaks, you may like to try to fix
449 # the problem and manually run the following targets to attempt to
450 # complete the build.  Beware, this is *not* guaranteed to work, you
451 # need to have a pretty good grip on the current state of the system
452 # to attempt to manually finish it.  If in doubt, 'make world' again.
453 #
454
455 #
456 # heirarchy - ensure that all the needed directories are present
457 #
458 hierarchy:
459         cd ${.CURDIR}/etc;              ${MAKE} distrib-dirs
460
461 #
462 # bootstrap - [re]build tools needed to run the actual build, this includes
463 # tools needed by 'make depend', as some tools are needed to generate source
464 # for the dependency information to be gathered from.
465 #
466 bootstrap:
467 .if defined(DESTDIR)
468         rm -f ${DESTDIR}/usr/src/sys
469         ln -s ${.CURDIR}/sys ${DESTDIR}/usr/src
470         cd ${.CURDIR}/include; find -dx . | cpio -dump ${DESTDIR}/usr/include
471         cd ${.CURDIR}/include; ${MAKE} symlinks
472 .endif
473         cd ${.CURDIR}/usr.bin/make; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
474                 ${MAKE} ${MK_FLAGS} all; \
475                 ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
476         cd ${.CURDIR}/usr.bin/xinstall; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
477                 ${MAKE} ${MK_FLAGS} all; \
478                 ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
479         cd ${.CURDIR}/usr.bin/lex; ${MAKE} bootstrap; \
480                 ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
481                 ${MAKE} ${MK_FLAGS} -DNOLIB all; \
482                 ${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR}
483 .if !defined(NOOBJDIR)
484         cd ${.CURDIR}/usr.bin/lex; ${MAKE} ${OBJDIR}
485 .endif
486
487 #
488 # include-tools - generally the same as 'bootstrap', except that it's for
489 # things that are specifically needed to generate include files.
490 #
491 # XXX should be merged with bootstrap, it's not worth keeeping them separate.
492 # Well, maybe it is now.  We force 'cleandepend' here to avoid dependencies
493 # on cleaned away headers in ${WORLDTMP}.
494 #
495 include-tools:
496 .for d in usr.bin/compile_et usr.bin/rpcgen
497         cd ${.CURDIR}/$d; ${MAKE} cleandepend; \
498                 ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
499                 ${MAKE} ${MK_FLAGS} all; \
500                 ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
501 .endfor
502
503 #
504 # includes - possibly generate and install the include files.
505 #
506 includes:
507 .if defined(CLOBBER)
508         rm -rf ${DESTDIR}/usr/include/*
509         mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
510                 -p ${DESTDIR}/usr/include
511 .endif
512         cd ${.CURDIR}/include;                  ${MAKE} -B all install
513         cd ${.CURDIR}/gnu/include;              ${MAKE} install
514         cd ${.CURDIR}/gnu/lib/libmp;            ${MAKE} beforeinstall
515         cd ${.CURDIR}/gnu/lib/libobjc;          ${MAKE} beforeinstall
516         cd ${.CURDIR}/gnu/lib/libreadline;      ${MAKE} beforeinstall
517         cd ${.CURDIR}/gnu/lib/libregex;         ${MAKE} beforeinstall
518         cd ${.CURDIR}/gnu/lib/libstdc++;        ${MAKE} beforeinstall
519         cd ${.CURDIR}/gnu/lib/libg++;           ${MAKE} beforeinstall
520         cd ${.CURDIR}/gnu/lib/libdialog;        ${MAKE} beforeinstall
521         cd ${.CURDIR}/gnu/lib/libgmp;           ${MAKE} beforeinstall
522 .if exists(secure) && !defined(NOCRYPT)
523         cd ${.CURDIR}/secure/lib/libdes;        ${MAKE} beforeinstall
524 .endif
525 .if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
526         cd ${.CURDIR}/kerberosIV/lib/libacl;    ${MAKE} beforeinstall
527         cd ${.CURDIR}/kerberosIV/lib/libkadm;   ${MAKE} beforeinstall
528         cd ${.CURDIR}/kerberosIV/lib/libkafs;   ${MAKE} beforeinstall
529         cd ${.CURDIR}/kerberosIV/lib/libkdb;    ${MAKE} beforeinstall
530         cd ${.CURDIR}/kerberosIV/lib/libkrb;    ${MAKE} beforeinstall
531         cd ${.CURDIR}/kerberosIV/lib/libtelnet; ${MAKE} beforeinstall
532 .else
533         cd ${.CURDIR}/lib/libtelnet;            ${MAKE} beforeinstall
534 .endif
535 .if exists(${.CURDIR}/lib/csu/${MACHINE})
536         cd ${.CURDIR}/lib/csu/${MACHINE};       ${MAKE} beforeinstall
537 .endif
538         cd ${.CURDIR}/lib/libalias;             ${MAKE} beforeinstall
539         cd ${.CURDIR}/lib/libc;                 ${MAKE} beforeinstall
540         cd ${.CURDIR}/lib/libcalendar;          ${MAKE} beforeinstall
541         cd ${.CURDIR}/lib/libcurses;            ${MAKE} beforeinstall
542         cd ${.CURDIR}/lib/libdisk;              ${MAKE} beforeinstall
543         cd ${.CURDIR}/lib/libedit;              ${MAKE} beforeinstall
544         cd ${.CURDIR}/lib/libftpio;             ${MAKE} beforeinstall
545         cd ${.CURDIR}/lib/libmd;                ${MAKE} beforeinstall
546         cd ${.CURDIR}/lib/libmytinfo;           ${MAKE} beforeinstall
547         cd ${.CURDIR}/lib/libncurses;           ${MAKE} beforeinstall
548 .if !defined(WANT_CSRG_LIBM)
549         cd ${.CURDIR}/lib/msun;                 ${MAKE} beforeinstall
550 .endif
551         cd ${.CURDIR}/lib/libopie;              ${MAKE} beforeinstall
552         cd ${.CURDIR}/lib/libpcap;              ${MAKE} beforeinstall
553         cd ${.CURDIR}/lib/librpcsvc;            ${MAKE} beforeinstall
554         cd ${.CURDIR}/lib/libskey;              ${MAKE} beforeinstall
555 .if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \
556         exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl)
557         cd ${.CURDIR}/lib/libtcl;               ${MAKE} installhdrs
558 .endif
559         cd ${.CURDIR}/lib/libtermcap;           ${MAKE} beforeinstall
560         cd ${.CURDIR}/lib/libcom_err;           ${MAKE} beforeinstall
561         cd ${.CURDIR}/lib/libss;                ${MAKE} -B hdrs beforeinstall
562         cd ${.CURDIR}/lib/libscsi;              ${MAKE} beforeinstall
563         cd ${.CURDIR}/lib/libutil;              ${MAKE} beforeinstall
564         cd ${.CURDIR}/lib/libvgl;               ${MAKE} beforeinstall
565         cd ${.CURDIR}/lib/libz;                 ${MAKE} beforeinstall
566         cd ${.CURDIR}/usr.bin/f2c;              ${MAKE} beforeinstall
567         cd ${.CURDIR}/usr.bin/lex;              ${MAKE} beforeinstall
568
569 #
570 # lib-tools - build tools to compile and install the libraries.
571 #
572 # XXX gperf is required for cc
573 # XXX a new ld and tsort is required for cc
574 lib-tools:
575 .for d in                               \
576                 gnu/usr.bin/gperf       \
577                 gnu/usr.bin/ld          \
578                 usr.bin/tsort           \
579                 gnu/usr.bin/as          \
580                 gnu/usr.bin/bison       \
581                 gnu/usr.bin/cc          \
582                 usr.bin/ar              \
583                 usr.bin/lex/lib         \
584                 usr.bin/mk_cmds         \
585                 usr.bin/nm              \
586                 usr.bin/ranlib          \
587                 usr.bin/uudecode
588         cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
589                 ${MAKE} ${MK_FLAGS} all; \
590                 ${MAKE} ${MK_FLAGS} -B install; \
591                 ${MAKE} ${MK_FLAGS:S/-DNOPIC//} -B ${CLEANDIR} ${OBJDIR}
592 .endfor
593
594 #
595 # We have to know too much about ordering and subdirs in the lib trees:
596 #
597 # To satisfy shared library linkage when only the libraries being built
598 # are visible:
599 #
600 # libcom_err must be built before libss.
601 # libcrypt and libmd must be built before libskey.
602 # libm must be built before libtcl.
603 # libmytinfo must be built before libdialog and libncurses.
604 # libncurses must be built before libdialog.
605 # libtermcap must be built before libcurses, libedit and libreadline.
606 #
607 # Some libraries are built conditionally and/or are in inconsistently
608 # named directories:
609 #
610 .if exists(lib/csu/${MACHINE}.pcc)
611 _csu=lib/csu/${MACHINE}.pcc
612 .else
613 _csu=lib/csu/${MACHINE}
614 .endif
615
616 _libcrypt=      lib/libcrypt
617 .if !defined(NOSECURE) && !defined(NOCRYPT)
618 _libcrypt+=     secure/lib/libcrypt
619 .endif
620
621 .if defined(WANT_CSRG_LIBM)
622 _libm=  lib/libm
623 .else
624 _libm=  lib/msun
625 .endif
626
627 #
628 # bootstrap-libraries - build just enough libraries for the bootstrap
629 # tools, and install them under ${WORLDTMP}.
630 #
631 # Build csu and libgcc early so that some tools get linked to the new
632 # versions (too late for the main tools, however).  Then build the
633 # necessary prerequisite libraries (libtermcap just needs to be before
634 # libcurses, and this only matters for the NOCLEAN case when NOPIC is
635 # not set).
636 #
637 # This is mostly wrong.  The build tools must run on the host system,
638 # so they should use host libraries.  We depend on the target being
639 # similar enough to the host for new target libraries to work on the
640 # host.
641 #
642 bootstrap-libraries:
643 .for _lib in ${_csu} gnu/usr.bin/cc/libgcc lib/libtermcap \
644     gnu/lib/libregex lib/libc lib/libcurses lib/libedit ${_libm} \
645     lib/libmd lib/libutil lib/libz usr.bin/lex/lib
646 .if exists(${.CURDIR}/${_lib})
647         cd ${.CURDIR}/${_lib}; \
648                 ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
649                 ${MAKE} ${MK_FLAGS} all; \
650                 ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
651 .endif
652 .endfor
653
654 #
655 # libraries - build all libraries, and install them under ${DESTDIR}.
656 #
657 # The ordering is not as special as for bootstrap-libraries.  Build
658 # the prerequisites first, then build almost everything else in
659 # alphabetical order.
660 #
661 libraries:
662 .for _lib in lib/libcom_err ${_libcrypt} ${_libm} lib/libmytinfo \
663     lib/libncurses lib/libtermcap \
664     gnu/lib gnu/usr.bin/cc/libgcc lib usr.bin/lex/lib usr.sbin/pcvt/keycap
665 .if exists(${.CURDIR}/${_lib})
666         cd ${.CURDIR}/${_lib}; ${MAKE} all; ${MAKE} -B install
667 .endif
668 .endfor
669 .if exists(${.CURDIR}/secure/lib) && !defined(NOCRYPT) && !defined(NOSECURE)
670         cd ${.CURDIR}/secure/lib; ${MAKE} all; ${MAKE} -B install
671 .endif
672 .if exists(${.CURDIR}/kerberosIV/lib) && !defined(NOCRYPT) && \
673     defined(MAKE_KERBEROS4)
674         cd ${.CURDIR}/kerberosIV/lib; ${MAKE} all; ${MAKE} -B install
675 .endif
676
677 #
678 # build-tools - build and install any other tools needed to complete the
679 # compile and install.
680 # ifdef stale
681 # bc and cpp are required to build groff.  Otherwise, the order here is
682 # mostly historical, i.e., bogus.
683 # chmod is used to build gcc's tmpmultilib[2] at obscure times.
684 # endif stale
685 # XXX uname is a bug - the target should not depend on the host.
686 #
687 build-tools:
688 .for d in                               \
689                 bin/cat                 \
690                 bin/chmod               \
691                 bin/cp                  \
692                 bin/date                \
693                 bin/dd                  \
694                 bin/echo                \
695                 bin/expr                \
696                 bin/hostname            \
697                 bin/ln                  \
698                 bin/ls                  \
699                 bin/mkdir               \
700                 bin/mv                  \
701                 bin/rm                  \
702                 bin/sh                  \
703                 bin/test                \
704                 gnu/usr.bin/awk         \
705                 gnu/usr.bin/bc          \
706                 gnu/usr.bin/grep        \
707                 gnu/usr.bin/groff       \
708                 gnu/usr.bin/gzip        \
709                 gnu/usr.bin/man/makewhatis      \
710                 gnu/usr.bin/patch       \
711                 gnu/usr.bin/perl/perl   \
712                 gnu/usr.bin/sort        \
713                 gnu/usr.bin/texinfo     \
714                 usr.bin/basename        \
715                 usr.bin/cap_mkdb        \
716                 usr.bin/chflags         \
717                 usr.bin/cmp             \
718                 usr.bin/col             \
719                 usr.bin/cpp             \
720                 usr.bin/expand          \
721                 usr.bin/file2c          \
722                 usr.bin/find            \
723                 usr.bin/gencat          \
724                 usr.bin/lorder          \
725                 usr.bin/m4              \
726                 usr.bin/mkdep           \
727                 usr.bin/paste           \
728                 usr.bin/sed             \
729                 usr.bin/size            \
730                 usr.bin/soelim          \
731                 usr.bin/strip           \
732                 usr.bin/symorder        \
733                 usr.bin/touch           \
734                 usr.bin/tr              \
735                 usr.bin/true            \
736                 usr.bin/uname           \
737                 usr.bin/uuencode        \
738                 usr.bin/vgrind          \
739                 usr.bin/vi              \
740                 usr.bin/wc              \
741                 usr.bin/xargs           \
742                 usr.bin/yacc            \
743                 usr.sbin/chown          \
744                 usr.sbin/mtree          \
745                 usr.sbin/zic
746         cd ${.CURDIR}/$d; ${MAKE} ${MK_FLAGS} ${_DEPEND}; \
747                 ${MAKE} ${MK_FLAGS} all; \
748                 ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
749 .endfor
750
751 .for __target in clean cleandepend cleandir depend obj
752 .for entry in ${SUBDIR}
753 ${entry}.${__target}__D: .PHONY
754         @if test -d ${.CURDIR}/${entry}.${MACHINE}; then \
755                 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \
756                 edir=${entry}.${MACHINE}; \
757                 cd ${.CURDIR}/$${edir}; \
758         else \
759                 ${ECHODIR} "===> ${DIRPRFX}${entry}"; \
760                 edir=${entry}; \
761                 cd ${.CURDIR}/$${edir}; \
762         fi; \
763         ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
764 .endfor
765 par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
766 .endfor
767
768 .endif
769
770 .include <bsd.subdir.mk>