ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/src/trunk/Makefile.inc1
Revision: 5053
Committed: Fri Jul 20 01:51:49 2012 UTC (11 years, 9 months ago) by laffer1
File size: 41742 byte(s)
Log Message:
Fix some bootstrapping problems.

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

Properties

Name Value
cvs2svn:cvs-rev 1.42