]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - Makefile
Don't build perl in build-tools: if NOPERL is defined.
[FreeBSD/FreeBSD.git] / Makefile
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.
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                 OBJFORMAT_PATH=${WORLDTMP}/usr/libexec:/usr/libexec
218 XMAKEENV=       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
223 MAKETMP=        ${WORLDTMP}/make
224 IBMAKE= ${BMAKEENV} MAKEOBJDIR=${MAKETMP} ${MAKE} DESTDIR=${WORLDTMP}
225 # bootstrap make
226 BMAKE=  ${BMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
227 # cross make used for compilation
228 XMAKE=  ${XMAKEENV} ${WORLDTMP}/usr/bin/make DESTDIR=${WORLDTMP}
229 # cross make used for final installation
230 IXMAKE= ${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 #
238 buildworld:
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 #
340 installworld:
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 #
350 reinstall:
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 #
377 update:
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 #
402 most:
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 #
427 installmost:
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 #
460 hierarchy:
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 #
468 bootstrap:
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 #
510 include-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 #
521 includes:
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.
590 lib-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 #
666 bootstrap-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 #
686 libraries:
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 #
719 build-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
798 par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
799 .endfor
800
801 .endif
802
803 .include <bsd.subdir.mk>