Makefile.inc1 revision 152602
11556Srgrimes# 21556Srgrimes# $FreeBSD: head/Makefile.inc1 152602 2005-11-19 06:45:44Z ru $ 31556Srgrimes# 41556Srgrimes# Make command line options: 51556Srgrimes# -DNO_DYNAMICROOT do not link /bin and /sbin dynamically 61556Srgrimes# -DNO_KERBEROS Do not build Heimdal (Kerberos 5) 71556Srgrimes# -DNO_RESCUE do not build rescue binaries 81556Srgrimes# -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir 91556Srgrimes# -DNO_CLEAN do not clean at all 101556Srgrimes# -DNO_CRYPT will prevent building of crypt versions 111556Srgrimes# -DNO_MAN do not build the manual pages 121556Srgrimes# -DNO_NLS do not build Native Language Support files 131556Srgrimes# -DNO_PROFILE do not build profiled libraries 141556Srgrimes# -DNO_GAMES do not go into games subdir 151556Srgrimes# -DNO_SHARE do not go into share subdir 161556Srgrimes# -DNO_INFO do not make or install info files 171556Srgrimes# -DNO_LIBC_R do not build libc_r. 181556Srgrimes# -DNO_FORTRAN do not build g77 and related libraries. 191556Srgrimes# -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel 201556Srgrimes# -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel 211556Srgrimes# -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel 221556Srgrimes# -DNO_PORTSUPDATE do not update ports in ${MAKE} update 231556Srgrimes# -DNO_DOCUPDATE do not update doc in ${MAKE} update 241556Srgrimes# LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list 251556Srgrimes# TARGET_ARCH="arch" to crossbuild world to a different arch 261556Srgrimes 271556Srgrimes# 28127499Sgad# The intended user-driven targets are: 29127499Sgad# buildworld - rebuild *everything*, including glue to help do upgrades 30127499Sgad# installworld- install everything built by "buildworld" 31127499Sgad# update - convenient way to update your source tree (eg: cvsup/cvs) 32127499Sgad# 33127499Sgad# Standard targets (not defined here) are documented in the makefiles in 34127499Sgad# /usr/share/mk. These include: 351556Srgrimes# obj depend all install clean cleandepend cleanobj 361556Srgrimes 371556Srgrimes# We must do share/info early so that installation of info `dir' 3890143Smarkm# entries works correctly. Do it first since it is less likely to 391556Srgrimes# grow dependencies on include and lib than vice versa. 401556Srgrimes# 411556Srgrimes# We must do lib and libexec before bin, because if installworld 421556Srgrimes# installs a new /bin/sh, the 'make' command will *immediately* 4390143Smarkm# use that new version. And the new (dynamically-linked) /bin/sh 441556Srgrimes# will expect to find appropriate libraries in /lib and /libexec. 4536049Scharnier# 4690143Smarkm# We must do etc last for install/distribute to work. 4736049Scharnier# 48110391ScharnierSUBDIR= share/info include lib libexec bin 4999110Sobrien.if !defined(NO_GAMES) 5099110SobrienSUBDIR+=games 511556Srgrimes.endif 521556SrgrimesSUBDIR+=gnu 53127546Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL) 543296SdgSUBDIR+=kerberos5 551556Srgrimes.endif 561556Srgrimes.if !defined(NO_RESCUE) 571556SrgrimesSUBDIR+=rescue 58137696Scsjp.endif 591556SrgrimesSUBDIR+=sbin 601556Srgrimes.if !defined(NO_CRYPT) 611556SrgrimesSUBDIR+=secure 62127149Sgad.endif 631556Srgrimes.if !defined(NO_SHARE) 64127499SgadSUBDIR+=share 651556Srgrimes.endif 6613514SmppSUBDIR+=sys usr.bin usr.sbin etc 6773367Sache 681556Srgrimes# These are last, since it is nice to at least get the base system 6990143Smarkm# rebuilt before you do them. 701556Srgrimes.for _DIR in ${LOCAL_DIRS} 711556Srgrimes.if exists(${.CURDIR}/${_DIR}/Makefile) 721556SrgrimesSUBDIR+= ${_DIR} 731556Srgrimes.endif 741556Srgrimes.endfor 751556Srgrimes 761556Srgrimes.if defined(SUBDIR_OVERRIDE) 77173492SjhbSUBDIR= ${SUBDIR_OVERRIDE} 78173492Sjhb.endif 79127499Sgad 80127499Sgad.if defined(NOCLEAN) 8166377SbrianNO_CLEAN= ${NOCLEAN} 82127537Sgad.endif 83127555Sgad.if defined(NO_CLEANDIR) 84127537SgadCLEANDIR= clean cleandepend 85127537Sgad.else 86127555SgadCLEANDIR= cleandir 87127537Sgad.endif 88127537Sgad 89127537SgadCVS?= cvs 90129914SgadCVSFLAGS?= -A -P -d -I! 91129971SgadSUP?= /usr/local/bin/cvsup 92129971SgadSUPFLAGS?= -g -L 2 -P - 93129914Sgad.if defined(SUPHOST) 94129971SgadSUPFLAGS+= -h ${SUPHOST} 95129914Sgad.endif 96127537Sgad 97127537SgadMAKEOBJDIRPREFIX?= /usr/obj 98127537Sgad.if !defined(OSRELDATE) 99127537Sgad.if exists(/usr/include/osreldate.h) 100127537SgadOSRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \ 101127537Sgad /usr/include/osreldate.h 102127537Sgad.else 103173004SjulianOSRELDATE= 0 104127537Sgad.endif 105130999Sgad.endif 1061556SrgrimesTARGET_ARCH?= ${MACHINE_ARCH} 107127537Sgad.if ${TARGET_ARCH} == ${MACHINE_ARCH} 108127537SgadTARGET?= ${MACHINE} 109127537SgadTARGET_CPUTYPE?=${CPUTYPE} 110127537Sgad.else 111127537SgadTARGET?= ${TARGET_ARCH} 112127537SgadTARGET_CPUTYPE?= 113127537Sgad.endif 1141556Srgrimes.if !empty(TARGET_CPUTYPE) 115127537Sgad_TARGET_CPUTYPE=${TARGET_CPUTYPE} 11697966Sjmallett.else 117127499Sgad_TARGET_CPUTYPE=dummy 118127537Sgad.endif 119127499Sgad_CPUTYPE!= MAKEFLAGS= CPUTYPE=${_TARGET_CPUTYPE} ${MAKE} \ 120127499Sgad -f /dev/null -m ${.CURDIR}/share/mk -V CPUTYPE 121127499Sgad.if ${_CPUTYPE} != ${_TARGET_CPUTYPE} 122127499Sgad.error CPUTYPE global should be set with ?=. 123127499Sgad.endif 124127499Sgad.if make(buildworld) 125127499SgadBUILD_ARCH!= sysctl -n hw.machine_arch 126127499Sgad.if ${MACHINE_ARCH} != ${BUILD_ARCH} 127127499Sgad.error To cross-build, set TARGET_ARCH. 128127499Sgad.endif 129127499Sgad.endif 130127499Sgad.if ${MACHINE} == ${TARGET} && !defined(CROSS_BUILD_TESTING) 131127499SgadOBJTREE= ${MAKEOBJDIRPREFIX} 132127823Sgad.else 133127499SgadOBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET} 134127499Sgad.endif 135137696ScsjpWORLDTMP= ${OBJTREE}${.CURDIR}/tmp 136127499Sgad# /usr/games added for fortune which depend on strfile 137127499SgadBPATH= ${WORLDTMP}/legacy/usr/sbin:${WORLDTMP}/legacy/usr/bin:${WORLDTMP}/legacy/usr/games 138127499SgadXPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games 139127499SgadSTRICTTMPPATH= ${BPATH}:${XPATH} 140127499SgadTMPPATH= ${STRICTTMPPATH}:${PATH} 141127536Sgad 142127499SgadINSTALLTMP!= /usr/bin/mktemp -d -u -t install 143127598Sgad 144127598Sgad# 145127536Sgad# Building a world goes through the following stages 146127499Sgad# 147127499Sgad# 1. legacy stage [BMAKE] 148129952Sgad# This stage is responsible for creating compatibility 149127536Sgad# shims that are needed by the bootstrap-tools, 150127536Sgad# build-tools and cross-tools stages. 151127536Sgad# 1. bootstrap-tools stage [BMAKE] 152127536Sgad# This stage is responsible for creating programs that 153127536Sgad# are needed for backward compatibility reasons. They 154127499Sgad# are not built as cross-tools. 15597875Sjmallett# 2. build-tools stage [TMAKE] 156129635Sgad# This stage is responsible for creating the object 157127538Sgad# tree and building any tools that are needed during 158127538Sgad# the build process. 15990143Smarkm# 3. cross-tools stage [XMAKE] 16097875Sjmallett# This stage is responsible for creating any tools that 16197875Sjmallett# are needed for cross-builds. A cross-compiler is one 162127538Sgad# of them. 163127538Sgad# 4. world stage [WMAKE] 164105831Srwatson# This stage actually builds the world. 1651556Srgrimes# 5. install stage (optional) [IMAKE] 166127843Sgad# This stage installs a previously built world. 16798494Ssobomax# 1681556Srgrimes 16990110SimpBOOTSTRAPPING?= 0 1701556Srgrimes 171127499Sgad# Common environment for world related stages 172127499SgadCROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \ 1731556Srgrimes MACHINE_ARCH=${TARGET_ARCH} \ 174130816Sgad MACHINE=${TARGET} \ 1751556Srgrimes CPUTYPE=${TARGET_CPUTYPE} \ 1761556Srgrimes GROFF_BIN_PATH=${WORLDTMP}/legacy/usr/bin \ 177129914Sgad GROFF_FONT_PATH=${WORLDTMP}/legacy/usr/share/groff_font \ 178127539Sgad GROFF_TMAC_PATH=${WORLDTMP}/legacy/usr/share/tmac 179137670Sru 180129914Sgad# bootstrap-tools stage 181173004SjulianBMAKEENV= INSTALL="sh ${.CURDIR}/tools/install.sh" \ 18290143Smarkm PATH=${BPATH}:${PATH} \ 1831556Srgrimes WORLDTMP=${WORLDTMP} \ 18411809Sache MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" 185127542SgadBMAKE= MAKEOBJDIRPREFIX=${WORLDTMP} \ 18611809Sache ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 18797804Stjr DESTDIR= \ 18897804Stjr BOOTSTRAPPING=${OSRELDATE} \ 18997804Stjr -DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN -DNO_NLS -DNO_PIC \ 1901556Srgrimes -DNO_PROFILE -DNO_SHARED -DNO_CPU_CFLAGS -DNO_WARNS 1911556Srgrimes 1921556Srgrimes# build-tools stage 1931556SrgrimesTMAKE= MAKEOBJDIRPREFIX=${OBJTREE} \ 1941556Srgrimes ${BMAKEENV} ${MAKE} -f Makefile.inc1 \ 1951556Srgrimes DESTDIR= \ 1961556Srgrimes BOOTSTRAPPING=${OSRELDATE} -DNO_LINT -DNO_CPU_CFLAGS -DNO_WARNS 19798494Ssobomax 198129914Sgad# cross-tools stage 199129914SgadXMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB 20098494Ssobomax 201129914Sgad# world stage 202129915SgadWMAKEENV= ${CROSSENV} \ 2031556Srgrimes _SHLIBDIRPREFIX=${WORLDTMP} \ 204137670Sru INSTALL="sh ${.CURDIR}/tools/install.sh" \ 205127542Sgad PATH=${TMPPATH} 206127542SgadWMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1 DESTDIR=${WORLDTMP} 207127499Sgad 208127499Sgad.if ${TARGET_ARCH} == "amd64" 209127499Sgad# 32 bit world 210127499SgadLIB32TMP= ${OBJTREE}${.CURDIR}/lib32 211127499Sgad 212127499SgadLIB32PREFLAGS= -m32 -march=athlon-xp -msse2 -mfancy-math-387 -DCOMPAT_32BIT 213127499SgadLIB32POSTFLAGS= -I${LIB32TMP}/usr/include \ 21489909Sru -L${LIB32TMP}/usr/lib32 \ 21598494Ssobomax -B${LIB32TMP}/usr/lib32 216180596SkevloLIB32CC= ${LIB32PREFLAGS} \ 217127499Sgad ${LIB32POSTFLAGS} 218127499SgadLIB32CXX= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/c++/3.4 \ 219127499Sgad ${LIB32POSTFLAGS} 220127499SgadLIB32OBJC= ${LIB32PREFLAGS} -I${LIB32TMP}/usr/include/objc \ 221127499Sgad ${LIB32POSTFLAGS} 222127499Sgad 223127499Sgad# Yes, the flags are redundant. 224127499SgadLIB32MAKEENV= MAKEOBJDIRPREFIX=${OBJTREE}/lib32 \ 225127499Sgad _SHLIBDIRPREFIX=${LIB32TMP} \ 2261556Srgrimes MACHINE=i386 \ 227127499Sgad MACHINE_ARCH=i386 \ 2281556Srgrimes INSTALL="sh ${.CURDIR}/tools/install.sh" \ 2291556Srgrimes PATH=${TMPPATH} \ 23019068Speter CC="${CC} ${LIB32CC}" \ 23119068Speter CXX="${CXX} ${LIB32CXX}" \ 23219068Speter OBJC="${OBJC} ${LIB32OBJC}" \ 23319068Speter LD="${LD} -m elf_i386_fbsd -Y P,${LIB32TMP}/usr/lib32" \ 23419068Speter AS="${AS} --32" \ 23519068Speter LIBDIR=/usr/lib32 \ 2361556Srgrimes SHLIBDIR=/usr/lib32 2371556Srgrimes 2381556SrgrimesLIB32MAKE= ${LIB32MAKEENV} ${MAKE} -DNO_CPU_CFLAGS -DCOMPAT_32BIT \ 239127506Sgad -DNO_BIND -DNO_MAN -DNO_NLS -DNO_INFO -DNO_HTML 240127506SgadLIB32IMAKE= ${LIB32MAKE:NINSTALL=*} -DNO_INCS 241127506Sgad.endif 242127542Sgad 243127506Sgad# install stage 244127506Sgad.if empty(.MAKEFLAGS:M-n) 245127499SgadIMAKEENV= ${CROSSENV} \ 246127499Sgad PATH=${STRICTTMPPATH}:${INSTALLTMP} 247127499Sgad.else 248127499SgadIMAKEENV= ${CROSSENV} \ 249127499Sgad PATH=${TMPPATH}:${INSTALLTMP} 250127542Sgad.endif 251127499SgadIMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1 252127597Sgad 253127542Sgad# kernel stage 254127542SgadKMAKEENV= ${WMAKEENV} 255127542Sgad 256127542Sgad# 257127499Sgad# buildworld 258127499Sgad# 259127499Sgad# Attempt to rebuild the entire system, with reasonable chance of 260127499Sgad# success, regardless of how old your existing system is. 261127499Sgad# 262127542Sgad_worldtmp: 2631556Srgrimes.if ${.CURDIR:C/[^,]//g} != "" 264127499Sgad# The m4 build of sendmail files doesn't like it if ',' is used 265116265Sscottl# anywhere in the path of it's files. 266126127Sdeischen @echo 267116265Sscottl @echo "*** Error: path to source tree contains a comma ','" 2681556Srgrimes @echo 2691556Srgrimes false 2701556Srgrimes.endif 2711556Srgrimes @echo 272109502Sjmallett @echo "--------------------------------------------------------------" 27390143Smarkm @echo ">>> Rebuilding the temporary build tree" 2741556Srgrimes @echo "--------------------------------------------------------------" 2751556Srgrimes.if !defined(NO_CLEAN) 2761556Srgrimes rm -rf ${WORLDTMP} 2771556Srgrimes.if ${TARGET_ARCH} == "amd64" 2781556Srgrimes rm -rf ${LIB32TMP} 2791556Srgrimes.endif 280109502Sjmallett.else 28190143Smarkm rm -rf ${WORLDTMP}/legacy/usr/include 2821556Srgrimes # XXX - These two can depend on any header file. 2831556Srgrimes rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 2841556Srgrimes rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 2851556Srgrimes.endif 2861556Srgrimes.for _dir in \ 2871556Srgrimes usr/bin usr/games usr/include/c++/3.4 usr/include/sys usr/lib \ 2881556Srgrimes usr/libexec usr/sbin usr/share/dict \ 2891556Srgrimes usr/share/groff_font/devX100 \ 2901556Srgrimes usr/share/groff_font/devX100-12 \ 2911556Srgrimes usr/share/groff_font/devX75 \ 2921556Srgrimes usr/share/groff_font/devX75-12 \ 2931556Srgrimes usr/share/groff_font/devascii \ 294109502Sjmallett usr/share/groff_font/devcp1047 \ 295109502Sjmallett usr/share/groff_font/devdvi \ 296109502Sjmallett usr/share/groff_font/devhtml \ 2971556Srgrimes usr/share/groff_font/devkoi8-r \ 29890143Smarkm usr/share/groff_font/devlatin1 \ 2991556Srgrimes usr/share/groff_font/devlbp \ 3001556Srgrimes usr/share/groff_font/devlj4 \ 301109502Sjmallett usr/share/groff_font/devps \ 30290143Smarkm usr/share/groff_font/devutf8 \ 3031556Srgrimes usr/share/tmac/mdoc usr/share/tmac/mm 3041556Srgrimes mkdir -p ${WORLDTMP}/legacy/${_dir} 305127499Sgad.endfor 306127499Sgad.for _dir in \ 307127499Sgad lib usr/bin usr/include usr/lib/compat/aout usr/libdata/ldscripts \ 308127499Sgad usr/libexec usr/sbin usr/share/misc \ 309127499Sgad usr/share/snmp/defs usr/share/snmp/mibs 310127499Sgad mkdir -p ${WORLDTMP}/${_dir} 311127499Sgad.endfor 312127499Sgad mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 3131556Srgrimes -p ${WORLDTMP}/usr/include >/dev/null 314127499Sgad ln -sf ${.CURDIR}/sys ${WORLDTMP} 315127499Sgad.if defined(WITH_BIND_LIBS) && !defined(NO_BIND) 316127597Sgad mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ 317127542Sgad -p ${WORLDTMP}/usr/include >/dev/null 318127542Sgad.endif 319127542Sgad_legacy: 320127542Sgad @echo 321127542Sgad @echo "--------------------------------------------------------------" 322127542Sgad @echo ">>> stage 1.1: legacy release compatibility shims" 323127499Sgad @echo "--------------------------------------------------------------" 324127499Sgad ${_+_}cd ${.CURDIR}; ${BMAKE} legacy 325127499Sgad_bootstrap-tools: 326127499Sgad @echo 327127499Sgad @echo "--------------------------------------------------------------" 3281556Srgrimes @echo ">>> stage 1.2: bootstrap tools" 3291556Srgrimes @echo "--------------------------------------------------------------" 3301556Srgrimes ${_+_}cd ${.CURDIR}; ${BMAKE} bootstrap-tools 3311556Srgrimes_cleanobj: 3321556Srgrimes.if !defined(NO_CLEAN) 3331556Srgrimes @echo 334127499Sgad @echo "--------------------------------------------------------------" 335127499Sgad @echo ">>> stage 2.1: cleaning up the object tree" 336127597Sgad @echo "--------------------------------------------------------------" 337127542Sgad ${_+_}cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 338127542Sgad.if ${TARGET_ARCH} == "amd64" 339127542Sgad rm -rf ${OBJTREE}/lib32 340127542Sgad.endif 341127542Sgad.endif 342127499Sgad_obj: 343127499Sgad @echo 344127499Sgad @echo "--------------------------------------------------------------" 345127499Sgad @echo ">>> stage 2.2: rebuilding the object tree" 346127499Sgad @echo "--------------------------------------------------------------" 3471556Srgrimes ${_+_}cd ${.CURDIR}; ${WMAKE} par-obj 3481556Srgrimes_build-tools: 3491556Srgrimes @echo 3501556Srgrimes @echo "--------------------------------------------------------------" 351127499Sgad @echo ">>> stage 2.3: build tools" 352127499Sgad @echo "--------------------------------------------------------------" 353127499Sgad ${_+_}cd ${.CURDIR}; ${TMAKE} build-tools 354127499Sgad_cross-tools: 3551556Srgrimes @echo 35613020Speter @echo "--------------------------------------------------------------" 357127499Sgad @echo ">>> stage 3: cross tools" 358127499Sgad @echo "--------------------------------------------------------------" 359127499Sgad ${_+_}cd ${.CURDIR}; ${XMAKE} cross-tools 360127499Sgad_includes: 36113020Speter @echo 3621556Srgrimes @echo "--------------------------------------------------------------" 363109502Sjmallett @echo ">>> stage 4.1: building includes" 3641556Srgrimes @echo "--------------------------------------------------------------" 36590143Smarkm ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 3661556Srgrimes_libraries: 3671556Srgrimes @echo 3681556Srgrimes @echo "--------------------------------------------------------------" 369109502Sjmallett @echo ">>> stage 4.2: building libraries" 3701556Srgrimes @echo "--------------------------------------------------------------" 37190143Smarkm ${_+_}cd ${.CURDIR}; \ 3721556Srgrimes ${WMAKE} -DNO_FSCHG -DNO_HTML -DNO_INFO -DNO_LINT -DNO_MAN \ 3731556Srgrimes -DNO_NLS -DNO_PROFILE libraries 3741556Srgrimes_depend: 3751556Srgrimes @echo 3761556Srgrimes @echo "--------------------------------------------------------------" 3771556Srgrimes @echo ">>> stage 4.3: make dependencies" 3781556Srgrimes @echo "--------------------------------------------------------------" 3791556Srgrimes ${_+_}cd ${.CURDIR}; ${WMAKE} par-depend 3801556Srgrimeseverything: 381127499Sgad @echo 382127499Sgad @echo "--------------------------------------------------------------" 383127499Sgad @echo ">>> stage 4.4: building everything" 384127499Sgad @echo "--------------------------------------------------------------" 385127499Sgad ${_+_}cd ${.CURDIR}; ${WMAKE} par-all 386127499Sgad.if ${TARGET_ARCH} == "amd64" 387127499Sgadbuild32: 388127499Sgad @echo 389127499Sgad @echo "--------------------------------------------------------------" 390127499Sgad @echo ">>> stage 5.1: building 32 bit shim libraries" 391127499Sgad @echo "--------------------------------------------------------------" 392127499Sgad.for _dir in \ 393127499Sgad lib lib32 usr/bin usr/include usr/lib32 usr/libdata/ldscripts \ 394127499Sgad usr/libexec usr/sbin usr/share/misc \ 3951556Srgrimes usr/share/snmp/defs usr/share/snmp/mibs 396127499Sgad mkdir -p ${LIB32TMP}/${_dir} 3971556Srgrimes.endfor 39886922Sgreen mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 399109502Sjmallett -p ${LIB32TMP}/usr/include >/dev/null 40086922Sgreen mkdir -p ${WORLDTMP} 40186922Sgreen ln -sf ${.CURDIR}/sys ${WORLDTMP} 4021556Srgrimes.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL) 4031556Srgrimes.for _t in obj depend all 4041556Srgrimes cd ${.CURDIR}/kerberos5/tools; \ 4051556Srgrimes MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= ${_t} 4061556Srgrimes.endfor 4071556Srgrimes.endif 408129914Sgad.for _t in obj includes 409129914Sgad cd ${.CURDIR}/include; \ 410137696Scsjp ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 411137696Scsjp cd ${.CURDIR}/lib; \ 412137696Scsjp ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 413137696Scsjp cd ${.CURDIR}/gnu/lib; \ 414137696Scsjp ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 415137696Scsjp.if !defined(NO_CRYPT) 416137696Scsjp cd ${.CURDIR}/secure/lib; \ 417137696Scsjp ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 418129914Sgad.endif 419129914Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL) 420129914Sgad cd ${.CURDIR}/kerberos5/lib; \ 421129914Sgad ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 422129914Sgad.endif 423129914Sgad.endfor 424129914Sgad.for _dir in usr.sbin/pcvt/keycap usr.bin/lex/lib 425129914Sgad cd ${.CURDIR}/${_dir}; \ 426129914Sgad ${LIB32MAKE} DESTDIR=${LIB32TMP} obj 427129914Sgad.endfor 428129914Sgad.for _dir in lib/libncurses lib/libmagic 429129914Sgad cd ${.CURDIR}/${_dir}; \ 430129914Sgad MAKEOBJDIRPREFIX=${OBJTREE}/lib32 ${MAKE} DESTDIR= build-tools 431129914Sgad.endfor 432127499Sgad cd ${.CURDIR}; \ 433127542Sgad ${LIB32MAKE} -f Makefile.inc1 DESTDIR=${LIB32TMP} libraries 434127542Sgad.for _t in obj depend all 435127499Sgad cd ${.CURDIR}/libexec/rtld-elf; \ 436127499Sgad PROG=ld-elf32.so.1 ${LIB32MAKE} DESTDIR=${LIB32TMP} ${_t} 43789909Sru.endfor 4381556Srgrimes 4391556Srgrimesdistribute32 install32: 4401556Srgrimes.if make(distribute32) 44190143Smarkm mkdir -p ${DISTDIR}/${DISTRIBUTION}/usr/lib32 # XXX add to mtree 442109502Sjmallett.else 4431556Srgrimes mkdir -p ${DESTDIR}/usr/lib32 # XXX add to mtree 444127499Sgad.endif 445127823Sgad cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 446127823Sgad cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 44797877Sjmallett.if !defined(NO_CRYPT) 448127499Sgad cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//} 449127499Sgad.endif 450127823Sgad cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//} 45166377Sbrian.endif 4521556Srgrimes 4531556Srgrimes 4541556SrgrimesWMAKE_TGTS= 45553170Skris.if !defined(SUBDIR_OVERRIDE) 4561556SrgrimesWMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools 4571556Srgrimes.endif 458127499SgadWMAKE_TGTS+= _cleanobj _obj _build-tools 4591556Srgrimes.if !defined(SUBDIR_OVERRIDE) 460127499SgadWMAKE_TGTS+= _cross-tools 461127499Sgad.endif 462127499SgadWMAKE_TGTS+= _includes _libraries _depend everything 463127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32) 464127499SgadWMAKE_TGTS+= build32 4651556Srgrimes.endif 466127499Sgad 467127499Sgadbuildworld: ${WMAKE_TGTS} 468127499Sgad.ORDER: ${WMAKE_TGTS} 469129600Sgad 470129600Sgadbuildenv: 471129600Sgad @echo Entering world for ${TARGET_ARCH}:${TARGET} 472129600Sgad @cd ${.CURDIR} && env ${WMAKEENV} sh || true 473129600Sgad 474127499SgadTOOLCHAIN_TGTS= ${WMAKE_TGTS:N_depend:Neverything:Nbuild32} 475127823Sgadtoolchain: ${TOOLCHAIN_TGTS} 476127499Sgadkernel-toolchain: ${TOOLCHAIN_TGTS:N_includes:N_libraries} 477127499Sgad 478127499Sgad# 479127823Sgad# Use this to add checks to installworld/installkernel targets. 480127499Sgad# 481127499SgadSPECIAL_INSTALLCHECKS= 482127499Sgad 483127823Sgad# 484127499Sgad# Require DESTDIR to be set if installing for a different architecture. 485127499Sgad# 486127499Sgad.if ${TARGET_ARCH} != ${MACHINE_ARCH} || ${TARGET} != ${MACHINE} 487127823Sgad.if !make(distributeworld) 488127499SgadSPECIAL_INSTALLCHECKS+= installcheck_DESTDIR 489127499Sgadinstallcheck_DESTDIR: 490127499Sgad.if !defined(DESTDIR) || empty(DESTDIR) 491127823Sgad @echo "ERROR: Please set DESTDIR!"; \ 492127499Sgad false 493127499Sgad.endif 494127499Sgad.endif 495127823Sgad.endif 496127499Sgad 497127499Sgad# 498127499Sgad# installcheck 499127499Sgad# 500127499Sgad# Checks to be sure system is ready for installworld 5011556Srgrimes# 502126127SdeischenCHECK_UIDS= 5031556SrgrimesCHECK_GIDS= 5041556Srgrimes.if !defined(NO_SENDMAIL) 5051556SrgrimesCHECK_UIDS+= smmsp 506127499SgadCHECK_GIDS+= smmsp 507127149Sgad.endif 508127544Sgad.if !defined(NO_PF) 5091556SrgrimesCHECK_UIDS+= proxy 510127499SgadCHECK_GIDS+= proxy authpf 511127149Sgad.endif 512127149Sgadinstallcheck: ${SPECIAL_INSTALLCHECKS} 513127149Sgad.for uid in ${CHECK_UIDS} 514127149Sgad @if ! `id -u ${uid} >/dev/null 2>&1`; then \ 515127499Sgad echo "ERROR: Required ${uid} user is missing, see /usr/src/UPDATING."; \ 516127499Sgad false; \ 517127499Sgad fi 518127499Sgad.endfor 519127499Sgad.for gid in ${CHECK_GIDS} 520127499Sgad @if ! `find / -prune -group ${gid} >/dev/null 2>&1`; then \ 521127499Sgad echo "ERROR: Required ${gid} group is missing, see /usr/src/UPDATING."; \ 522127823Sgad false; \ 523127499Sgad fi 524127499Sgad.endfor 525127499Sgad 526127499Sgad# 527127499Sgad# distributeworld 528127499Sgad# 529127499Sgad# Distributes everything compiled by a `buildworld'. 530127499Sgad# 531127499Sgad# installworld 532127499Sgad# 533127499Sgad# Installs everything compiled by a 'buildworld'. 534127499Sgad# 535127499Sgaddistributeworld installworld: installcheck 536127499Sgad mkdir -p ${INSTALLTMP} 537127499Sgad for prog in [ awk cap_mkdb cat chflags chmod chown \ 538127499Sgad date echo egrep find grep install-info \ 539127823Sgad ln lockf make mkdir mtree mv pwd_mkdb rm sed sh sysctl \ 540127499Sgad test true uname wc zic; do \ 541127499Sgad cp `which $$prog` ${INSTALLTMP}; \ 542127499Sgad done 543127499Sgad ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 544127823Sgad rm -rf ${INSTALLTMP} 545127823Sgad 546127499Sgad# 547127499Sgad# reinstall 548127499Sgad# 549127499Sgad# If you have a build server, you can NFS mount the source and obj directories 550127823Sgad# and do a 'make reinstall' on the *client* to install new binaries from the 551127823Sgad# most recent server build. 552127499Sgad# 553127499Sgadreinstall: ${SPECIAL_INSTALLCHECKS} 554127499Sgad @echo "--------------------------------------------------------------" 555127499Sgad @echo ">>> Making hierarchy" 556127823Sgad @echo "--------------------------------------------------------------" 557127499Sgad ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy 558127499Sgad @echo 559127499Sgad @echo "--------------------------------------------------------------" 560127499Sgad @echo ">>> Installing everything" 561127823Sgad @echo "--------------------------------------------------------------" 562127499Sgad ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install 563127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32) 564127499Sgad ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32 565127499Sgad.endif 566127823Sgad 567127499Sgadredistribute: 568127499Sgad @echo "--------------------------------------------------------------" 569127499Sgad @echo ">>> Distributing everything" 570127499Sgad @echo "--------------------------------------------------------------" 571127499Sgad ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute 572127499Sgad.if ${TARGET_ARCH} == "amd64" && !defined(NO_LIB32) 573127499Sgad ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute32 DISTRIBUTION=lib32 574127499Sgad.endif 575127499Sgad 576130816Sgaddistrib-dirs distribution: 577130816Sgad cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} ${.TARGET} 578130816Sgad 579130816Sgad# 580130816Sgad# buildkernel and installkernel 581130816Sgad# 582127149Sgad# Which kernels to build and/or install is specified by setting 583130816Sgad# KERNCONF. If not defined a GENERIC kernel is built/installed. 584130816Sgad# Only the existing (depending TARGET) config files are used 585127499Sgad# for building kernels and only the first of these is designated 586127149Sgad# as the one being installed. 5871556Srgrimes# 58825271Sjkh# Note that we have to use TARGET instead of TARGET_ARCH when 58925271Sjkh# we're in kernel-land. Since only TARGET_ARCH is (expected) to 59025271Sjkh# be set to cross-build, we have to make sure TARGET is set 5911556Srgrimes# properly. 5921556Srgrimes 5931556Srgrimes.if !defined(KERNCONF) && defined(KERNEL) 5941556SrgrimesKERNCONF= ${KERNEL} 595127499SgadKERNWARN= 59662803Swill.else 597127499SgadKERNCONF?= GENERIC 5981556Srgrimes.endif 5991556SrgrimesINSTKERNNAME?= kernel 6001556Srgrimes 601127499SgadKERNSRCDIR?= ${.CURDIR}/sys 6021556SrgrimesKRNLCONFDIR= ${KERNSRCDIR}/${TARGET}/conf 603127499SgadKRNLOBJDIR= ${OBJTREE}${KERNSRCDIR} 6041556SrgrimesKERNCONFDIR?= ${KRNLCONFDIR} 605127499Sgad 606130999SgadBUILDKERNELS= 6071556SrgrimesINSTALLKERNEL= 608130999Sgad.for _kernel in ${KERNCONF} 6091556Srgrimes.if exists(${KERNCONFDIR}/${_kernel}) 6101556SrgrimesBUILDKERNELS+= ${_kernel} 6111556Srgrimes.if empty(INSTALLKERNEL) 6121556SrgrimesINSTALLKERNEL= ${_kernel} 6131556Srgrimes.endif 6141556Srgrimes.endif 6151556Srgrimes.endfor 6161556Srgrimes 6171556Srgrimes# 618127499Sgad# buildkernel 619127499Sgad# 620127499Sgad# Builds all kernels defined by BUILDKERNELS. 621127499Sgad# 622127499Sgadbuildkernel: 623127499Sgad.if empty(BUILDKERNELS) 624127499Sgad @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \ 62566377Sbrian false 6261556Srgrimes.endif 6271556Srgrimes.if defined(KERNWARN) 6281556Srgrimes @echo "--------------------------------------------------------------" 629127499Sgad @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 630127499Sgad @echo "--------------------------------------------------------------" 631127499Sgad @sleep 3 632127499Sgad.endif 633127499Sgad @echo 634127499Sgad.for _kernel in ${BUILDKERNELS} 635127602Sgad @echo "--------------------------------------------------------------" 636127499Sgad @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 637127499Sgad @echo "--------------------------------------------------------------" 638127499Sgad @echo "===> ${_kernel}" 639127499Sgad mkdir -p ${KRNLOBJDIR} 640127499Sgad.if !defined(NO_KERNELCONFIG) 641127499Sgad @echo 642127499Sgad @echo "--------------------------------------------------------------" 643127542Sgad @echo ">>> stage 1: configuring the kernel" 644127499Sgad @echo "--------------------------------------------------------------" 645127499Sgad cd ${KRNLCONFDIR}; \ 646127499Sgad PATH=${TMPPATH} \ 647127499Sgad config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 648127499Sgad ${KERNCONFDIR}/${_kernel} 649127499Sgad.endif 650127499Sgad.if !defined(NO_CLEAN) && !defined(NO_KERNELCLEAN) 651127499Sgad @echo 652127499Sgad @echo "--------------------------------------------------------------" 653127499Sgad @echo ">>> stage 2.1: cleaning up the object tree" 654127499Sgad @echo "--------------------------------------------------------------" 655127499Sgad cd ${KRNLOBJDIR}/${_kernel}; \ 656127499Sgad ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} ${CLEANDIR} 657127499Sgad.endif 658127602Sgad @echo 659127602Sgad @echo "--------------------------------------------------------------" 660127499Sgad @echo ">>> stage 2.2: rebuilding the object tree" 661127602Sgad @echo "--------------------------------------------------------------" 662127499Sgad cd ${KRNLOBJDIR}/${_kernel}; \ 663127499Sgad ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} obj 664127499Sgad @echo 665127499Sgad @echo "--------------------------------------------------------------" 666127499Sgad @echo ">>> stage 2.3: build tools" 667127499Sgad @echo "--------------------------------------------------------------" 668129967Sgad cd ${KRNLOBJDIR}/${_kernel}; \ 669127499Sgad MAKESRCPATH=${KERNSRCDIR}/dev/aic7xxx/aicasm \ 670127499Sgad ${MAKE} -DNO_CPU_CFLAGS -f ${KERNSRCDIR}/dev/aic7xxx/aicasm/Makefile 671127499Sgad# XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case. 672127823Sgad.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KERNSRCDIR}/modules) 673127499Sgad.for target in obj depend all 674127499Sgad cd ${KERNSRCDIR}/modules/aic7xxx/aicasm; \ 675127499Sgad MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \ 676127597Sgad ${MAKE} -DNO_CPU_CFLAGS ${target} 677127499Sgad.endfor 678127499Sgad.endif 679127149Sgad.if !defined(NO_KERNELDEPEND) 680127539Sgad @echo 681127149Sgad @echo "--------------------------------------------------------------" 682127149Sgad @echo ">>> stage 3.1: making dependencies" 683129917Sgad @echo "--------------------------------------------------------------" 684129917Sgad cd ${KRNLOBJDIR}/${_kernel}; \ 685129917Sgad ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend -DNO_MODULES_OBJ 686129917Sgad.endif 687127149Sgad @echo 688127149Sgad @echo "--------------------------------------------------------------" 689129952Sgad @echo ">>> stage 3.2: building everything" 690129952Sgad @echo "--------------------------------------------------------------" 691129952Sgad cd ${KRNLOBJDIR}/${_kernel}; \ 692129952Sgad ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all -DNO_MODULES_OBJ 693129952Sgad @echo "--------------------------------------------------------------" 694129952Sgad @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 695129952Sgad @echo "--------------------------------------------------------------" 696129952Sgad.endfor 697129952Sgad 698129952Sgad# 699129952Sgad# installkernel, etc. 700129967Sgad# 701129952Sgad# Install the kernel defined by INSTALLKERNEL 702127499Sgad# 703127499Sgadinstallkernel installkernel.debug \ 704127823Sgadreinstallkernel reinstallkernel.debug: ${SPECIAL_INSTALLCHECKS} 705127499Sgad.if empty(INSTALLKERNEL) 706127499Sgad @echo "ERROR: No kernel \"${KERNCONF}\" to install."; \ 707127499Sgad false 708127149Sgad.endif 709131010Sgad @echo "--------------------------------------------------------------" 710131010Sgad @echo ">>> Making hierarchy" 711173492Sjhb @echo "--------------------------------------------------------------" 712173492Sjhb cd ${.CURDIR}; \ 713173492Sjhb ${CROSSENV} PATH=${TMPPATH} ${MAKE} -f Makefile.inc1 hierarchy 714131010Sgad @echo 715131010Sgad @echo "--------------------------------------------------------------" 716127499Sgad @echo ">>> Installing kernel" 717127499Sgad @echo "--------------------------------------------------------------" 718127499Sgad cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 719127539Sgad ${CROSSENV} PATH=${TMPPATH} \ 720127539Sgad ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel//} 721173492Sjhb 722127499Sgad# 723131010Sgad# update 724131209Sgad# 725173492Sjhb# Update the source tree, by running cvsup and/or running cvs to update to the 726131010Sgad# latest copy. 727131010Sgad# 728127499Sgadupdate: 729131010Sgad.if defined(SUP_UPDATE) 730131010Sgad @echo "--------------------------------------------------------------" 731131010Sgad @echo ">>> Running ${SUP}" 732131010Sgad @echo "--------------------------------------------------------------" 733131010Sgad.if defined(SUPFILE) 734131010Sgad @${SUP} ${SUPFLAGS} ${SUPFILE} 735131010Sgad.endif 736131010Sgad.if defined(SUPFILE1) 737131010Sgad @${SUP} ${SUPFLAGS} ${SUPFILE1} 738131010Sgad.endif 739131010Sgad.if defined(SUPFILE2) 740131209Sgad @${SUP} ${SUPFLAGS} ${SUPFILE2} 741131010Sgad.endif 742173492Sjhb.if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE) 743173492Sjhb @${SUP} ${SUPFLAGS} ${PORTSSUPFILE} 744131010Sgad.endif 745131010Sgad.if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE) 746131209Sgad @${SUP} ${SUPFLAGS} ${DOCSUPFILE} 747131209Sgad.endif 748131209Sgad.endif 749131209Sgad.if defined(CVS_UPDATE) 750131010Sgad @echo "--------------------------------------------------------------" 751131010Sgad @echo ">>> Updating ${.CURDIR} from CVS repository" ${CVSROOT} 752131010Sgad @echo "--------------------------------------------------------------" 753131010Sgad cd ${.CURDIR}; ${CVS} -R -q update ${CVSFLAGS} 754173492Sjhb.endif 755173492Sjhb 756173492Sjhb# 757173492Sjhb# ------------------------------------------------------------------------ 758173492Sjhb# 759173492Sjhb# From here onwards are utility targets used by the 'make world' and 760173492Sjhb# related targets. If your 'world' breaks, you may like to try to fix 761173492Sjhb# the problem and manually run the following targets to attempt to 762131010Sgad# complete the build. Beware, this is *not* guaranteed to work, you 763127499Sgad# need to have a pretty good grip on the current state of the system 764131010Sgad# to attempt to manually finish it. If in doubt, 'make world' again. 765131010Sgad# 766173492Sjhb 767173492Sjhb# 768173492Sjhb# legacy: Build compatibility shims for the next three targets 769131209Sgad# 770131209Sgadlegacy: 771131010Sgad.if ${BOOTSTRAPPING} < 503000 772131010Sgad @echo "ERROR: Source upgrades from versions prior to 5.3 not supported."; \ 773131010Sgad false 774131010Sgad.endif 775173492Sjhb.for _tool in tools/build 776173492Sjhb ${_+_}@${ECHODIR} "===> ${_tool} (obj,includes,depend,all,install)"; \ 777173492Sjhb cd ${.CURDIR}/${_tool}; \ 778131209Sgad ${MAKE} DIRPRFX=${_tool}/ obj; \ 779131209Sgad ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy includes; \ 780131010Sgad ${MAKE} DIRPRFX=${_tool}/ depend; \ 781131010Sgad ${MAKE} DIRPRFX=${_tool}/ all; \ 782131010Sgad ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 783127499Sgad.endfor 784127499Sgad 785127499Sgad# 786127823Sgad# bootstrap-tools: Build tools needed for compatibility 787127499Sgad# 788127149Sgad.if !defined(NO_GAMES) 789127149Sgad_strfile= games/fortune/strfile 790127499Sgad.endif 791127499Sgad 79266377Sbrian.if !defined(NO_CXX) 79366377Sbrian_gperf= gnu/usr.bin/gperf 794127539Sgad.if ${BOOTSTRAPPING} < 700004 795127602Sgad_groff= gnu/usr.bin/groff 79666377Sbrian.else 797127499Sgad_groff= gnu/usr.bin/groff/tmac 798127499Sgad.endif 799127499Sgad.endif 800127499Sgad 801127499Sgad.if ${BOOTSTRAPPING} < 600029 802127499Sgad_texinfo= gnu/usr.bin/texinfo 803127542Sgad.endif 804127499Sgad 80566377Sbrian.if ${BOOTSTRAPPING} < 600015 806127499Sgad_cap_mkdb= usr.bin/cap_mkdb 807127499Sgad.endif 808127499Sgad 809127602Sgad.if ${BOOTSTRAPPING} < 600018 810127602Sgad_colldef= usr.bin/colldef 811127499Sgad.endif 812127499Sgad 813127499Sgad.if ${BOOTSTRAPPING} < 600017 814127602Sgad_gencat= usr.bin/gencat 815127499Sgad.endif 816127499Sgad 817127499Sgad.if ${BOOTSTRAPPING} < 600016 81866377Sbrian_mklocale= usr.bin/mklocale 819127499Sgad.endif 820127499Sgad 821127509Sgad.if !defined(NO_RESCUE) && \ 822127509Sgad ${BOOTSTRAPPING} < 600008 823127509Sgad_crunchgen= usr.sbin/crunch/crunchgen 824127509Sgad.endif 825127509Sgad 826127509Sgad.if ${BOOTSTRAPPING} < 600020 827129967Sgad_pwd_mkdb= usr.sbin/pwd_mkdb 828127499Sgad.endif 829127499Sgad 830127499Sgadbootstrap-tools: 831127823Sgad.for _tool in \ 832127499Sgad ${_strfile} \ 833127499Sgad ${_gperf} \ 834127499Sgad ${_groff} \ 835127499Sgad ${_texinfo} \ 836127499Sgad ${_cap_mkdb} \ 837127499Sgad ${_colldef} \ 838127499Sgad ${_gencat} \ 839127499Sgad usr.bin/lorder \ 840127499Sgad usr.bin/makewhatis \ 841127539Sgad ${_mklocale} \ 842127499Sgad usr.bin/rpcgen \ 843129917Sgad usr.bin/xinstall \ 844129967Sgad usr.sbin/config \ 845127499Sgad ${_crunchgen} \ 846127499Sgad ${_pwd_mkdb} 847127499Sgad ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 848127499Sgad cd ${.CURDIR}/${_tool}; \ 849127499Sgad ${MAKE} DIRPRFX=${_tool}/ obj; \ 850127499Sgad ${MAKE} DIRPRFX=${_tool}/ depend; \ 851127499Sgad ${MAKE} DIRPRFX=${_tool}/ all; \ 852127499Sgad ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX}/legacy install 853127499Sgad.endfor 854127499Sgad 855127499Sgad# 856127499Sgad# build-tools: Build special purpose build tools 857127499Sgad# 85866377Sbrian.if defined(MODULES_WITH_WORLD) && exists(${KERNSRCDIR}/modules) 859127499Sgad_aicasm= sys/modules/aic7xxx/aicasm 860127499Sgad.endif 861127542Sgad 862129953Sgad.if !defined(NO_SHARE) 863127542Sgad_share= share/syscons/scrnmaps 864127499Sgad.endif 865127499Sgad 866127499Sgad.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL) 867127499Sgad_kerberos5_tools= kerberos5/tools 868127499Sgad.endif 869127499Sgad 870127499Sgad.if !defined(NO_RESCUE) 871127499Sgad_rescue= rescue/rescue 872127499Sgad.endif 873127499Sgad 874127499Sgadbuild-tools: 875127499Sgad.for _tool in \ 87666377Sbrian bin/csh \ 877127499Sgad bin/sh \ 878127499Sgad ${_rescue} \ 879127499Sgad lib/libncurses \ 880127499Sgad ${_share} \ 881127499Sgad ${_aicasm} \ 882127499Sgad usr.bin/awk \ 883127499Sgad lib/libmagic \ 884127499Sgad usr.sbin/sysinstall 885127499Sgad ${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \ 886127499Sgad cd ${.CURDIR}/${_tool}; \ 887127499Sgad ${MAKE} DIRPRFX=${_tool}/ obj; \ 888127499Sgad ${MAKE} DIRPRFX=${_tool}/ build-tools 889127499Sgad.endfor 89066377Sbrian.for _tool in \ 891127499Sgad gnu/usr.bin/cc/cc_tools \ 89266377Sbrian ${_kerberos5_tools} 893127499Sgad ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \ 894127499Sgad cd ${.CURDIR}/${_tool}; \ 895127499Sgad ${MAKE} DIRPRFX=${_tool}/ obj; \ 896127539Sgad ${MAKE} DIRPRFX=${_tool}/ depend; \ 897127499Sgad ${MAKE} DIRPRFX=${_tool}/ all 89866377Sbrian.endfor 899127499Sgad 900127823Sgad# 901127499Sgad# cross-tools: Build cross-building tools 902127823Sgad# 903129967Sgad.if (${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386") && \ 904127499Sgad ${TARGET_ARCH} != ${MACHINE_ARCH} 905127499Sgad_btxld= usr.sbin/btxld 906127823Sgad.endif 907127499Sgad 908127499Sgad.if (!defined(NO_RESCUE) || defined(RELEASEDIR)) && \ 90966377Sbrian ${TARGET_ARCH} != ${MACHINE_ARCH} 91066377Sbrian_crunchide= usr.sbin/crunch/crunchide 911127499Sgad.endif 912127499Sgad 913127499Sgad.if ${TARGET_ARCH} == "alpha" && ${TARGET_ARCH} != ${MACHINE_ARCH} 914127499Sgad_elf2exe= usr.sbin/elf2exe 915127499Sgad.endif 916127823Sgad 917127823Sgad.if ${TARGET_ARCH} == "i386" && ${TARGET_ARCH} != ${MACHINE_ARCH} && \ 918127499Sgad defined(RELEASEDIR) 919127499Sgad_kgzip= usr.sbin/kgzip 920127823Sgad.endif 921127499Sgad 922127499Sgadcross-tools: 923127499Sgad.for _tool in \ 924127499Sgad gnu/usr.bin/binutils \ 925127499Sgad gnu/usr.bin/cc \ 926127499Sgad usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint \ 927127499Sgad ${_btxld} \ 928127499Sgad ${_crunchide} \ 929127499Sgad ${_elf2exe} \ 930127499Sgad ${_kgzip} 931127499Sgad ${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all,install)"; \ 932127823Sgad cd ${.CURDIR}/${_tool}; \ 933127499Sgad ${MAKE} DIRPRFX=${_tool}/ obj; \ 934127499Sgad ${MAKE} DIRPRFX=${_tool}/ depend; \ 935109502Sjmallett ${MAKE} DIRPRFX=${_tool}/ all; \ 936109502Sjmallett ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install 937109502Sjmallett.endfor 938109502Sjmallett 939109502Sjmallett# 940130999Sgad# hierarchy - ensure that all the needed directories are present 941109502Sjmallett# 942109502Sjmalletthierarchy: 943109502Sjmallett cd ${.CURDIR}/etc; ${MAKE} distrib-dirs 944109502Sjmallett 945109502Sjmallett# 946109502Sjmallett# libraries - build all libraries, and install them under ${DESTDIR}. 9471556Srgrimes# 94890110Simp# The list of libraries with dependents (${_prebuild_libs}) and their 9491556Srgrimes# interdependencies (__L) are built automatically by the 9501556Srgrimes# ${.CURDIR}/tools/make_libdeps.sh script. 9511556Srgrimes# 95225271Sjkhlibraries: 953130999Sgad cd ${.CURDIR}; \ 95425271Sjkh ${MAKE} -f Makefile.inc1 _startup_libs; \ 95525271Sjkh ${MAKE} -f Makefile.inc1 _prebuild_libs; \ 95625271Sjkh ${MAKE} -f Makefile.inc1 _generic_libs; 95725271Sjkh 95825271Sjkh# These dependencies are not automatically generated: 95925271Sjkh# 96025271Sjkh# gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all 96125271Sjkh# shared libraries for ELF. 96225271Sjkh# 96325271Sjkh_startup_libs= gnu/lib/csu gnu/lib/libgcc 96425271Sjkh.if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf) 96525271Sjkh_startup_libs+= lib/csu/${MACHINE_ARCH}-elf 96625271Sjkh.else 96790110Simp_startup_libs+= lib/csu/${MACHINE_ARCH} 96825271Sjkh.endif 96925271Sjkh 97025271Sjkh_prebuild_libs= 9711556Srgrimes 9721556Srgrimes_generic_libs= gnu/lib 973130999Sgad 9741556Srgrimes.if !defined(NO_KERBEROS) && !defined(NO_CRYPT) && !defined(NO_OPENSSL) 97525271Sjkh_prebuild_libs+= kerberos5/lib/libasn1 97625271Sjkh_prebuild_libs+= kerberos5/lib/libgssapi 97725271Sjkh_prebuild_libs+= kerberos5/lib/libkrb5 97825271Sjkh_prebuild_libs+= kerberos5/lib/libroken 97925271Sjkh_generic_libs+= kerberos5/lib 98025271Sjkh.endif 98125271Sjkh 98225271Sjkh_prebuild_libs+= lib/libbz2 lib/libcom_err lib/libcrypt lib/libexpat \ 98325271Sjkh lib/libipx lib/libkiconv lib/libkvm lib/libmd \ 98425271Sjkh lib/libncurses lib/libnetgraph lib/libopie lib/libpam \ 98525271Sjkh lib/libradius \ 98690110Simp lib/libsbuf lib/libtacplus lib/libutil \ 98725271Sjkh lib/libz lib/msun 98825271Sjkh 98925271Sjkhlib/libopie__L lib/libtacplus__L: lib/libmd__L 99025271Sjkh 99125271Sjkh_generic_libs+= lib 992130999Sgad 99325271Sjkh.if !defined(NO_CRYPT) 994109504Sjmallett.if !defined(NO_OPENSSL) 9951556Srgrimes_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 9961556Srgrimeslib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L 9971556Srgrimes.if !defined(NO_OPENSSH) 9981556Srgrimes_prebuild_libs+= secure/lib/libssh 9991556Srgrimessecure/lib/libssh__L: lib/libz__L secure/lib/libcrypto__L lib/libcrypt__L 10001556Srgrimes.if !defined(NO_KERBEROS) 10011556Srgrimessecure/lib/libssh__L: kerberos5/lib/libgssapi__L kerberos5/lib/libkrb5__L \ 100290143Smarkm kerberos5/lib/libasn1__L lib/libcom_err__L lib/libmd__L \ 100390110Simp kerberos5/lib/libroken__L 1004127542Sgad.endif 10051556Srgrimes.endif 100690143Smarkm.endif 10071556Srgrimes_generic_libs+= secure/lib 100890143Smarkm.endif 10091556Srgrimes 10101556Srgrimes.if defined(NO_CRYPT) || defined(NO_OPENSSL) 10111556Srgrimeslib/libradius__L: lib/libmd__L 1012172207Sjeff.endif 101331552Sdyson 10141556Srgrimes.if !defined(NO_NIS) 101590110Simp_prebuild_libs+= lib/libypclnt 10161556Srgrimes.endif 10171556Srgrimes 1018172207Sjeff_generic_libs+= usr.bin/lex/lib 10191556Srgrimes 10201556Srgrimes.if ${MACHINE_ARCH} == "i386" 10211556Srgrimes_generic_libs+= usr.sbin/pcvt/keycap 10221556Srgrimes.endif 10231556Srgrimes 10241556Srgrimes.for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs} 102569896Smckusick${_lib}__L: .PHONY 10261556Srgrimes.if exists(${.CURDIR}/${_lib}) 102769896Smckusick ${_+_}@${ECHODIR} "===> ${_lib} (depend,all,install)"; \ 10281556Srgrimes cd ${.CURDIR}/${_lib}; \ 10291556Srgrimes ${MAKE} DIRPRFX=${_lib}/ depend; \ 10301556Srgrimes ${MAKE} DIRPRFX=${_lib}/ all; \ 1031130991Sgad ${MAKE} DIRPRFX=${_lib}/ install 1032130991Sgad.endif 1033130991Sgad.endfor 1034130991Sgad 1035130991Sgad# libpam is special: we need to build static PAM modules before 1036130991Sgad# static PAM library, and dynamic PAM library before dynamic PAM 1037130991Sgad# modules. 1038130991Sgadlib/libpam__L: .PHONY 1039131024Sgad ${_+_}@${ECHODIR} "===> lib/libpam (depend,all,install)"; \ 1040130991Sgad cd ${.CURDIR}/lib/libpam; \ 104153276Speter ${MAKE} DIRPRFX=lib/libpam/ depend; \ 104253276Speter ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \ 104353276Speter ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install 1044130991Sgad 1045130991Sgad_startup_libs: ${_startup_libs:S/$/__L/} 1046130991Sgad_prebuild_libs: ${_prebuild_libs:S/$/__L/} 1047130991Sgad_generic_libs: ${_generic_libs:S/$/__L/} 1048130991Sgad 1049130991Sgad.for __target in all clean cleandepend cleandir depend includes obj 1050130991Sgad.for entry in ${SUBDIR} 1051130991Sgad${entry}.${__target}__D: .PHONY 105253276Speter ${_+_}@if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 105353276Speter ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH} (${__target})"; \ 105453276Speter edir=${entry}.${MACHINE_ARCH}; \ 10551556Srgrimes cd ${.CURDIR}/$${edir}; \ 10561556Srgrimes else \ 1057130816Sgad ${ECHODIR} "===> ${DIRPRFX}${entry} (${__target})"; \ 1058130816Sgad edir=${entry}; \ 1059130816Sgad cd ${.CURDIR}/$${edir}; \ 1060130816Sgad fi; \ 1061130816Sgad ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1062130816Sgad.endfor 10631556Srgrimespar-${__target}: ${SUBDIR:S/$/.${__target}__D/} 106490110Simp.endfor 10651556Srgrimes 1066127596Sgad.include <bsd.subdir.mk> 10671556Srgrimes 1068127596Sgad.if make(delete-old) || make(delete-old-libs) || make(check-old) 1069127596Sgad 1070127596Sgad# 1071130816Sgad# check for / delete old files section 1072130816Sgad# 1073130816Sgad 1074130816Sgad.include "ObsoleteFiles.inc" 1075127596Sgad 1076127596SgadOLD_LIBS_MESSAGE="Please be sure no application still uses those libraries, \ 1077127596Sgadelse you can not start such an application. Consult UPDATING for more \ 1078127596Sgadinformation regarding how to cope with the removal/revision bump of a \ 1079130816Sgadspecific library." 1080130816Sgad 1081130816Sgad.if !defined(BATCH_DELETE_OLD_FILES) 1082130816SgadRM_I=-i 1083130816Sgad.else 1084130816SgadRM_I=-v 1085130816Sgad.endif 1086130816Sgad 1087130972Sgaddelete-old-files: 1088130816Sgad @echo ">>> Removing old files (only deletes safe to delete libs)" 1089130972Sgad.for file in ${OLD_FILES} 1090127596Sgad# Ask for every old file if the user really wants to remove it. 10911556Srgrimes# It's annoying, but better safe than sorry. 1092130816Sgad @[ ! -f "${DESTDIR}/${file}" ] || (rm ${RM_I} "${DESTDIR}/${file}" \ 10931556Srgrimes || ([ -f "${DESTDIR}/${file}" ] \ 10941556Srgrimes && echo "Removing schg flag on ${DESTDIR}/${file}" \ 10951556Srgrimes && chflags noschg "${DESTDIR}/${file}" \ 10961556Srgrimes && rm ${RM_I} "${DESTDIR}/${file}")) 10971556Srgrimes.endfor 10981556Srgrimes# Remove catpages without corresponding manpages. 10991556Srgrimes @3<&0; \ 11001556Srgrimes find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 11011556Srgrimes sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 11021556Srgrimes while read catpage; do \ 11031556Srgrimes read manpage; \ 11041556Srgrimes if [ ! -e "$${manpage}" ]; then \ 11051556Srgrimes rm ${RM_I} $${catpage} <&3 ; \ 1106129915Sgad fi; \ 11071556Srgrimes done 11081556Srgrimes @echo ">>> Old files removed" 1109129914Sgad 11101556Srgrimescheck-old-files: 1111102886Sjmallett @echo ">>> Checking for old files" 1112129914Sgad.for file in ${OLD_FILES} 1113129914Sgad @[ ! -f "${DESTDIR}/${file}" ] || echo "${DESTDIR}/${file}" 1114102886Sjmallett.endfor 1115129914Sgad# Check for catpages without corresponding manpages. 1116129914Sgad @find ${DESTDIR}/usr/share/man/cat* ! -type d | \ 1117129914Sgad sed -ep -e's:${DESTDIR}/usr/share/man/cat:${DESTDIR}/usr/share/man/man:' | \ 1118129914Sgad while read catpage; do \ 1119129914Sgad read manpage; \ 1120129914Sgad if [ ! -e "$${manpage}" ]; then \ 1121129914Sgad echo $${catpage} ; \ 1122129914Sgad fi; \ 1123129914Sgad done 1124129914Sgad 1125129914Sgaddelete-old-libs: 1126129914Sgad @echo ">>> Removing old libraries" 1127102886Sjmallett @echo "${OLD_LIBS_MESSAGE}" | fmt 11281556Srgrimes.for file in ${OLD_LIBS} 11291556Srgrimes @[ ! -f "${DESTDIR}/${file}" ] || (rm ${RM_I} "${DESTDIR}/${file}" \ 11301556Srgrimes || ([ -f "${DESTDIR}/${file}" ] \ 11311556Srgrimes && echo "Removing schg flag on ${DESTDIR}/${file}" \ 113281743Sbrian && chflags noschg "${DESTDIR}/${file}" \ 1133129634Sgad && rm ${RM_I} "${DESTDIR}/${file}")) 1134129634Sgad.endfor 1135129634Sgad @echo ">>> Old libraries removed" 1136129914Sgad 1137129914Sgadcheck-old-libs: 1138129914Sgad @echo ">>> Checking for old libraries" 11391556Srgrimes.for file in ${OLD_LIBS} 1140129914Sgad @[ ! -f "${DESTDIR}/${file}" ] || echo "${DESTDIR}/${file}" 1141129914Sgad.endfor 1142129914Sgad 1143129915Sgaddelete-old-dirs: 1144129915Sgad @echo ">>> Removing old directories" 1145129915Sgad.for dir in ${OLD_DIRS} 1146129915Sgad# Don't fail if an old directory isn't empty. 11471556Srgrimes @[ ! -d "${DESTDIR}/${dir}" ] || (rmdir -v "${DESTDIR}/${dir}" || true) 1148129914Sgad.endfor 1149129914Sgad @echo ">>> Old directories removed" 1150129914Sgad 1151129914Sgadcheck-old-dirs: 11521556Srgrimes @echo ">>> Checking for old directories" 1153129914Sgad.for dir in ${OLD_DIRS} 1154129914Sgad @[ ! -d "${DESTDIR}/${dir}" ] || echo "${DESTDIR}/${dir}" 1155129914Sgad.endfor 1156129914Sgad 1157129914Sgaddelete-old: delete-old-files delete-old-dirs 11581556Srgrimes @echo "To remove old libraries run '${MAKE} delete-old-libs'." 1159129914Sgad 11601556Srgrimescheck-old: check-old-files check-old-libs check-old-dirs 1161129914Sgad @echo "To remove old files and directories run '${MAKE} delete-old'." 1162129914Sgad @echo "To remove old libraries run '${MAKE} delete-old-libs'." 11631556Srgrimes 1164129914Sgad.endif 1165129914Sgad 1166129914Sgad