ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/release/0.7.5/Makefile.inc1
Revision: 4290
Committed: Sat Oct 22 19:19:33 2011 UTC (12 years, 8 months ago) by laffer1
Original Path: trunk/Makefile.inc1
File size: 41758 byte(s)
Log Message:
Create new targets to aid in the transition to a live cd based install.

File Contents

# User Rev Content
1 laffer1 2 #
2 laffer1 5 # $FreeBSD: src/Makefile.inc1,v 1.499.2.7 2006/01/07 19:40:08 netchild Exp $
3 laffer1 4290 # $MidnightBSD: src/Makefile.inc1,v 1.30 2011/08/13 21:20:12 laffer1 Exp $
4 laffer1 2 #
5     # Make command line options:
6     # -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
7     # -DNO_CLEAN do not clean at all
8     # -DNO_SHARE do not go into share subdir
9     # -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
10     # -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
11     # -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
12     # -DNO_PORTSUPDATE do not update ports in ${MAKE} update
13     # -DNO_DOCUPDATE do not update doc in ${MAKE} update
14     # LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
15 laffer1 1926 # TARGET="machine" to crossbuild world for a different machine type
16 laffer1 2
17     #
18     # The intended user-driven targets are:
19     # buildworld - rebuild *everything*, including glue to help do upgrades
20     # installworld- install everything built by "buildworld"
21 laffer1 1926 # doxygen - build API documentation of the kernel
22 laffer1 2 # update - convenient way to update your source tree (eg: cvsup/cvs)
23     #
24     # Standard targets (not defined here) are documented in the makefiles in
25     # /usr/share/mk. These include:
26     # obj depend all install clean cleandepend cleanobj
27    
28 laffer1 4290 # You are supposed to define both of these when calling Makefile.inc1
29     # directly. However, some old scripts don't. Cope for the moment, but
30     # issue a new warning for a transition period.
31     .if defined(TARGET) && !defined(TARGET_ARCH)
32     .warning "You must pass both TARGET and TARGET_ARCH to Makefile.inc1. Setting TARGET_ARCH=${TARGET}."
33     TARGET_ARCH=${TARGET}
34     .endif
35     .if !defined(TARGET) || !defined(TARGET_ARCH)
36     .error "Both TARGET and TARGET_ARCH must be defined."
37     .endif
38    
39 laffer1 1926 .include <bsd.own.mk>
40    
41 laffer1 2 # We must do share/info early so that installation of info `dir'
42     # entries works correctly. Do it first since it is less likely to
43     # grow dependencies on include and lib than vice versa.
44     #
45 laffer1 1926 # We must do lib/ and libexec/ before bin/, because if installworld
46 laffer1 2 # installs a new /bin/sh, the 'make' command will *immediately*
47     # use that new version. And the new (dynamically-linked) /bin/sh
48     # will expect to find appropriate libraries in /lib and /libexec.
49     #
50 laffer1 1926 SUBDIR= share/info lib libexec
51     SUBDIR+=bin
52 laffer1 3446 .if ${MK_APACHE} != "no"
53     SUBDIR+=apache
54     .endif
55 laffer1 1926 .if ${MK_GAMES} != "no"
56 laffer1 2 SUBDIR+=games
57     .endif
58 laffer1 1926 .if ${MK_CDDL} != "no"
59     SUBDIR+=cddl
60     .endif
61     SUBDIR+=gnu include
62     .if ${MK_KERBEROS} != "no"
63 laffer1 2 SUBDIR+=kerberos5
64     .endif
65 laffer1 1926 .if ${MK_RESCUE} != "no"
66 laffer1 2 SUBDIR+=rescue
67     .endif
68     SUBDIR+=sbin
69 laffer1 1926 .if ${MK_CRYPT} != "no"
70 laffer1 2 SUBDIR+=secure
71     .endif
72     .if !defined(NO_SHARE)
73     SUBDIR+=share
74     .endif
75 laffer1 1926 SUBDIR+=sys usr.bin usr.sbin
76     #
77     # We must do etc/ last for install/distribute to work.
78     #
79     SUBDIR+=etc
80 laffer1 2
81     # These are last, since it is nice to at least get the base system
82     # rebuilt before you do them.
83     .for _DIR in ${LOCAL_DIRS}
84     .if exists(${.CURDIR}/${_DIR}/Makefile)
85     SUBDIR+= ${_DIR}
86     .endif
87     .endfor
88    
89     .if defined(SUBDIR_OVERRIDE)
90     SUBDIR= ${SUBDIR_OVERRIDE}
91     .endif
92    
93     .if defined(NOCLEAN)
94     NO_CLEAN= ${NOCLEAN}
95     .endif
96     .if defined(NO_CLEANDIR)
97     CLEANDIR= clean cleandepend
98     .else
99     CLEANDIR= cleandir
100     .endif
101    
102     CVS?= cvs
103 laffer1 359 CVSFLAGS?= -r . -P -d -I!
104 laffer1 2741 SUP?= /usr/local/bin/cvsup
105 laffer1 1926 SUPFLAGS?= -g -L 2
106 laffer1 2 .if defined(SUPHOST)
107     SUPFLAGS+= -h ${SUPHOST}
108     .endif
109    
110     MAKEOBJDIRPREFIX?= /usr/obj
111     .if !defined(OSRELDATE)
112     .if exists(/usr/include/osreldate.h)
113 laffer1 2741 OSRELDATE!= awk '/^\#define[[:space:]]*__MidnightBSD_version/ { print $$3 }' \
114 laffer1 2 /usr/include/osreldate.h
115     .else
116     OSRELDATE= 0
117     .endif
118     .endif
119 laffer1 1926
120     # Guess machine architecture from machine type, and vice versa.
121     .if !defined(TARGET_ARCH) && defined(TARGET)
122 laffer1 4290 TARGET_ARCH= ${TARGET}
123 laffer1 1926 .elif !defined(TARGET) && defined(TARGET_ARCH) && \
124     ${TARGET_ARCH} != ${MACHINE_ARCH}
125     TARGET= ${TARGET_ARCH}
126     .endif
127     # Otherwise, default to current machine type and architecture.
128     TARGET?= ${MACHINE}
129 laffer1 2 TARGET_ARCH?= ${MACHINE_ARCH}
130 laffer1 1926
131 laffer1 4290 KNOWN_ARCHES?= amd64 i386 sparc64
132 laffer1 1926 .if ${TARGET} == ${TARGET_ARCH}
133     _t= ${TARGET}
134     .else
135     _t= ${TARGET_ARCH}/${TARGET}
136     .endif
137     .for _t in ${_t}
138     .if empty(KNOWN_ARCHES:M${_t})
139     .error Unknown target ${TARGET_ARCH}:${TARGET}.
140     .endif
141     .endfor
142    
143     .if ${TARGET} == ${MACHINE}
144 laffer1 2 TARGET_CPUTYPE?=${CPUTYPE}
145     .else
146     TARGET_CPUTYPE?=
147     .endif
148 laffer1 1926
149 laffer1 2 .if !empty(TARGET_CPUTYPE)
150     _TARGET_CPUTYPE=${TARGET_CPUTYPE}
151     .else
152     _TARGET_CPUTYPE=dummy
153     .endif
154     _CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \
155     -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE
156     .if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
157     .error CPUTYPE global should be set with ?=.
158     .endif
159     .if make(buildworld)
160 laffer1 1926 BUILD_ARCH!= uname -p
161 laffer1 2 .if ${MACHINE_ARCH} != ${BUILD_ARCH}
162     .error To cross-build, set TARGET_ARCH.
163     .endif
164     .endif
165 laffer1 3495 .if ${MACHINE} == ${TARGET} && ${MACHINE_ARCH} == ${TARGET_ARCH} && !defined(CROSS_BUILD_TESTING)
166 laffer1 2 OBJTREE= ${MAKEOBJDIRPREFIX}
167     .else
168 laffer1 3495 OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH}
169 laffer1 2 .endif
170     WORLDTMP= ${OBJTREE}${.CURDIR}/tmp
171     # /usr/games added for fortune which depend on strfile
172     BPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games
173     XPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
174     STRICTTMPPATH= ${BPATH}:${XPATH}
175     TMPPATH= ${STRICTTMPPATH}:${PATH}
176    
177 laffer1 4290 #
178     # Avoid running mktemp(1) unless actually needed.
179     # It may not be functional, e.g., due to new ABI
180     # when in the middle of installing over this system.
181     #
182     .if make(distributeworld) || make(installworld)
183 laffer1 2 INSTALLTMP!= /usr/bin/mktemp -d -u -t install
184 laffer1 4290 .endif
185 laffer1 2
186     #
187     # Building a world goes through the following stages
188     #
189     # 1. legacy stage [BMAKE]
190     # This stage is responsible for creating compatibility
191     # shims that are needed by the bootstrap-tools,
192     # build-tools and cross-tools stages.
193     # 1. bootstrap-tools stage [BMAKE]
194     # This stage is responsible for creating programs that
195     # are needed for backward compatibility reasons. They
196     # are not built as cross-tools.
197     # 2. build-tools stage [TMAKE]
198     # This stage is responsible for creating the object
199     # tree and building any tools that are needed during
200     # the build process.
201     # 3. cross-tools stage [XMAKE]
202     # This stage is responsible for creating any tools that
203     # are needed for cross-builds. A cross-compiler is one
204     # of them.
205     # 4. world stage [WMAKE]
206     # This stage actually builds the world.
207     # 5. install stage (optional) [IMAKE]
208     # This stage installs a previously built world.
209     #
210    
211     BOOTSTRAPPING?= 0
212    
213     # Common environment for world related stages
214     CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \
215     MACHINE_ARCH=${TARGET_ARCH} \
216     MACHINE=${TARGET} \
217     CPUTYPE=${TARGET_CPUTYPE} \
218     GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \
219     GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \
220     GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac
221    
222     # bootstrap-tools stage
223     BMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \
224     PATH=${BPATH}:${PATH} \
225     WORLDTMP=${WORLDTMP} \
226     MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}"
227     BMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \
228     ${BMAKEENV} ${MAKE} -f Makefile.inc1 \
229     DESTDIR= \
230     BOOTSTRAPPING=${OSRELDATE} \
231 laffer1 1926 -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT -DWITHOUT_MAN \
232     -DWITHOUT_NLS -DNO_PIC -DWITHOUT_PROFILE -DNO_SHARED \
233     -DNO_CPU_CFLAGS -DNO_WARNS
234 laffer1 2
235     # build-tools stage
236     TMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \
237     ${BMAKEENV} ${MAKE} -f Makefile.inc1 \
238 laffer1 1926 TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
239 laffer1 2 DESTDIR= \
240     BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS
241    
242     # cross-tools stage
243 laffer1 1926 XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} \
244     TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
245     -DWITHOUT_GDB
246 laffer1 2
247     # world stage
248     WMAKEENV= ${CROSSENV} \
249     _SHLIBDIRPREFIX=${WORLDTMP} \
250     INSTALL="sh ${.CURDIR}/tools/install.sh" \
251     PATH=${TMPPATH}
252     WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP}
253    
254     .if ${TARGET_ARCH} == "amd64"
255     # 32 bit world
256     LIB32TMP= ${OBJTREE}${.CURDIR}/lib32
257    
258 laffer1 1926 .if empty(TARGET_CPUTYPE)
259 laffer1 3046 LIB32CPUTYPE= k8
260 laffer1 1926 .else
261 laffer1 3046 LIB32CPUTYPE= ${TARGET_CPUTYPE}
262 laffer1 1926 .endif
263 laffer1 3046 LIB32FLAGS= -m32 -march=${LIB32CPUTYPE} -mfancy-math-387 -DCOMPAT_32BIT \
264 laffer1 1926 -iprefix ${LIB32TMP}/usr/ \
265 laffer1 2 -L${LIB32TMP}/usr/lib32 \
266     -B${LIB32TMP}/usr/lib32
267    
268     # Yes, the flags are redundant.
269 laffer1 1926 LIB32WMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \
270 laffer1 2 _SHLIBDIRPREFIX=${LIB32TMP} \
271     MACHINE=i386 \
272     MACHINE_ARCH=i386 \
273     INSTALL="sh ${.CURDIR}/tools/install.sh" \
274     PATH=${TMPPATH} \
275 laffer1 1926 CC="${CC} ${LIB32FLAGS}" \
276     CXX="${CXX} ${LIB32FLAGS}" \
277     OBJC="${OBJC} ${LIB32FLAGS}" \
278 laffer1 2 LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \
279     AS="${AS} --32" \
280     LIBDIR=/usr/lib32 \
281     SHLIBDIR=/usr/lib32
282    
283 laffer1 1926 LIB32WMAKE= ${LIB32WMAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \
284     -DWITHOUT_BIND -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_INFO \
285     -DWITHOUT_HTML DESTDIR=${LIB32TMP}
286     LIB32IMAKE= ${LIB32WMAKE:NINSTALL=*:NDESTDIR=*} -DNO_INCS
287 laffer1 2 .endif
288    
289     # install stage
290 laffer1 4290 IMAKEENV= ${CROSSENV}
291     IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1
292 laffer1 2 .if empty(.MAKEFLAGS:M-n)
293 laffer1 4290 IMAKEENV+= PATH=${STRICTTMPPATH}:${INSTALLTMP} \
294     LD_LIBRARY_PATH=${INSTALLTMP} \
295     PATH_LOCALE=${INSTALLTMP}/locale
296     IMAKE+= __MAKE_SHELL=${INSTALLTMP}/sh
297 laffer1 2 .else
298 laffer1 4290 IMAKEENV+= PATH=${TMPPATH}:${INSTALLTMP}
299 laffer1 2 .endif
300    
301     # kernel stage
302     KMAKEENV= ${WMAKEENV}
303 laffer1 1926 KMAKE= ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME}
304 laffer1 2
305     #
306     # buildworld
307     #
308     # Attempt to rebuild the entire system, with reasonable chance of
309     # success, regardless of how old your existing system is.
310     #
311     _worldtmp:
312     .if ${.CURDIR:C/[^,]//g} != ""
313     # The m4 build of sendmail files doesn't like it if ',' is used
314     # anywhere in the path of it's files.
315     @echo
316     @echo "*** Error: path to source tree contains a comma ','"
317     @echo
318     false
319     .endif
320     @echo
321     @echo "--------------------------------------------------------------"
322     @echo ">>> Rebuilding the temporary build tree"
323     @echo "--------------------------------------------------------------"
324     .if !defined(NO_CLEAN)
325     rm -rf ${WORLDTMP}
326     .if ${TARGET_ARCH} == "amd64"
327     rm -rf ${LIB32TMP}
328     .endif
329     .else
330     rm -rf ${WORLDTMP}/legacy/usr/include
331 laffer1 1926 # XXX - These two can depend on any header file.
332 laffer1 2 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
333 laffer1 4290 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/kdump_subr.c
334 laffer1 2 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
335     .endif
336     .for _dir in \
337 laffer1 4290 lib usr legacy/usr
338 laffer1 2 mkdir -p ${WORLDTMP}/${_dir}
339     .endfor
340 laffer1 4290 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
341     -p ${WORLDTMP}/legacy/usr >/dev/null
342     mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
343     -p ${WORLDTMP}/usr >/dev/null
344 laffer1 2 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
345     -p ${WORLDTMP}/usr/include >/dev/null
346     ln -sf ${.CURDIR}/sys ${WORLDTMP}
347 laffer1 1926 .if ${MK_BIND_LIBS} != "no"
348 laffer1 2 mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
349     -p ${WORLDTMP}/usr/include >/dev/null
350     .endif
351     _legacy:
352     @echo
353     @echo "--------------------------------------------------------------"
354     @echo ">>> stage 1.1: legacy release compatibility shims"
355     @echo "--------------------------------------------------------------"
356     ${_+_}cd ${.CURDIR}; ${BMAKE} legacy
357     _bootstrap-tools:
358     @echo
359     @echo "--------------------------------------------------------------"
360     @echo ">>> stage 1.2: bootstrap tools"
361     @echo "--------------------------------------------------------------"
362     ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools
363     _cleanobj:
364     .if !defined(NO_CLEAN)
365     @echo
366     @echo "--------------------------------------------------------------"
367     @echo ">>> stage 2.1: cleaning up the object tree"
368     @echo "--------------------------------------------------------------"
369     ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
370     .if ${TARGET_ARCH} == "amd64"
371 laffer1 1926 ${_+_}cd ${.CURDIR}; ${LIB32WMAKE} -f Makefile.inc1 ${CLEANDIR:S/^/par-/}
372 laffer1 2 .endif
373     .endif
374     _obj:
375     @echo
376     @echo "--------------------------------------------------------------"
377     @echo ">>> stage 2.2: rebuilding the object tree"
378     @echo "--------------------------------------------------------------"
379     ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj
380     _build-tools:
381     @echo
382     @echo "--------------------------------------------------------------"
383     @echo ">>> stage 2.3: build tools"
384     @echo "--------------------------------------------------------------"
385     ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools
386     _cross-tools:
387     @echo
388     @echo "--------------------------------------------------------------"
389     @echo ">>> stage 3: cross tools"
390     @echo "--------------------------------------------------------------"
391     ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools
392     _includes:
393     @echo
394     @echo "--------------------------------------------------------------"
395     @echo ">>> stage 4.1: building includes"
396     @echo "--------------------------------------------------------------"
397     ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
398     _libraries:
399     @echo
400     @echo "--------------------------------------------------------------"
401     @echo ">>> stage 4.2: building libraries"
402     @echo "--------------------------------------------------------------"
403     ${_+_}cd ${.CURDIR}; \
404 laffer1 1926 ${WMAKE} -DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \
405     -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE libraries
406 laffer1 2 _depend:
407     @echo
408     @echo "--------------------------------------------------------------"
409     @echo ">>> stage 4.3: make dependencies"
410     @echo "--------------------------------------------------------------"
411     ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend
412     everything:
413     @echo
414     @echo "--------------------------------------------------------------"
415     @echo ">>> stage 4.4: building everything"
416     @echo "--------------------------------------------------------------"
417     ${_+_}cd ${.CURDIR}; ${WMAKE} par-all
418     .if ${TARGET_ARCH} == "amd64"
419     build32:
420     @echo
421     @echo "--------------------------------------------------------------"
422     @echo ">>> stage 5.1: building 32 bit shim libraries"
423     @echo "--------------------------------------------------------------"
424 laffer1 4290 mkdir -p ${LIB32TMP}/usr/include
425     mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
426     -p ${LIB32TMP}/usr >/dev/null
427 laffer1 2 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
428     -p ${LIB32TMP}/usr/include >/dev/null
429     mkdir -p ${WORLDTMP}
430     ln -sf ${.CURDIR}/sys ${WORLDTMP}
431 laffer1 1926 .if ${MK_KERBEROS} != "no"
432 laffer1 2 .for _t in obj depend all
433     cd ${.CURDIR}/kerberos5/tools; \
434     MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t}
435     .endfor
436     .endif
437     .for _t in obj includes
438 laffer1 1926 cd ${.CURDIR}/include; ${LIB32WMAKE} ${_t}
439     cd ${.CURDIR}/lib; ${LIB32WMAKE} ${_t}
440 laffer1 3883 .if ${MK_APACHE} != "no"
441     cd ${.CURDIR}/apache/lib; ${LIB32WMAKE} ${_t}
442     .endif
443 laffer1 1926 .if ${MK_CDDL} != "no"
444 laffer1 4290 cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} DIRPRFX=cddl/lib/ ${_t}
445 laffer1 2 .endif
446 laffer1 4290 cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} DIRPRFX=gnu/lib/ ${_t}
447 laffer1 1926 .if ${MK_CRYPT} != "no"
448 laffer1 4290 cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} DIRPRFX=secure/lib/ ${_t}
449 laffer1 2 .endif
450 laffer1 1926 .if ${MK_KERBEROS} != "no"
451 laffer1 4290 cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} DIRPRFX=kerberos5/lib ${_t}
452 laffer1 1926 .endif
453 laffer1 2 .endfor
454 laffer1 1551 .for _dir in usr.bin/lex/lib
455 laffer1 4290 cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} DIRPRFX=${_dir}/ obj
456 laffer1 2 .endfor
457 laffer1 1926 .for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
458 laffer1 2 cd ${.CURDIR}/${_dir}; \
459 laffer1 4290 MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} SSP_CFLAGS= DESTDIR= \
460     DIRPRFX=${_dir}/ build-tools
461 laffer1 2 .endfor
462     cd ${.CURDIR}; \
463 laffer1 1926 ${LIB32WMAKE} -f Makefile.inc1 libraries
464 laffer1 2 .for _t in obj depend all
465 laffer1 4290 cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} \
466     DIRPRFX=libexec/rtld-elf/ ${_t}
467     cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} \
468     DIRPRFX=usr.bin/ldd ${_t}
469 laffer1 2 .endfor
470    
471     distribute32 install32:
472     .if make(distribute32)
473     mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree
474     .else
475     mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree
476     .endif
477     cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
478 laffer1 4290 .if ${MK_CDDL} != "no"
479     cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
480     .endif
481 laffer1 2 cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
482 laffer1 1926 .if ${MK_CRYPT} != "no"
483 laffer1 2 cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
484     .endif
485 laffer1 4120 .if ${MK_KERBEROS} != "no"
486     cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
487     .endif
488 laffer1 4290 cd ${.CURDIR}/libexec/rtld-elf; \
489     PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
490 laffer1 4120 cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//}
491 laffer1 2 .endif
492    
493     WMAKE_TGTS=
494     .if !defined(SUBDIR_OVERRIDE)
495     WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools
496     .endif
497     WMAKE_TGTS+= _cleanobj _obj _build-tools
498     .if !defined(SUBDIR_OVERRIDE)
499     WMAKE_TGTS+= _cross-tools
500     .endif
501     WMAKE_TGTS+= _includes _libraries _depend everything
502 laffer1 1926 .if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
503 laffer1 2 WMAKE_TGTS+= build32
504     .endif
505    
506 laffer1 1926 buildworld: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
507     .ORDER: buildworld_prologue ${WMAKE_TGTS} buildworld_epilogue
508 laffer1 2
509 laffer1 1926 buildworld_prologue:
510     @echo "--------------------------------------------------------------"
511     @echo ">>> World build started on `LC_ALL=C date`"
512     @echo "--------------------------------------------------------------"
513    
514     buildworld_epilogue:
515     @echo
516     @echo "--------------------------------------------------------------"
517     @echo ">>> World build completed on `LC_ALL=C date`"
518     @echo "--------------------------------------------------------------"
519    
520     #
521     # We need to have this as a target because the indirection between Makefile
522     # and Makefile.inc1 causes the correct PATH to be used, rather than a
523     # modification of the current environment's PATH. In addition, we need
524     # to quote multiword values.
525     #
526     buildenvvars:
527     @echo ${WMAKEENV:Q}
528    
529 laffer1 2 buildenv:
530     @echo Entering world for ${TARGET_ARCH}:${TARGET}
531     @cd ${.CURDIR} && env ${WMAKEENV} sh || true
532    
533     TOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32}
534     toolchain: ${TOOLCHAIN_TGTS}
535     kernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries}
536    
537     #
538 laffer1 1926 # installcheck
539 laffer1 2 #
540 laffer1 1926 # Checks to be sure system is ready for installworld/installkernel.
541     #
542     installcheck:
543 laffer1 2
544     #
545     # Require DESTDIR to be set if installing for a different architecture.
546     #
547     .if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE}
548     .if !make(distributeworld)
549 laffer1 1926 installcheck: installcheck_DESTDIR
550 laffer1 2 installcheck_DESTDIR:
551     .if !defined(DESTDIR) || empty(DESTDIR)
552     @echo "ERROR: Please set DESTDIR!"; \
553     false
554     .endif
555     .endif
556     .endif
557    
558     #
559 laffer1 1926 # Check for missing UIDs/GIDs.
560 laffer1 2 #
561     CHECK_UIDS=
562 laffer1 1549 CHECK_GIDS= audit
563 laffer1 1926 .if ${MK_SENDMAIL} != "no"
564 laffer1 2 CHECK_UIDS+= smmsp
565     CHECK_GIDS+= smmsp
566     .endif
567 laffer1 1926 .if ${MK_PF} != "no"
568 laffer1 2 CHECK_UIDS+= proxy
569     CHECK_GIDS+= proxy authpf
570     .endif
571 laffer1 1926 installcheck: installcheck_UGID
572     installcheck_UGID:
573 laffer1 2 .for uid in ${CHECK_UIDS}
574     @if ! `id -u ${uid} >/dev/null 2>&1`; then \
575     echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \
576     false; \
577     fi
578     .endfor
579     .for gid in ${CHECK_GIDS}
580     @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \
581     echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \
582     false; \
583     fi
584     .endfor
585    
586     #
587 laffer1 4290 # Required install tools to be saved in a scratch dir for safety.
588     #
589     .if ${MK_INFO} != "no"
590     _install-info= install-info
591     .endif
592     .if ${MK_ZONEINFO} != "no"
593     _zoneinfo= zic tzsetup
594     .endif
595    
596     ITOOLS= [ awk cap_mkdb cat chflags chmod chown \
597     date echo egrep find grep ${_install-info} \
598     ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
599     test true uname wc ${_zoneinfo}
600    
601     #
602 laffer1 2 # distributeworld
603     #
604     # Distributes everything compiled by a `buildworld'.
605     #
606     # installworld
607     #
608     # Installs everything compiled by a 'buildworld'.
609     #
610 laffer1 4290
611     # Non-base distributions produced by the base system
612     EXTRA_DISTRIBUTIONS= games
613     .if defined(LIB32TMP) && ${MK_LIB32} != "no"
614     EXTRA_DISTRIBUTIONS+= lib32
615     .endif
616    
617 laffer1 2 distributeworld installworld: installcheck
618     mkdir -p ${INSTALLTMP}
619 laffer1 4290 progs=$$(for prog in ${ITOOLS}; do \
620     if progpath=`which $$prog`; then \
621     echo $$progpath; \
622     else \
623     echo "Required tool $$prog not found in PATH." >&2; \
624     exit 1; \
625     fi; \
626     done); \
627     libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \
628     while read line; do \
629     set -- $$line; \
630     if [ "$$2 $$3" != "not found" ]; then \
631     echo $$2; \
632     else \
633     echo "Required library $$1 not found." >&2; \
634     exit 1; \
635     fi; \
636     done); \
637     cp $$libs $$progs ${INSTALLTMP}
638     cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale
639     .if make(distributeworld)
640     .for dist in ${EXTRA_DISTRIBUTIONS}
641     -mkdir ${DESTDIR}/${DISTDIR}/${dist}
642     mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \
643     -p ${DESTDIR}/${DISTDIR}/${dist} >/dev/null
644     mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
645     -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
646     mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
647     -p ${DESTDIR}/${DISTDIR}/${dist}/usr/include >/dev/null
648     .endfor
649     -mkdir ${DESTDIR}/${DISTDIR}/base
650     ${_+_}cd ${.CURDIR}; ${IMAKE} distrib-dirs \
651     DESTDIR=${DESTDIR}/${DISTDIR}/base
652     .endif
653     ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \
654     ${IMAKEENV} rm -rf ${INSTALLTMP}
655     .if make(distributeworld)
656     .for dist in ${EXTRA_DISTRIBUTIONS}
657     find ${DESTDIR}/${DISTDIR}/${dist} -empty -delete
658     .endfor
659     .endif
660 laffer1 2
661 laffer1 4290 packageworld:
662     .for dist in base ${EXTRA_DISTRIBUTIONS}
663     ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \
664     tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz .
665     .endfor
666    
667 laffer1 2 #
668     # reinstall
669     #
670     # If you have a build server, you can NFS mount the source and obj directories
671     # and do a 'make reinstall' on the *client* to install new binaries from the
672     # most recent server build.
673     #
674 laffer1 1926 reinstall:
675 laffer1 2 @echo "--------------------------------------------------------------"
676     @echo ">>> Making hierarchy"
677     @echo "--------------------------------------------------------------"
678     ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
679     @echo
680     @echo "--------------------------------------------------------------"
681     @echo ">>> Installing everything"
682     @echo "--------------------------------------------------------------"
683     ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
684 laffer1 1926 .if ${TARGET_ARCH} == "amd64" && ${MK_LIB32} != "no"
685 laffer1 2 ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
686     .endif
687    
688     redistribute:
689     @echo "--------------------------------------------------------------"
690     @echo ">>> Distributing everything"
691     @echo "--------------------------------------------------------------"
692     ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
693 laffer1 4290 .if defined(LIB32TMP) && ${MK_LIB32} != "no"
694     ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 \
695     DISTRIBUTION=lib32
696 laffer1 2 .endif
697    
698     distrib-dirs distribution:
699     cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET}
700    
701     #
702     # buildkernel and installkernel
703     #
704     # Which kernels to build and/or install is specified by setting
705     # KERNCONF. If not defined a GENERIC kernel is built/installed.
706     # Only the existing (depending TARGET) config files are used
707     # for building kernels and only the first of these is designated
708     # as the one being installed.
709     #
710     # Note that we have to use TARGET instead of TARGET_ARCH when
711     # we're in kernel-land. Since only TARGET_ARCH is (expected) to
712     # be set to cross-build, we have to make sure TARGET is set
713     # properly.
714    
715 laffer1 4290 .if defined(KERNFAST)
716     NO_KERNELCLEAN= t
717     NO_KERNELCONFIG= t
718     NO_KERNELDEPEND= t
719     NO_KERNELOBJ= t
720     # Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah
721     .if !defined(KERNCONF) && ${KERNFAST} != "1"
722     KERNCONF=${KERNFAST}
723     .endif
724     .endif
725 laffer1 2 .if !defined(KERNCONF) && defined(KERNEL)
726     KERNCONF= ${KERNEL}
727     KERNWARN=
728     .else
729     KERNCONF?= GENERIC
730     .endif
731     INSTKERNNAME?= kernel
732    
733     KERNSRCDIR?= ${.CURDIR}/sys
734     KRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf
735     KRNLOBJDIR= ${OBJTREE}${KERNSRCDIR}
736     KERNCONFDIR?= ${KRNLCONFDIR}
737    
738     BUILDKERNELS=
739     INSTALLKERNEL=
740     .for _kernel in ${KERNCONF}
741     .if exists(${KERNCONFDIR}/${_kernel})
742     BUILDKERNELS+= ${_kernel}
743     .if empty(INSTALLKERNEL)
744     INSTALLKERNEL= ${_kernel}
745     .endif
746     .endif
747     .endfor
748    
749     #
750     # buildkernel
751     #
752     # Builds all kernels defined by BUILDKERNELS.
753     #
754     buildkernel:
755     .if empty(BUILDKERNELS)
756     @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
757     false
758     .endif
759     .if defined(KERNWARN)
760     @echo "--------------------------------------------------------------"
761     @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
762     @echo "--------------------------------------------------------------"
763     @sleep 3
764     .endif
765     @echo
766     .for _kernel in ${BUILDKERNELS}
767     @echo "--------------------------------------------------------------"
768     @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
769     @echo "--------------------------------------------------------------"
770     @echo "===> ${_kernel}"
771     mkdir -p ${KRNLOBJDIR}
772     .if !defined(NO_KERNELCONFIG)
773     @echo
774     @echo "--------------------------------------------------------------"
775     @echo ">>> stage 1: configuring the kernel"
776     @echo "--------------------------------------------------------------"
777     cd ${KRNLCONFDIR}; \
778     PATH=${TMPPATH} \
779     config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
780     ${KERNCONFDIR}/${_kernel}
781     .endif
782     .if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN)
783     @echo
784     @echo "--------------------------------------------------------------"
785     @echo ">>> stage 2.1: cleaning up the object tree"
786     @echo "--------------------------------------------------------------"
787 laffer1 1926 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
788 laffer1 2 .endif
789 laffer1 4290 .if !defined(NO_KERNELOBJ)
790 laffer1 2 @echo
791     @echo "--------------------------------------------------------------"
792     @echo ">>> stage 2.2: rebuilding the object tree"
793     @echo "--------------------------------------------------------------"
794 laffer1 1926 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
795 laffer1 4290 .endif
796 laffer1 2 @echo
797     @echo "--------------------------------------------------------------"
798     @echo ">>> stage 2.3: build tools"
799     @echo "--------------------------------------------------------------"
800     cd ${KRNLOBJDIR}/${_kernel}; \
801     MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \
802 laffer1 4290 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF \
803     -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile
804 laffer1 2 # XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
805     .if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules)
806     .for target in obj depend all
807     cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \
808     MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
809 laffer1 4290 ${MAKE} SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF ${target}
810 laffer1 2 .endfor
811     .endif
812     .if !defined(NO_KERNELDEPEND)
813     @echo
814     @echo "--------------------------------------------------------------"
815     @echo ">>> stage 3.1: making dependencies"
816     @echo "--------------------------------------------------------------"
817 laffer1 1926 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
818 laffer1 2 .endif
819     @echo
820     @echo "--------------------------------------------------------------"
821     @echo ">>> stage 3.2: building everything"
822     @echo "--------------------------------------------------------------"
823 laffer1 1926 cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
824 laffer1 2 @echo "--------------------------------------------------------------"
825     @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
826     @echo "--------------------------------------------------------------"
827     .endfor
828    
829     #
830     # installkernel, etc.
831     #
832     # Install the kernel defined by INSTALLKERNEL
833     #
834     installkernel installkernel.debug \
835 laffer1 1926 reinstallkernel reinstallkernel.debug: installcheck
836 laffer1 2 .if empty(INSTALLKERNEL)
837     @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
838     false
839     .endif
840     @echo "--------------------------------------------------------------"
841 laffer1 4290 @echo ">>> Installing kernel ${INSTALLKERNEL}"
842 laffer1 2 @echo "--------------------------------------------------------------"
843     cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
844     ${CROSSENV} PATH=${TMPPATH} \
845     ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//}
846    
847 laffer1 4290 distributekernel distributekernel.debug:
848     .if empty(INSTALLKERNEL)
849     @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \
850     false
851     .endif
852     cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
853     ${CROSSENV} PATH=${TMPPATH} ${MAKE} KERNEL=${INSTKERNNAME} \
854     DESTDIR=${DESTDIR}/${DISTDIR}/kernel \
855     ${.TARGET:S/distributekernel/install/}
856    
857     packagekernel:
858     ${_+_}cd ${DESTDIR}/${DISTDIR}/kernel; \
859     tar cvJf ${DESTDIR}/${DISTDIR}/kernel.txz .
860    
861 laffer1 2 #
862 laffer1 1926 # doxygen
863     #
864     # Build the API documentation with doxygen
865     #
866     doxygen:
867     @if [ ! -x `/usr/bin/which doxygen` ]; then \
868     echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
869     exit 1; \
870     fi
871     cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
872    
873     #
874 laffer1 2 # update
875     #
876     # Update the source tree, by running cvsup and/or running cvs to update to the
877     # latest copy.
878     #
879     update:
880     .if defined(SUP_UPDATE)
881     @echo "--------------------------------------------------------------"
882     @echo ">>> Running ${SUP}"
883     @echo "--------------------------------------------------------------"
884     .if defined(SUPFILE)
885     @${SUP} ${SUPFLAGS} ${SUPFILE}
886     .endif
887     .if defined(SUPFILE1)
888     @${SUP} ${SUPFLAGS} ${SUPFILE1}
889     .endif
890     .if defined(SUPFILE2)
891     @${SUP} ${SUPFLAGS} ${SUPFILE2}
892     .endif
893     .if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
894     @${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
895     .endif
896     .if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
897     @${SUP} ${SUPFLAGS} ${DOCSUPFILE}
898     .endif
899     .endif
900     .if defined(CVS_UPDATE)
901     @echo "--------------------------------------------------------------"
902     @echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT}
903     @echo "--------------------------------------------------------------"
904     cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS}
905     .endif
906    
907     #
908     # ------------------------------------------------------------------------
909     #
910     # From here onwards are utility targets used by the 'make world' and
911     # related targets. If your 'world' breaks, you may like to try to fix
912     # the problem and manually run the following targets to attempt to
913     # complete the build. Beware, this is *not* guaranteed to work, you
914     # need to have a pretty good grip on the current state of the system
915     # to attempt to manually finish it. If in doubt, 'make world' again.
916     #
917    
918     #
919     # legacy: Build compatibility shims for the next three targets
920     #
921     legacy:
922     .for _tool in tools/build
923     ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \
924     cd ${.CURDIR}/${_tool}; \
925     ${MAKE} DIRPRFX=${_tool}/ obj; \
926     ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \
927     ${MAKE} DIRPRFX=${_tool}/ depend; \
928     ${MAKE} DIRPRFX=${_tool}/ all; \
929     ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
930     .endfor
931    
932     #
933     # bootstrap-tools: Build tools needed for compatibility
934     #
935 laffer1 1926 .if ${MK_GAMES} != "no"
936 laffer1 2 _strfile= games/fortune/strfile
937     .endif
938    
939 laffer1 1926 .if ${MK_CXX} != "no"
940 laffer1 2 _gperf= gnu/usr.bin/gperf
941 laffer1 1926 .if ${BOOTSTRAPPING} < 700004
942 laffer1 2 _groff= gnu/usr.bin/groff
943     .else
944     _groff= gnu/usr.bin/groff/tmac
945     .endif
946     .endif
947    
948 laffer1 1926 .if ${BOOTSTRAPPING} < 700018
949 laffer1 687 _gensnmptree= usr.sbin/bsnmpd/gensnmptree
950 laffer1 366 .endif
951    
952 laffer1 1926 .if ${MK_RESCUE} != "no" && \
953     ${BOOTSTRAPPING} < 700026
954 laffer1 2 _crunchgen= usr.sbin/crunch/crunchgen
955     .endif
956    
957     bootstrap-tools:
958     .for _tool in \
959     ${_strfile} \
960     ${_gperf} \
961     ${_groff} \
962     usr.bin/lorder \
963     usr.bin/makewhatis \
964     usr.bin/rpcgen \
965 laffer1 1926 usr.bin/xinstall \
966 laffer1 366 ${_gensnmptree} \
967 laffer1 2 usr.sbin/config \
968 laffer1 2833 ${_crunchgen}
969 laffer1 2 ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
970     cd ${.CURDIR}/${_tool}; \
971     ${MAKE} DIRPRFX=${_tool}/ obj; \
972     ${MAKE} DIRPRFX=${_tool}/ depend; \
973     ${MAKE} DIRPRFX=${_tool}/ all; \
974     ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install
975     .endfor
976    
977     #
978     # build-tools: Build special purpose build tools
979     #
980     .if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules)
981     _aicasm= sys/modules/aic7xxx/aicasm
982     .endif
983    
984     .if !defined(NO_SHARE)
985     _share= share/syscons/scrnmaps
986     .endif
987    
988 laffer1 1926 .if ${MK_KERBEROS} != "no"
989 laffer1 2 _kerberos5_tools= kerberos5/tools
990     .endif
991    
992 laffer1 1926 .if ${MK_RESCUE} != "no"
993 laffer1 2 _rescue= rescue/rescue
994     .endif
995    
996     build-tools:
997     .for _tool in \
998     bin/csh \
999     bin/sh \
1000     ${_rescue} \
1001 laffer1 1926 lib/ncurses/ncurses \
1002     lib/ncurses/ncursesw \
1003 laffer1 2 ${_share} \
1004     ${_aicasm} \
1005     usr.bin/awk \
1006     lib/libmagic \
1007     usr.sbin/sysinstall
1008     ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
1009     cd ${.CURDIR}/${_tool}; \
1010     ${MAKE} DIRPRFX=${_tool}/ obj; \
1011     ${MAKE} DIRPRFX=${_tool}/ build-tools
1012     .endfor
1013     .for _tool in \
1014     gnu/usr.bin/cc/cc_tools \
1015     ${_kerberos5_tools}
1016     ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
1017     cd ${.CURDIR}/${_tool}; \
1018     ${MAKE} DIRPRFX=${_tool}/ obj; \
1019     ${MAKE} DIRPRFX=${_tool}/ depend; \
1020     ${MAKE} DIRPRFX=${_tool}/ all
1021     .endfor
1022    
1023     #
1024     # cross-tools: Build cross-building tools
1025     #
1026 laffer1 1926 .if ${TARGET_ARCH} != ${MACHINE_ARCH}
1027     .if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
1028 laffer1 2 _btxld= usr.sbin/btxld
1029     .endif
1030 laffer1 1926 .if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
1031 laffer1 2 _crunchide= usr.sbin/crunch/crunchide
1032     .endif
1033 laffer1 1926 .if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR)
1034 laffer1 2 _kgzip= usr.sbin/kgzip
1035     .endif
1036 laffer1 1926 .endif
1037 laffer1 2
1038     cross-tools:
1039     .for _tool in \
1040     gnu/usr.bin/binutils \
1041     gnu/usr.bin/cc \
1042 laffer1 1926 usr.bin/sed \
1043 laffer1 2 usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \
1044     ${_btxld} \
1045     ${_crunchide} \
1046     ${_kgzip}
1047     ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \
1048     cd ${.CURDIR}/${_tool}; \
1049     ${MAKE} DIRPRFX=${_tool}/ obj; \
1050     ${MAKE} DIRPRFX=${_tool}/ depend; \
1051     ${MAKE} DIRPRFX=${_tool}/ all; \
1052     ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
1053     .endfor
1054    
1055     #
1056     # hierarchy - ensure that all the needed directories are present
1057     #
1058     hierarchy:
1059     cd ${.CURDIR}/etc; ${MAKE} distrib-dirs
1060    
1061     #
1062     # libraries - build all libraries, and install them under ${DESTDIR}.
1063     #
1064     # The list of libraries with dependents (${_prebuild_libs}) and their
1065     # interdependencies (__L) are built automatically by the
1066     # ${.CURDIR}/tools/make_libdeps.sh script.
1067     #
1068     libraries:
1069     cd ${.CURDIR}; \
1070 laffer1 1926 ${MAKE} -f Makefile.inc1 _prereq_libs; \
1071 laffer1 2 ${MAKE} -f Makefile.inc1 _startup_libs; \
1072     ${MAKE} -f Makefile.inc1 _prebuild_libs; \
1073     ${MAKE} -f Makefile.inc1 _generic_libs;
1074    
1075 laffer1 1926 #
1076     # static libgcc.a prerequisite for shared libc
1077     #
1078 laffer1 4290 _prereq_libs= gnu/lib/libssp/libssp_nonshared gnu/lib/libgcc
1079 laffer1 1926
1080 laffer1 2 # These dependencies are not automatically generated:
1081     #
1082 laffer1 1926 # gnu/lib/csu, gnu/lib/libgcc, lib/csu and lib/libc must be built before
1083     # all shared libraries for ELF.
1084 laffer1 2 #
1085 laffer1 1926 _startup_libs= gnu/lib/csu
1086 laffer1 2 .if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
1087     _startup_libs+= lib/csu/${MACHINE_ARCH}-elf
1088     .else
1089     _startup_libs+= lib/csu/${MACHINE_ARCH}
1090     .endif
1091 laffer1 1926 _startup_libs+= gnu/lib/libgcc
1092     _startup_libs+= lib/libc
1093 laffer1 2
1094 laffer1 1926 gnu/lib/libgcc__L: lib/libc__L
1095 laffer1 2
1096 laffer1 1926 _prebuild_libs= ${_kerberos5_lib_libasn1} ${_kerberos5_lib_libkrb5} \
1097     ${_kerberos5_lib_libroken} \
1098 laffer1 4290 lib/libbz2 lib/libcom_err lib/libcrypt \
1099     lib/libexpat \
1100 laffer1 1926 ${_lib_libgssapi} ${_lib_libipx} \
1101     lib/libkiconv lib/libkvm lib/libmd \
1102     lib/ncurses/ncurses lib/ncurses/ncursesw \
1103     lib/libopie lib/libpam ${_default_thread_lib} \
1104     lib/libradius lib/libsbuf lib/libtacplus lib/libutil \
1105     ${_lib_libypclnt} lib/libz lib/msun \
1106     ${_secure_lib_libcrypto} ${_secure_lib_libssh} \
1107 laffer1 3882 ${_secure_lib_libssl} lib/libsqlite3 lib/liblzma \
1108 laffer1 4120 lib/libarchive lib/libfetch lib/libmagic
1109 laffer1 2
1110 laffer1 1926 .if ${MK_LIBTHR} != "no" && ${MK_LIBKSE} != "no"
1111     _default_thread_lib= lib/${DEFAULT_THREAD_LIB}
1112     .elif ${MK_LIBTHR} != "no"
1113     _default_thread_lib= lib/libthr
1114     .elif ${MK_LIBKSE} != "no"
1115     _default_thread_lib= lib/libkse
1116 laffer1 2 .endif
1117    
1118 laffer1 3883 _generic_libs= ${_apache_lib} ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib
1119 laffer1 2
1120     lib/libopie__L lib/libtacplus__L: lib/libmd__L
1121    
1122 laffer1 3446 .if ${MK_APACHE} != "no"
1123     _apache_lib= apache/lib
1124     .endif
1125    
1126 laffer1 1926 .if ${MK_CDDL} != "no"
1127     _cddl_lib= cddl/lib
1128     .endif
1129 laffer1 2
1130 laffer1 1926 .if ${MK_CRYPT} != "no"
1131     .if ${MK_OPENSSL} != "no"
1132     _secure_lib_libcrypto= secure/lib/libcrypto
1133     _secure_lib_libssl= secure/lib/libssl
1134     lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L
1135     .if ${MK_OPENSSH} != "no"
1136     _secure_lib_libssh= secure/lib/libssh
1137     secure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L
1138     .if ${MK_KERBEROS} != "no"
1139     secure/lib/libssh__L: lib/libgssapi__L kerberos5/lib/libkrb5__L \
1140     kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \
1141 laffer1 2 kerberos5/lib/libroken__L
1142     .endif
1143     .endif
1144     .endif
1145 laffer1 1926 _secure_lib= secure/lib
1146 laffer1 2 .endif
1147    
1148 laffer1 1926 .if ${MK_IPX} != "no"
1149     _lib_libipx= lib/libipx
1150     .endif
1151    
1152     .if ${MK_KERBEROS} != "no"
1153     _kerberos5_lib= kerberos5/lib
1154     _kerberos5_lib_libasn1= kerberos5/lib/libasn1
1155     _kerberos5_lib_libkrb5= kerberos5/lib/libkrb5
1156     _kerberos5_lib_libroken= kerberos5/lib/libroken
1157     _lib_libgssapi= lib/libgssapi
1158     .endif
1159    
1160     .if ${MK_NIS} != "no"
1161     _lib_libypclnt= lib/libypclnt
1162     .endif
1163    
1164     .if ${MK_OPENSSL} == "no"
1165 laffer1 2 lib/libradius__L: lib/libmd__L
1166     .endif
1167    
1168 laffer1 1926 .for _lib in ${_prereq_libs}
1169     ${_lib}__PL: .PHONY
1170     .if exists(${.CURDIR}/${_lib})
1171     ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \
1172     cd ${.CURDIR}/${_lib}; \
1173     ${MAKE} DIRPRFX=${_lib}/ obj; \
1174     ${MAKE} DIRPRFX=${_lib}/ depend; \
1175     ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ all; \
1176     ${MAKE} -DWITHOUT_PROFILE -DNO_PIC DIRPRFX=${_lib}/ install
1177 laffer1 2 .endif
1178 laffer1 1926 .endfor
1179 laffer1 2
1180     .for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
1181     ${_lib}__L: .PHONY
1182     .if exists(${.CURDIR}/${_lib})
1183 laffer1 1549 ${_+_}@${ECHODIR} "===> ${_lib} (obj,depend,all,install)"; \
1184 laffer1 2 cd ${.CURDIR}/${_lib}; \
1185 laffer1 1549 ${MAKE} DIRPRFX=${_lib}/ obj; \
1186 laffer1 2 ${MAKE} DIRPRFX=${_lib}/ depend; \
1187     ${MAKE} DIRPRFX=${_lib}/ all; \
1188     ${MAKE} DIRPRFX=${_lib}/ install
1189     .endif
1190     .endfor
1191    
1192     # libpam is special: we need to build static PAM modules before
1193     # static PAM library, and dynamic PAM library before dynamic PAM
1194     # modules.
1195     lib/libpam__L: .PHONY
1196 laffer1 1549 ${_+_}@${ECHODIR} "===> lib/libpam (obj,depend,all,install)"; \
1197 laffer1 2 cd ${.CURDIR}/lib/libpam; \
1198 laffer1 1549 ${MAKE} DIRPRFX=lib/libpam/ obj; \
1199 laffer1 2 ${MAKE} DIRPRFX=lib/libpam/ depend; \
1200     ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
1201     ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
1202    
1203 laffer1 1926 _prereq_libs: ${_prereq_libs:S/$/__PL/}
1204 laffer1 2 _startup_libs: ${_startup_libs:S/$/__L/}
1205     _prebuild_libs: ${_prebuild_libs:S/$/__L/}
1206     _generic_libs: ${_generic_libs:S/$/__L/}
1207    
1208     .for __target in all clean cleandepend cleandir depend includes obj
1209     .for entry in ${SUBDIR}
1210     ${entry}.${__target}__D: .PHONY
1211     ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
1212     ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \
1213     edir=${entry}.${MACHINE_ARCH}; \
1214     cd ${.CURDIR}/$${edir}; \
1215     else \
1216     ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \
1217     edir=${entry}; \
1218     cd ${.CURDIR}/$${edir}; \
1219     fi; \
1220     ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
1221     .endfor
1222     par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
1223     .endfor
1224    
1225     .include <bsd.subdir.mk>
1226 laffer1 5
1227 laffer1 1926 .if make(check-old) || make(check-old-dirs) || \
1228     make(check-old-files) || make(check-old-libs) || \
1229     make(delete-old) || make(delete-old-dirs) || \
1230     make(delete-old-files) || make(delete-old-libs)
1231 laffer1 5
1232     #
1233     # check for / delete old files section
1234     #
1235    
1236     .include "ObsoleteFiles.inc"
1237    
1238     OLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \
1239     else you can not start such an application. Consult UPDATING for more \
1240     information regarding how to cope with the removal/revision bump of a \
1241     specific library."
1242    
1243     .if !defined(BATCH_DELETE_OLD_FILES)
1244     RM_I=-i
1245     .else
1246     RM_I=-v
1247     .endif
1248    
1249     delete-old-files:
1250     @echo ">>> Removing old files (only deletes safe to delete libs)"
1251     # Ask for every old file if the user really wants to remove it.
1252     # It's annoying, but better safe than sorry.
1253 laffer1 4290 # NB: We cannot pass the list of OLD_FILES as a parameter because the
1254     # argument list will get too long. Using .for/.endfor make "loops" will make
1255     # the Makefile parser segfault.
1256     @exec 3<&0; \
1257     ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1258     -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \
1259     while read file; do \
1260 laffer1 1926 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1261     chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
1262 laffer1 4290 rm ${RM_I} "${DESTDIR}/$${file}" <&3; \
1263 laffer1 1926 fi; \
1264     done
1265 laffer1 5 # Remove catpages without corresponding manpages.
1266 laffer1 4290 @exec 3<&0; \
1267 laffer1 5 find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1268     sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1269     while read catpage; do \
1270     read manpage; \
1271     if [ ! -e "$${manpage}" ]; then \
1272 laffer1 4290 rm ${RM_I} $${catpage} <&3; \
1273 laffer1 5 fi; \
1274     done
1275     @echo ">>> Old files removed"
1276    
1277     check-old-files:
1278     @echo ">>> Checking for old files"
1279 laffer1 4290 @${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1280     -V OLD_FILES -V "OLD_FILES:Musr/share/*.gz:R" | xargs -n1 | \
1281     while read file; do \
1282 laffer1 1926 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1283     echo "${DESTDIR}/$${file}"; \
1284     fi; \
1285     done
1286 laffer1 5 # Check for catpages without corresponding manpages.
1287     @find ${DESTDIR}/usr/share/man/cat* ! -type d | \
1288     sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \
1289     while read catpage; do \
1290     read manpage; \
1291     if [ ! -e "$${manpage}" ]; then \
1292 laffer1 4290 echo $${catpage}; \
1293 laffer1 5 fi; \
1294     done
1295    
1296     delete-old-libs:
1297     @echo ">>> Removing old libraries"
1298     @echo "${OLD_LIBS_MESSAGE}" | fmt
1299 laffer1 4290 @exec 3<&0; \
1300     ${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1301     -V OLD_LIBS | xargs -n1 | \
1302     while read file; do \
1303 laffer1 1926 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1304     chflags noschg "${DESTDIR}/$${file}" 2>/dev/null || true; \
1305 laffer1 4290 rm ${RM_I} "${DESTDIR}/$${file}" <&3; \
1306 laffer1 1926 fi; \
1307     done
1308 laffer1 5 @echo ">>> Old libraries removed"
1309    
1310     check-old-libs:
1311     @echo ">>> Checking for old libraries"
1312 laffer1 4290 @${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1313     -V OLD_LIBS | xargs -n1 | \
1314     while read file; do \
1315 laffer1 1926 if [ -f "${DESTDIR}/$${file}" -o -L "${DESTDIR}/$${file}" ]; then \
1316     echo "${DESTDIR}/$${file}"; \
1317     fi; \
1318     done
1319 laffer1 5
1320     delete-old-dirs:
1321     @echo ">>> Removing old directories"
1322 laffer1 4290 @${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1323     -V OLD_DIRS | xargs -n1 | \
1324     while read dir; do \
1325 laffer1 1926 if [ -d "${DESTDIR}/$${dir}" ]; then \
1326     rmdir -v "${DESTDIR}/$${dir}" || true; \
1327     elif [ -L "${DESTDIR}/$${dir}" ]; then \
1328     echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \
1329     fi; \
1330     done
1331 laffer1 5 @echo ">>> Old directories removed"
1332    
1333     check-old-dirs:
1334     @echo ">>> Checking for old directories"
1335 laffer1 4290 @${MAKE} -f ${.CURDIR}/Makefile.inc1 ${.MAKEFLAGS} ${.TARGET} \
1336     -V OLD_DIRS | xargs -n1 | \
1337     while read dir; do \
1338 laffer1 1926 if [ -d "${DESTDIR}/$${dir}" ]; then \
1339     echo "${DESTDIR}/$${dir}"; \
1340     elif [ -L "${DESTDIR}/$${dir}" ]; then \
1341     echo "${DESTDIR}/$${dir} is a link, please remove everything manually."; \
1342     fi; \
1343     done
1344 laffer1 5
1345     delete-old: delete-old-files delete-old-dirs
1346     @echo "To remove old libraries run '${MAKE} delete-old-libs'."
1347    
1348     check-old: check-old-files check-old-libs check-old-dirs
1349     @echo "To remove old files and directories run '${MAKE} delete-old'."
1350     @echo "To remove old libraries run '${MAKE} delete-old-libs'."
1351    
1352     .endif
1353    
1354 laffer1 1925 #
1355     # showconfig - show build configuration.
1356     #
1357     showconfig:
1358     @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort

Properties

Name Value
cvs2svn:cvs-rev 1.31