1# 2# $FreeBSD: src/Makefile.inc1,v 1.141.2.62 2003/04/06 19:54:00 dwmalone Exp $ 3# 4# Build-time options are documented in make.conf(5). 5# 6# The intended user-driven targets are: 7# 8# buildworld - rebuild *everything*, including glue to help do upgrades 9# quickworld - skip the glue and do a depend+build on the meat 10# realquickworld - skip the glue and depend stages and just build the meat 11# crossworld - only build the glue (particularly the cross-build environment) 12# installworld- install everything built by "buildworld" 13# backupworld - copies /bin /sbin /usr/bin /usr/sbin /usr/lib /usr/libexec 14# to manual backup dir 15# restoreworld- installs binaries from manual backup dir to world 16# restoreworld-auto - installs binaries from auto-backup dir to world 17# most - build user commands, no libraries or include files 18# installmost - install user commands, no libraries or include files 19# backup-clean - delete backup from manual backup dir 20# backup-auto-clean - delete backup from auto-backup dir 21# 22# Standard targets (not defined here) are documented in the makefiles in 23# /usr/share/mk. These include: 24# obj depend all install clean cleandepend cleanobj 25 26# Put initial settings here. 27SUBDIR= 28 29# We must do share/info early so that installation of info `dir' 30# entries works correctly. Do it first since it is less likely to 31# grow dependencies on include and lib than vice versa. 32.if exists(${.CURDIR}/share/info) 33SUBDIR+= share/info 34.endif 35 36# We must do include and lib early so that the perl *.ph generation 37# works correctly as it uses the header files installed by this. 38.if exists(${.CURDIR}/include) 39SUBDIR+= include 40.endif 41.if exists(${.CURDIR}/lib) 42SUBDIR+= lib 43.endif 44# This exists simply to ensure that the obj dir hierarchy is 45# intact for nrelease, allowing the nrelease Makefile's to 46# reference ${.OBJDIR}. 47# 48.if exists(${.CURDIR}/nrelease) 49SUBDIR+= nrelease 50.endif 51 52.if exists(${.CURDIR}/bin) 53SUBDIR+= bin 54.endif 55.if exists(${.CURDIR}/games) && !defined(NO_GAMES) 56SUBDIR+= games 57.endif 58.if exists(${.CURDIR}/gnu) 59SUBDIR+= gnu 60.endif 61.if exists(${.CURDIR}/libexec) 62SUBDIR+= libexec 63.endif 64.if exists(${.CURDIR}/sbin) 65SUBDIR+= sbin 66.endif 67.if exists(${.CURDIR}/secure) && !defined(NO_CRYPT) 68SUBDIR+= secure 69.endif 70.if exists(${.CURDIR}/share) && !defined(NO_SHARE) 71SUBDIR+= share 72.endif 73.if exists(${.CURDIR}/sys) 74SUBDIR+= sys 75.endif 76.if exists(${.CURDIR}/usr.bin) 77SUBDIR+= usr.bin 78.endif 79.if exists(${.CURDIR}/usr.sbin) 80SUBDIR+= usr.sbin 81.endif 82 83.if exists(${.CURDIR}/etc) 84SUBDIR+= etc 85.endif 86 87# These are last, since it is nice to at least get the base system 88# rebuilt before you do them. 89.if defined(LOCAL_DIRS) 90.for _DIR in ${LOCAL_DIRS} 91.if exists(${.CURDIR}/${_DIR}) & exists(${.CURDIR}/${_DIR}/Makefile) 92SUBDIR+= ${_DIR} 93.endif 94.endfor 95.endif 96 97.if defined(SUBDIR_OVERRIDE) 98SUBDIR= ${SUBDIR_OVERRIDE} 99.endif 100 101.if defined(NOCLEANDIR) 102CLEANDIR= clean cleandepend 103.else 104CLEANDIR= cleandir 105.endif 106 107.if defined(NO_CLEAN) 108NOCLEAN= # defined 109.endif 110 111# Object directory base in primary make. Note that when we rerun make 112# from inside this file we change MAKEOBJDIRPREFIX to the appropriate 113# subdirectory because the rest of the build system needs it that way. 114# The original object directory base is saved in OBJTREE. 115# 116MAKEOBJDIRPREFIX?= /usr/obj 117OBJTREE?= ${MAKEOBJDIRPREFIX} 118 119# Used for stage installs and pathing 120# 121DESTDIRBASE:= ${OBJTREE}${.CURDIR} 122 123# Remove DESTDIR from MAKEFLAGS. It is present in the environment 124# anyhow, and we need to be able to override it for stage installs 125.MAKEFLAGS:= ${.MAKEFLAGS:NDESTDIR=*} 126 127# This section sets the tools used to build the world/kernel 128WORLD_CCVER?= gcc47 129WORLD_LDVER?= ld.bfd 130WORLD_BINUTILSVER?= binutils222 131 132# Set the backup parameters if they are not already defined 133# 134WORLD_BACKUP?= /var/backups/world_backup 135AUTO_BACKUP?= ${OBJTREE}/world_backup/${DESTDIR} 136 137TARGET_ARCH?= ${MACHINE_ARCH} 138.if ${TARGET_ARCH} == ${MACHINE_ARCH} 139TARGET?= ${MACHINE} 140.else 141TARGET?= ${TARGET_ARCH} 142.endif 143.if make(buildworld) 144BUILD_ARCH!= sysctl -n hw.machine_arch 145 146# temporary until everybody has converted to x86_64 147.if ${BUILD_ARCH} == "amd64" 148BUILD_ARCH= x86_64 149.endif 150 151.if ${MACHINE_ARCH} != ${BUILD_ARCH} 152.error To cross-build, set TARGET_ARCH. 153.endif 154.endif 155 156# Backwards compatibility with older make's or older sys.mk's. make 157# is expected to define MACHINE_PLATFORM. 158# 159.if !defined(MACHINE_PLATFORM) 160MACHINE_PLATFORM= pc32 161.endif 162 163# XXX this is ugly and we need to come up with a nicer solution 164.if !defined(TARGET_PLATFORM) 165.if ${TARGET_ARCH} == "i386" 166TARGET_PLATFORM= pc32 167.elif ${TARGET_ARCH} == "x86_64" 168TARGET_PLATFORM= pc64 169.else 170.error Unknown target architecture. 171.endif 172.endif 173 174THREAD_LIB?= thread_xu 175.if ${THREAD_LIB} == "c_r" 176.if defined(NO_LIBC_R) 177.error libc_r is chosen as the default thread library, but NO_LIBC_R is defined 178.endif 179.endif 180 181# BTOOLS (Natively built) All non-cross-development tools that the 182# main build needs. This includes things like 'mkdir' and 'rm'. 183# We will not use the native system's exec path once we start 184# on WORLD. (bootstrap-tools and build-tools or BTOOLS) 185# 186# CTOOLS (Natively built) Cross development tools which are specific 187# to the target architecture. 188# 189# WORLD (Cross built) Our ultimate buildworld, using only BTOOLS and 190# CTOOLS. 191# 192# MACHINE_PLATFORM Platform Architecture we are building on 193# MACHINE Machine Architecture (usually the same as MACHINE_ARCH) 194# MACHINE_ARCH Cpu Architecture we are building on 195# 196# TARGET_PLATFORM Platform Architecture we are building for 197# TARGET Machine Architecture we are building for 198# TARGET_ARCH Cpu Architecture we are building for 199# 200BTOOLSDEST= ${DESTDIRBASE}/btools_${MACHINE_ARCH} 201CTOOLSDEST= ${DESTDIRBASE}/ctools_${MACHINE_ARCH}_${TARGET_ARCH} 202WORLDDEST= ${DESTDIRBASE}/world_${TARGET_ARCH} 203 204# The bootstrap-tools path is used by the bootstrap-tools, build-tools, and 205# cross-tools stages to augment the existing command path to access newer 206# versions of certain utilities such as 'patch' that the cross-tools stage 207# might expect. 208# 209BTOOLSPATH= ${BTOOLSDEST}/usr/sbin:${BTOOLSDEST}/usr/bin:${BTOOLSDEST}/bin:${BTOOLSDEST}/usr/games 210 211# The strict temporary command path contains all binaries required 212# by the buildworld system after the cross-tools stage. 213# 214STRICTTMPPATH= ${CTOOLSDEST}/usr/sbin:${CTOOLSDEST}/usr/bin:${CTOOLSDEST}/bin:${CTOOLSDEST}/usr/games:${BTOOLSDEST}/usr/sbin:${BTOOLSDEST}/usr/bin:${BTOOLSDEST}/bin:${BTOOLSDEST}/usr/games:/usr/local/bin:/usr/pkg/bin 215 216TMPDIR?= /tmp 217TMPPID!= echo $$$$ 218 219# 220# Building a world goes through the following stages 221# 222# 1. bootstrap-tool stage [BMAKE] 223# This stage is responsible for creating programs that 224# are needed for backward compatibility reasons. They 225# are not built as cross-tools. 226# 2. build-tool stage [TMAKE] 227# This stage is responsible for creating the object 228# tree and building any tools that are needed during 229# the build process. 230# 3. cross-tool stage [XMAKE] 231# This stage is responsible for creating any tools that 232# are needed for cross-builds. A cross-compiler is one 233# of them. 234# 4. world stage [WMAKE] 235# This stage actually builds the world. 236# 5. install stage (optional) [IMAKE] 237# This stage installs a previously built world. 238# 239# In all cases we must carefully adjust the environment so the proper 240# tools and header files are used. 241# 242# NOTE: The M4 environment variable is used by the [f]lex binary to 243# override the location of the 'm4' binary. The override is 244# needed for certain buildworld version transitions, specifically 245# past a certain point in 3.3 because the older /usr/bin/m4 will 246# generate output that will blow up the newer [f]lex/yacc/bison 247# utilities. 248# 249 250# bootstrap-tool stage 251# 252BMAKEENV= MAKEOBJDIRPREFIX=${BTOOLSDEST} \ 253 OBJTREE=${OBJTREE} \ 254 DESTDIR=${BTOOLSDEST} \ 255 PATH=${BTOOLSPATH}:${PATH} \ 256 M4=${BTOOLSDEST}/usr/bin/m4 \ 257 INSTALL="sh ${.CURDIR}/tools/install.sh" 258 259BMAKE= ${BMAKEENV} make -f Makefile.inc1 -DBOOTSTRAPPING \ 260 -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED \ 261 -DNO_WERROR -DNO_NLS 262 263# build-tool stage 264# 265TMAKEENV= MAKEOBJDIRPREFIX=${BTOOLSDEST} \ 266 OBJTREE=${OBJTREE} \ 267 DESTDIR= \ 268 PATH=${BTOOLSPATH}:${PATH} \ 269 M4=${BTOOLSDEST}/usr/bin/m4 \ 270 INSTALL="sh ${.CURDIR}/tools/install.sh" 271 272TMAKE= ${TMAKEENV} make -f Makefile.inc1 -DBOOTSTRAPPING \ 273 -DNO_FORTRAN -DNOSHARED 274 275# cross-tool stage 276# 277# note: TOOLS_PREFIX points to the obj root holding the cross 278# compiler binaries, while USRDATA_PREFIX points to the obj root 279# holding the target environment (and also determines where cross-built 280# libraries, crt*.o, and include files are installed). 281# 282XMAKEENV= MAKEOBJDIRPREFIX=${CTOOLSDEST} \ 283 OBJTREE=${OBJTREE} \ 284 DESTDIR=${CTOOLSDEST} \ 285 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 286 TOOLS_PREFIX=${CTOOLSDEST} \ 287 USRDATA_PREFIX=${WORLDDEST} \ 288 M4=${BTOOLSDEST}/usr/bin/m4 \ 289 PATH=${BTOOLSPATH}:${PATH} 290 291XMAKE= ${XMAKEENV} make -f Makefile.inc1 -DNO_FORTRAN -DNO_GDB \ 292 -DBOOTSTRAPPING -DNOSHARED 293 294# world stage, note the strict path and note that TOOLS_PREFIX is left 295# unset and USRDATA_PREFIX (which defaults to TOOLS_PREFIX) is set to empty, 296# which is primarily for the compiler so it targets / (e.g. /usr/<blah>) 297# for both binary and library paths, even though it is being compiled to 298# WORLDDEST. None of the programs in the world stage are ever actually 299# executed during the buildworld/installworld. 300# 301CROSSENV= MAKEOBJDIRPREFIX=${WORLDDEST} \ 302 OBJTREE=${OBJTREE} \ 303 MACHINE_ARCH=${TARGET_ARCH} \ 304 MACHINE=${TARGET} \ 305 MACHINE_PLATFORM=${TARGET_PLATFORM} \ 306 OBJFORMAT_PATH=${CTOOLSDEST} \ 307 HOST_CCVER=${HOST_CCVER} \ 308 CCVER=${WORLD_CCVER} \ 309 LDVER=${WORLD_LDVER} \ 310 BINUTILSVER=${WORLD_BINUTILSVER} 311 312WMAKEENV= ${CROSSENV} \ 313 DESTDIR=${WORLDDEST} \ 314 INSTALL="sh ${.CURDIR}/tools/install.sh" \ 315 M4=${BTOOLSDEST}/usr/bin/m4 \ 316 PATH=${STRICTTMPPATH} 317 318WMAKE= ${WMAKEENV} make -f Makefile.inc1 319 320# install stage 321# 322IMAKEENV= ${CROSSENV} \ 323 PATH=${STRICTTMPPATH} 324IMAKE= ${IMAKEENV} make -f Makefile.inc1 325 326# kernel stage 327# 328KMAKEENV= ${WMAKEENV} 329 330# buildworld 331# 332# Attempt to rebuild the entire system, with reasonable chance of 333# success, regardless of how old your existing system is. 334# 335_worldtmp: _cleantmp _mtreetmp 336.ORDER: _cleantmp _mtreetmp 337 338_cleantmp: 339 @echo 340 @echo "--------------------------------------------------------------" 341 @echo ">>> Rebuilding the temporary build tree" 342 @echo "--------------------------------------------------------------" 343.if !defined(NOCLEAN) 344 rm -rf ${BTOOLSDEST} ${CTOOLSDEST} ${WORLDDEST} 345.else 346 # XXX - These two can depend on any header file. 347 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c 348 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c 349.endif 350 351_mtreetmp: 352 mkdir -p ${DESTDIRBASE} ${BTOOLSDEST} ${CTOOLSDEST} ${WORLDDEST} 353.for _dir in ${WORLDDEST} ${BTOOLSDEST} ${CTOOLSDEST} 354 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \ 355 -p ${_dir}/ > /dev/null 356 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \ 357 -p ${_dir}/usr > /dev/null 358.endfor 359 mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ 360 -p ${WORLDDEST}/usr/include > /dev/null 361 ${LN} -sf ${.CURDIR}/sys ${WORLDDEST} 362 363_bootstrap-tools: 364 @echo 365 @echo "--------------------------------------------------------------" 366 @echo ">>> stage 1: bootstrap tools" 367 @echo "--------------------------------------------------------------" 368 cd ${.CURDIR}; ${BMAKE} bootstrap-tools 369_cleanobj: 370 @echo 371 @echo "--------------------------------------------------------------" 372 @echo ">>> stage 2a: cleaning up the object tree" 373 @echo "--------------------------------------------------------------" 374 cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/} 375_obj: 376 @echo 377 @echo "--------------------------------------------------------------" 378 @echo ">>> stage 2b: rebuilding the object tree" 379 @echo "--------------------------------------------------------------" 380 cd ${.CURDIR}; ${WMAKE} par-obj 381_build-tools: 382 @echo 383 @echo "--------------------------------------------------------------" 384 @echo ">>> stage 2c: build tools" 385 @echo "--------------------------------------------------------------" 386 cd ${.CURDIR}; ${TMAKE} build-tools 387_cross-tools: 388 @echo 389 @echo "--------------------------------------------------------------" 390 @echo ">>> stage 3: cross tools" 391 @echo "--------------------------------------------------------------" 392 cd ${.CURDIR}; ${XMAKE} cross-tools 393_includes: 394 @echo 395 @echo "--------------------------------------------------------------" 396 @echo ">>> stage 4a: populating ${WORLDDEST}/usr/include" 397 @echo "--------------------------------------------------------------" 398 cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes 399_libraries: 400 @echo 401 @echo "--------------------------------------------------------------" 402 @echo ">>> stage 4b: building libraries" 403 @echo "--------------------------------------------------------------" 404 cd ${.CURDIR}; ${WMAKE} -DNOHTML -DNOINFO -DNOMAN -DNOFSCHG libraries 405_depend: 406 @echo 407 @echo "--------------------------------------------------------------" 408 @echo ">>> stage 4c: make dependencies" 409 @echo "--------------------------------------------------------------" 410 cd ${.CURDIR}; ${WMAKE} par-depend 411everything: 412 @echo 413 @echo "--------------------------------------------------------------" 414 @echo ">>> stage 4d: building everything.." 415 @echo "--------------------------------------------------------------" 416 cd ${.CURDIR}; ${WMAKE} all 417 418# note: buildworld no longer depends on _cleanobj because we rm -rf the 419# entire object tree and built the bootstrap tools in a different location. 420# 421# buildworld - build everything from scratch 422# quickworld - skip the bootstrap, build, and cross-build steps 423# realquickworld - skip the bootstrap, build, crossbuild, and depend step. 424# 425# note: we include _obj in realquickworld to prevent accidental creation 426# of files in /usr/src. 427 428WMAKE_TGTS= 429.if !defined(SUBDIR_OVERRIDE) 430WMAKE_TGTS+= _worldtmp _bootstrap-tools 431.endif 432WMAKE_TGTS+= _obj _build-tools 433.if !defined(SUBDIR_OVERRIDE) 434WMAKE_TGTS+= _cross-tools 435.endif 436WMAKE_TGTS+= _includes _libraries _depend everything 437 438buildworld: ${WMAKE_TGTS} 439 440quickworld: _mtreetmp _obj _includes _libraries _depend everything 441 442realquickworld: _mtreetmp _obj _includes _libraries everything 443 444crossworld: _worldtmp _bootstrap-tools _obj _build-tools _cross-tools 445 446.ORDER: ${WMAKE_TGTS} 447.ORDER: _obj _includes 448.ORDER: _mtreetmp _obj 449.ORDER: installcheck backupworld-auto 450 451# 452# installcheck 453# 454# Checks to be sure system is ready for installworld 455# 456installcheck: 457.if !defined(NO_SENDMAIL) 458 @pw usershow smmsp || (echo "You may need to run 'make preupgrade' first"; /usr/bin/false) 459 @pw groupshow smmsp || (echo "You may need to run 'make preupgrade' first"; /usr/bin/false) 460.endif 461 @pw usershow _pflogd || (echo "You may need to run 'make preupgrade' first"; /usr/bin/false) 462 @pw groupshow authpf || (echo "You may need to run 'make preupgrade' first"; /usr/bin/false) 463 @pw groupshow _pflogd || (echo "You may need to run 'make preupgrade' first"; /usr/bin/false) 464.if !defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/" 465 @case `uname -r` in 1.2*|1.3-*|1.3.*|1.4.*|1.5.0-*|1.5.1-*|1.5.2-*|1.5.3-*) echo "You must upgrade your kernel to at least 1.5.4 and reboot before you can safely installworld, due to libc/system call ABI changes" ; /usr/bin/false ; esac 466.endif 467# 468# installworld 469# 470# Installs everything compiled by a 'buildworld'. 471# 472installworld: installcheck backupworld-auto 473 cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//} 474 ${INSTALL} -o root -g wheel -m 644 ${.CURDIR}/Makefile_upgrade.inc ${DESTDIR}/etc/upgrade/ 475 476# 477# reinstall 478# 479# If you have a build server, you can NFS mount the source and obj directories 480# and do a 'make reinstall' on the *client* to install new binaries from the 481# most recent server build. 482# 483reinstall: 484 @echo "--------------------------------------------------------------" 485 @echo ">>> Making hierarchy" 486 @echo "--------------------------------------------------------------" 487 cd ${.CURDIR}; make -f Makefile.inc1 hierarchy 488 @echo 489 @echo "--------------------------------------------------------------" 490 @echo ">>> Installing everything.." 491 @echo "--------------------------------------------------------------" 492 cd ${.CURDIR}; make -f Makefile.inc1 install 493 494# 495# buildkernel, nativekernel, quickkernel, and installkernel 496# 497# Which kernels to build and/or install is specified by setting 498# KERNCONF. If not defined a GENERIC kernel is built/installed. 499# Only the existing (depending TARGET) config files are used 500# for building kernels and only the first of these is designated 501# as the one being installed. 502# 503# You can specify INSTALLSTRIPPED=1 if you wish the installed 504# kernel and modules to be stripped of its debug info (required 505# symbols are left intact). You can specify INSTALLSTRIPPEDMODULES 506# if you only want to strip the modules of their debug info. These 507# only apply if you have DEBUG=-g in your kernel config or make line. 508# 509# Note that we have to use TARGET instead of TARGET_ARCH when 510# we're in kernel-land. Since only TARGET_ARCH is (expected) to 511# be set to cross-build, we have to make sure TARGET is set 512# properly. 513 514.if !defined(KERNCONF) && defined(KERNEL) 515KERNCONF= ${KERNEL} 516KERNWARN= yes 517.else 518# XXX makeshift fix to build the right kernel for the (target) architecture 519# We should configure this in the platform files somehow 520.if ${TARGET_ARCH} == "i386" 521KERNCONF?= GENERIC 522.else 523KERNCONF?= X86_64_GENERIC 524.endif 525.endif 526INSTKERNNAME?= kernel 527 528KRNLSRCDIR= ${.CURDIR}/sys 529KRNLCONFDIR= ${KRNLSRCDIR}/config 530KRNLOBJDIR= ${OBJTREE}${KRNLSRCDIR} 531KERNCONFDIR?= ${KRNLCONFDIR} 532 533BUILDKERNELS= 534INSTALLKERNEL= 535.for _kernel in ${KERNCONF} 536.if exists(${KERNCONFDIR}/${_kernel}) 537BUILDKERNELS+= ${_kernel} 538.if empty(INSTALLKERNEL) 539INSTALLKERNEL= ${_kernel} 540.endif 541.endif 542.endfor 543 544# kernel version numbers survive rm -rf 545# 546.for _kernel in ${BUILDKERNELS} 547.if exists(${KRNLOBJDIR}/${_kernel}/version) 548KERNEL_VERSION_${_kernel} != cat ${KRNLOBJDIR}/${_kernel}/version 549.endif 550.endfor 551 552# 553# buildkernel 554# 555# Builds all kernels defined by BUILDKERNELS. 556# 557bk_tools: 558 @if [ ! -f ${WORLDDEST}/.libraries_done ]; then \ 559 echo "You must buildworld before buildkernel. If you wish"; \ 560 echo "to build a kernel using native tools, config it manually"; \ 561 echo "or use the nativekernel target if you are in a rush"; \ 562 /usr/bin/false; \ 563 fi 564 565maybe_bk_tools: 566.for _kernel in ${BUILDKERNELS} 567 @if [ ! -f ${KRNLOBJDIR}/${_kernel}/.nativekernel_run ]; then \ 568 if [ ! -f ${WORLDDEST}/.libraries_done ]; then \ 569 echo "The kernel was build using buildworld tools which no" ; \ 570 echo "longer appear to exist, quickkernel failed!" ; \ 571 /usr/bin/false; \ 572 fi; \ 573 fi 574.endfor 575 576bk_build_list: 577.if empty(BUILDKERNELS) 578 @echo ">>> ERROR: Missing kernel configuration file(s) (${KERNCONF})." 579 @echo ">>> Did you move your kernel configs from i386/conf to config/?" 580 @false 581.endif 582 583bk_kernwarn: 584.if defined(KERNWARN) 585 @echo "--------------------------------------------------------------" 586 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF=" 587 @echo "--------------------------------------------------------------" 588 @sleep 3 589.endif 590 @echo 591 592# The buildkernel target rebuilds the specified kernels from scratch 593# using the crossbuild tools generated by the last buildworld. It is 594# the safest (but also the most time consuming) way to build a new kernel. 595# 596buildkernel: bk_tools bk_build_list bk_kernwarn 597.for _kernel in ${BUILDKERNELS} 598 @echo "--------------------------------------------------------------" 599 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 600 @echo "--------------------------------------------------------------" 601 @echo "===> ${_kernel}" 602.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) 603 rm -rf ${KRNLOBJDIR}/${_kernel} 604.else 605 @if [ -f ${KRNLOBJDIR}/${_kernel}/.nativekernel_run ]; then \ 606 echo "YOU ARE REBUILDING WITH BUILDKERNEL, REMOVING OLD NATIVEKERNEL BUILD"; \ 607 rm -rf ${KRNLOBJDIR}/${_kernel}; fi 608.endif 609 mkdir -p ${KRNLOBJDIR} 610.if !defined(NO_KERNELCONFIG) 611 cd ${KRNLCONFDIR}; \ 612 PATH=${STRICTTMPPATH} \ 613 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 614 ${KERNCONFDIR}/${_kernel} 615.endif 616.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) && defined(KERNEL_VERSION_${_kernel}) 617 echo ${KERNEL_VERSION_${_kernel}} > ${KRNLOBJDIR}/${_kernel}/version 618.endif 619 touch ${KRNLOBJDIR}/${_kernel}/.buildkernel_run 620.if !defined(NO_KERNELDEPEND) 621 cd ${KRNLOBJDIR}/${_kernel}; \ 622 ${KMAKEENV} make KERNEL=${INSTKERNNAME} depend 623.endif 624 cd ${KRNLOBJDIR}/${_kernel}; \ 625 ${KMAKEENV} make KERNEL=${INSTKERNNAME} all 626 @echo "--------------------------------------------------------------" 627 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 628 @echo "--------------------------------------------------------------" 629.endfor 630 631# The nativekernel target rebuilds the specified kernels from scratch 632# using the system's standard compiler rather than using the crossbuild 633# tools generated by the last buildworld. This is fairly safe if your 634# system is reasonable up-to-date. 635# 636nativekernel: bk_build_list bk_kernwarn 637.for _kernel in ${BUILDKERNELS} 638 @echo "--------------------------------------------------------------" 639 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 640 @echo "--------------------------------------------------------------" 641 @echo "===> ${_kernel}" 642.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) 643 rm -rf ${KRNLOBJDIR}/${_kernel} 644.else 645 @if [ -f ${KRNLOBJDIR}/${_kernel}/.buildkernel_run ]; then \ 646 echo "YOU ARE REBUILDING WITH NATIVEKERNEL, REMOVING OLD BUILDKERNEL BUILD"; \ 647 rm -rf ${KRNLOBJDIR}/${_kernel}; fi 648.endif 649 mkdir -p ${KRNLOBJDIR} 650.if !defined(NO_KERNELCONFIG) 651 cd ${KRNLCONFDIR}; \ 652 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 653 ${KERNCONFDIR}/${_kernel} 654.endif 655.if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN) && defined(KERNEL_VERSION_${_kernel}) 656 echo ${KERNEL_VERSION_${_kernel}} > ${KRNLOBJDIR}/${_kernel}/version 657.endif 658 touch ${KRNLOBJDIR}/${_kernel}/.nativekernel_run 659 cd ${KRNLOBJDIR}/${_kernel}; \ 660 MAKESRCPATH=${KRNLSRCDIR}/dev/disk/aic7xxx/aicasm \ 661 make -DBOOTSTRAPPING -f ${KRNLSRCDIR}/dev/disk/aic7xxx/aicasm/Makefile 662.if !defined(NO_KERNELDEPEND) 663 cd ${KRNLOBJDIR}/${_kernel}; \ 664 make KERNEL=${INSTKERNNAME} depend 665.endif 666 cd ${KRNLOBJDIR}/${_kernel}; \ 667 make KERNEL=${INSTKERNNAME} all 668 @echo "--------------------------------------------------------------" 669 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 670 @echo "--------------------------------------------------------------" 671.endfor 672 673# The quickkernel target rebuilds the specified kernels as quickly 674# as possible. It will use the native tools or the buildworld cross tools 675# based on whether the kernel was originally generated via buildkernel or 676# nativekernel. Config is rerun but the object hierarchy is not rebuilt, 677# nor is the make depend step run. 678# 679quickkernel: maybe_bk_tools bk_build_list bk_kernwarn 680.for _kernel in ${BUILDKERNELS} 681 @echo "--------------------------------------------------------------" 682 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`" 683 @echo "--------------------------------------------------------------" 684 @echo "===> ${_kernel}" 685.if exists(${KRNLOBJDIR}/${_kernel}/.buildkernel_run) 686.if !defined(NO_KERNELCONFIG) 687 cd ${KRNLCONFDIR}; \ 688 PATH=${STRICTTMPPATH} \ 689 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 690 ${KERNCONFDIR}/${_kernel} 691.endif 692 cd ${KRNLOBJDIR}/${_kernel}; \ 693 ${KMAKEENV} make KERNEL=${INSTKERNNAME} all 694.else 695.if !defined(NO_KERNELCONFIG) 696 cd ${KRNLCONFDIR}; \ 697 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \ 698 ${KERNCONFDIR}/${_kernel} 699.endif 700 cd ${KRNLOBJDIR}/${_kernel}; \ 701 make KERNEL=${INSTKERNNAME} all 702.endif 703 @echo "--------------------------------------------------------------" 704 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`" 705 @echo "--------------------------------------------------------------" 706.endfor 707 708 709# installkernel 710# 711# Install the kernel defined by INSTALLKERNEL 712# 713installkernel reinstallkernel: 714 @echo "--------------------------------------------------------------" 715 @echo ">>> Kernel install for ${INSTALLKERNEL} started on `LC_ALL=C date`" 716 @echo "--------------------------------------------------------------" 717.if exists(${KRNLOBJDIR}/${INSTALLKERNEL}/.buildkernel_run) 718 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 719 ${IMAKEENV} make KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel$//} 720.else 721 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \ 722 make KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel$//} 723.endif 724 725# 726# most 727# 728# Build most of the user binaries on the existing system libs and includes. 729# 730most: 731 @echo "--------------------------------------------------------------" 732 @echo ">>> Building programs only" 733 @echo "--------------------------------------------------------------" 734.for _dir in bin sbin libexec usr.bin usr.sbin gnu/libexec gnu/usr.bin gnu/usr.sbin 735 cd ${.CURDIR}/${_dir}; make DIRPRFX=${_dir}/ all 736.endfor 737 738# 739# installmost 740# 741# Install the binaries built by the 'most' target. This does not include 742# libraries or include files. 743# 744installmost: 745 @echo "--------------------------------------------------------------" 746 @echo ">>> Installing programs only" 747 @echo "--------------------------------------------------------------" 748.for _dir in bin sbin libexec usr.bin usr.sbin gnu/libexec gnu/usr.bin gnu/usr.sbin 749 cd ${.CURDIR}/${_dir}; make DIRPRFX=${_dir}/ install 750.endfor 751 752# 753# ------------------------------------------------------------------------ 754# 755# From here onwards are utility targets used by the 'make world' and 756# related targets. If your 'world' breaks, you may like to try to fix 757# the problem and manually run the following targets to attempt to 758# complete the build. Beware, this is *not* guaranteed to work, you 759# need to have a pretty good grip on the current state of the system 760# to attempt to manually finish it. If in doubt, 'make world' again. 761# 762 763# bootstrap-tools: Build all tools required to build all tools. Note that 764# order is important in a number of cases and also note that the bootstrap 765# and build tools stages have access to earlier binaries they themselves 766# had generated. 767# 768# patch: older patch's do not have -i. This program must be built 769# first so other bootstrap tools that need to apply patches 770# can use it. 771# [x]install: dependancies on various new install features 772# rpcgen: old rpcgen used a hardwired cpp path, newer OBJFORMAT_PATH 773# envs are not compatible with older objformat binaries. 774# 775.if exists(${.CURDIR}/games) && !defined(NO_GAMES) 776_strfile= games/fortune/strfile 777.endif 778 779# BSTRAPDIRS1 - must be built in strict order, no parallelism 780# 781# order is very important. yacc before m4 before flex. flex exec's m4, 782# m4's parser file needs the latest byacc (insanity!). 783# 784BSTRAPDIRS1= ${_strfile} \ 785 usr.bin/patch \ 786 bin/chmod bin/cp bin/cpdup bin/dd bin/mkdir bin/rm bin/echo \ 787 bin/test bin/cat bin/ln bin/mv bin/csh bin/expr bin/sh \ 788 bin/hostname bin/kill \ 789 usr.bin/yacc usr.bin/m4 usr.bin/colldef \ 790 usr.bin/uudecode usr.bin/xinstall \ 791 usr.bin/rpcgen usr.bin/bmake usr.bin/awk usr.bin/stat \ 792 usr.bin/find usr.bin/flex 793 794# BSTRAPDIRS2 - may built in parallel 795# 796BSTRAPDIRS2= \ 797 usr.bin/sed usr.bin/uname usr.bin/touch \ 798 usr.bin/mkdep usr.bin/mktemp usr.bin/lorder usr.bin/file2c \ 799 usr.bin/tsort usr.bin/tr usr.bin/join usr.bin/wc usr.bin/basename \ 800 usr.bin/gencat usr.bin/chflags usr.bin/expand usr.bin/paste \ 801 usr.bin/mklocale usr.bin/uuencode usr.bin/compile_et usr.bin/hexdump \ 802 usr.bin/cap_mkdb usr.bin/true usr.bin/false \ 803 usr.bin/cmp usr.bin/xargs usr.bin/id usr.bin/env usr.bin/dirname \ 804 usr.bin/tail usr.bin/unifdef usr.bin/tic \ 805 usr.sbin/chown usr.sbin/mtree usr.sbin/config \ 806 usr.sbin/btxld usr.sbin/zic usr.sbin/makewhatis \ 807 gnu/usr.bin/texinfo gnu/usr.bin/grep usr.bin/sort \ 808 usr.bin/gzip usr.bin/bzip2 usr.bin/mkcsmapper usr.bin/mkesdb 809 810bootstrap-tools: bootstrap-tools-before bootstrap-tools-targets1 bootstrap-tools-targets2 811 touch ${BTOOLSDEST}/.bootstrap_done 812 813bootstrap-tools-before: 814 ${LN} -fs /bin/date ${BTOOLSDEST}/bin/date 815 816bootstrap-tools-targets1: ${BSTRAPDIRS1:S/^/bstrap-/} 817 818bootstrap-tools-targets2: ${BSTRAPDIRS2:S/^/bstrap-/} 819 820.ORDER: bootstrap-tools-before bootstrap-tools-targets1 bootstrap-tools-targets2 821 822.ORDER: ${BSTRAPDIRS1:S/^/bstrap-/} 823 824.for _tool in ${BSTRAPDIRS1} ${BSTRAPDIRS2} 825bstrap-${_tool}! 826 ${ECHODIR} "===> ${_tool} (bootstrap-tools)"; \ 827 cd ${.CURDIR}/${_tool}; \ 828 make DIRPRFX=${_tool}/ obj; \ 829 make DIRPRFX=${_tool}/ depend; \ 830 make DIRPRFX=${_tool}/ all; \ 831 make DIRPRFX=${_tool}/ DESTDIR=${BTOOLSDEST} install 832.endfor 833 834# build-tools: Build special purpose build tools. 835# 836# XXX we may be able to remove or consolidate this into bootstrap-tools 837# now that we have the native helper (.nx/.no) infrastructure. 838# 839.if exists(${.CURDIR}/share) && !defined(NO_SHARE) 840_share= share/syscons/scrnmaps 841.endif 842 843_gcc_common_cross= gnu/usr.bin/gmp gnu/usr.bin/mpfr 844.if !defined(NO_GCC44) 845_gcc44_cross= gnu/usr.bin/cc44 846_gcc44_tools= gnu/usr.bin/cc44/cc_prep gnu/usr.bin/cc44/cc_tools 847.endif 848_gcc47_cross= lib/libz gnu/usr.bin/mpc gnu/usr.bin/cc47 849_gcc47_tools= gnu/usr.bin/cc47/cc_prep gnu/usr.bin/cc47/cc_tools 850_custom_cross= libexec/customcc 851_binutils= gnu/usr.bin/${WORLD_BINUTILSVER} 852 853BTOOLSDIRS= ${_gcc44_tools} ${_gcc47_tools} ${_share} 854 855build-tools: build-tools-targets 856 touch ${BTOOLSDEST}/.build_done 857 858build-tools-targets: ${BTOOLSDIRS:S/^/btools-/} 859 860.ORDER: ${_gcc44_tools:S/^/btools-/} 861.ORDER: ${_gcc47_tools:S/^/btools-/} 862 863.for _tool in ${BTOOLSDIRS} 864btools-${_tool}! 865 ${ECHODIR} "===> ${_tool} (build-tools)"; \ 866 cd ${.CURDIR}/${_tool}; \ 867 make DIRPRFX=${_tool}/ obj; \ 868 make DIRPRFX=${_tool}/ depend; \ 869 make DIRPRFX=${_tool}/ all; \ 870 make DIRPRFX=${_tool}/ DESTDIR=${BTOOLSDEST} install 871.endfor 872 873# 874# cross-tools: Build cross-building tools 875# 876.if ${TARGET_ARCH} == "i386" && ${MACHINE_ARCH} != "i386" 877_btxld= usr.sbin/btxld 878.endif 879 880CTOOLSDIRS= ${_btxld} ${_binutils} usr.bin/objformat ${_gcc_common_cross} \ 881 ${_gcc44_cross} ${_gcc47_cross} ${_custom_cross} 882 883cross-tools: cross-tools-targets 884 touch ${CTOOLSDEST}/.cross_done 885 886cross-tools-targets: ${CTOOLSDIRS:S/^/ctools-/} 887 888.for _tool in ${CTOOLSDIRS} 889ctools-${_tool}! 890 ${ECHODIR} "===> ${_tool} (cross-tools)"; \ 891 cd ${.CURDIR}/${_tool}; \ 892 make DIRPRFX=${_tool}/ obj; \ 893 make DIRPRFX=${_tool}/ depend; \ 894 make DIRPRFX=${_tool}/ all; \ 895 make DIRPRFX=${_tool}/ DESTDIR=${CTOOLSDEST} install 896.endfor 897 898# 899# hierarchy - ensure that all the needed directories are present 900# 901hierarchy: 902 cd ${.CURDIR}/etc; make distrib-dirs 903 904# 905# libraries - build all libraries, and install them under ${DESTDIR}. 906# 907# The list of libraries with dependents (${_prebuild_libs}) and their 908# interdependencies (__L) are built automatically by the 909# ${.CURDIR}/tools/make_libdeps.sh script. 910# 911# .makeenv does not work when bootstrapping from 4.x, so we must be sure 912# to specify the correct CCVER or 'cc' will not exec the correct compiler. 913# 914libraries: 915 cd ${.CURDIR}; \ 916 HOST_CCVER=${HOST_CCVER} CCVER=gcc47 \ 917 make -f Makefile.inc1 _startup_libs47; 918.if !defined(NO_GCC44) 919 cd ${.CURDIR}; \ 920 HOST_CCVER=${HOST_CCVER} CCVER=gcc44 \ 921 make -f Makefile.inc1 _startup_libs44; 922.endif 923 cd ${.CURDIR}; \ 924 make -f Makefile.inc1 _startup_libs; \ 925 make -f Makefile.inc1 _prebuild_libs; \ 926 make -f Makefile.inc1 _generic_libs; 927 touch ${WORLDDEST}/.libraries_done 928 929# These dependencies are not automatically generated: 930# 931# gnu/lib/${CCVER}/libgcc and gnu/lib/${CCVER}/csu must be built before all 932# shared libraries for ELF. The target for _startup_libsXX is 933# specifically built using gccXX. 934# 935_startup_libs47= gnu/usr.bin/cc47/cc_prep \ 936 gnu/usr.bin/cc47/cc_tools \ 937 gnu/lib/gcc47/csu \ 938 gnu/lib/gcc47/libgcc \ 939 gnu/lib/gcc47/libgcc_eh \ 940 gnu/lib/gcc47/libgcc_pic 941_startup_libs44= gnu/usr.bin/cc44/cc_prep \ 942 gnu/usr.bin/cc44/cc_tools \ 943 gnu/lib/gcc44/csu \ 944 gnu/lib/gcc44/libgcc 945_startup_libs= lib/csu lib/libc lib/libc_rtld 946 947_prebuild_libs= lib/libbz2 lib/liblzma lib/libz 948_prebuild_libs+= lib/libutil 949 950_generic_libs= gnu/lib 951 952_prebuild_libs+= lib/libcom_err lib/libcrypt lib/libmd \ 953 lib/libncurses/libncurses lib/libopie 954 955lib/libopie__L lib/libradius__L lib/libtacplus__L: lib/libmd__L 956 957_generic_libs+= lib 958 959.if !defined(NO_CRYPT) 960.if !defined(NO_OPENSSL) 961_prebuild_libs+= secure/lib/libcrypto secure/lib/libssl 962.if !defined(NO_OPENSSH) 963_prebuild_libs+= secure/lib/libssh 964secure/lib/libssh__L: secure/lib/libcrypto__L lib/libz__L 965.endif 966.endif 967_generic_libs+= secure/lib 968.endif 969 970_prebuild_libs+= lib/libradius lib/libsbuf lib/libtacplus lib/libm \ 971 lib/libpam lib/libypclnt lib/lib${THREAD_LIB} \ 972 lib/libpthread lib/libprop lib/libdevattr 973 974_generic_libs+= usr.bin/flex/lib 975 976.for _lib in ${_startup_libs44} ${_startup_libs47} \ 977 ${_startup_libs} ${_prebuild_libs} ${_generic_libs} 978${_lib}__L: .PHONY 979.if exists(${.CURDIR}/${_lib}) 980 ${ECHODIR} "===> ${_lib}"; \ 981 cd ${.CURDIR}/${_lib}; \ 982 make DIRPRFX=${_lib}/ depend; \ 983 make DIRPRFX=${_lib}/ all; \ 984 make DIRPRFX=${_lib}/ install 985.endif 986.endfor 987 988_startup_libs: ${_startup_libs:S/$/__L/} 989_startup_libs47: ${_startup_libs47:S/$/__L/} 990_startup_libs44: ${_startup_libs44:S/$/__L/} 991_prebuild_libs: ${_prebuild_libs:S/$/__L/} 992_generic_libs: ${_generic_libs:S/$/__L/} 993 994# library targets must be ordered because there are inter-library 995# races (e.g. generation of tconfig.h) 996# 997.ORDER: ${_startup_libs47:S/$/__L/} 998.ORDER: ${_startup_libs44:S/$/__L/} 999.ORDER: ${_startup_libs:S/$/__L/} 1000.ORDER: ${_prebuild_libs:S/$/__L/} 1001.ORDER: ${_generic_libs:S/$/__L/} 1002 1003.for __target in clean cleandepend cleandir obj depend includes 1004.for entry in ${SUBDIR} 1005${entry}.${__target}__D: .PHONY 1006 @if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ 1007 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \ 1008 edir=${entry}.${MACHINE_ARCH}; \ 1009 cd ${.CURDIR}/$${edir}; \ 1010 else \ 1011 ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ 1012 edir=${entry}; \ 1013 cd ${.CURDIR}/$${edir}; \ 1014 fi; \ 1015 make ${__target} DIRPRFX=${DIRPRFX}$${edir}/ 1016.endfor 1017par-${__target}: ${SUBDIR:S/$/.${__target}__D/} 1018.ORDER: ${SUBDIR:S/$/.${__target}__D/} 1019.endfor 1020.ORDER: par-clean par-cleandepend par-cleandir par-obj par-depend par-includes 1021 1022# The wmake target is used by /usr/bin/wmake to run make in a 1023# world build environment. 1024# 1025wmake: 1026 @echo '${WMAKEENV} make ${WMAKE_ARGS}' 1027 1028wmakeenv: 1029 @echo '${WMAKEENV} /bin/sh' 1030 1031bmake: 1032 @echo '${BMAKEENV} make ${BMAKE_ARGS}' 1033 1034bmakeenv: 1035 @echo '${BMAKEENV} /bin/sh' 1036 1037tmake: 1038 @echo '${TMAKEENV} make ${TMAKE_ARGS}' 1039 1040tmakeenv: 1041 @echo '${TMAKEENV} /bin/sh' 1042 1043xmake: 1044 @echo '${XMAKEENV} make ${XMAKE_ARGS}' 1045 1046xmakeenv: 1047 @echo '${XMAKEENV} /bin/sh' 1048 1049backupworld: backup-clean 1050 @mkdir -p ${WORLD_BACKUP} 1051.if (exists(${DESTDIR}/sbin) && exists(${DESTDIR}/bin) && \ 1052 exists(${DESTDIR}/usr/sbin) && exists(${DESTDIR}/usr/bin) && \ 1053 exists(${DESTDIR}/usr/lib) && exists(${DESTDIR}/usr/libexec)) 1054 tar -czf ${WORLD_BACKUP}/binaries.tar.gz -C ${DESTDIR}/ \ 1055 --options gzip:compression-level=1 \ 1056 sbin bin usr/sbin usr/bin usr/lib usr/libexec 1057.endif 1058 1059backupworld-auto: 1060.if !defined(NO_BACKUP) 1061 rm -f ${AUTO_BACKUP}/binaries.tar.gz 1062 @mkdir -p ${AUTO_BACKUP} 1063.if (exists(${DESTDIR}/sbin) && exists(${DESTDIR}/bin) && \ 1064 exists(${DESTDIR}/usr/sbin) && exists(${DESTDIR}/usr/bin) && \ 1065 exists(${DESTDIR}/usr/lib) && exists(${DESTDIR}/usr/libexec)) 1066 tar -czf ${AUTO_BACKUP}/binaries.tar.gz -C ${DESTDIR}/ \ 1067 --options gzip:compression-level=1 \ 1068 sbin bin usr/sbin usr/bin usr/lib usr/libexec 1069.endif 1070.endif 1071 1072backup-auto-clean: 1073 rm -f ${AUTO_BACKUP}/binaries.tar.gz 1074 1075backup-clean: 1076 rm -f ${WORLD_BACKUP}/binaries.tar.gz 1077 1078restoreworld: 1079.if !exists(${WORLD_BACKUP}/binaries.tar.gz) 1080 @echo "There does not seem to be a valid archive present." 1081.else 1082 @echo "Restoring system binaries from manual backup archive..." 1083 @chflags -R noschg ${DESTDIR}/sbin ${DESTDIR}/bin \ 1084 ${DESTDIR}/usr/sbin ${DESTDIR}/usr/bin \ 1085 ${DESTDIR}/usr/lib ${DESTDIR}/usr/libexec 1086 tar -xzf ${WORLD_BACKUP}/binaries.tar.gz -C ${DESTDIR}/ 1087.endif 1088 1089restoreworld-auto: 1090.if !exists(${AUTO_BACKUP}/binaries.tar.gz) 1091 @echo "There does not seem to be a valid archive present." 1092.else 1093 @echo "Restoring system binaries from auto-backup archive..." 1094 @chflags -R noschg ${DESTDIR}/sbin ${DESTDIR}/bin \ 1095 ${DESTDIR}/usr/sbin ${DESTDIR}/usr/bin \ 1096 ${DESTDIR}/usr/lib ${DESTDIR}/usr/libexec 1097 tar -xzf ${AUTO_BACKUP}/binaries.tar.gz -C ${DESTDIR}/ 1098.endif 1099 1100# Take advantage of bmake error response 1101# 1102MAKE_PRINT_VAR_ON_ERROR= \ 1103 .CURDIR \ 1104 .OBJDIR \ 1105 LD_LIBRARY_PATH \ 1106 MACHINE_ARCH \ 1107 MACHINE \ 1108 MAKEFILE \ 1109 .TARGETS \ 1110 .ERROR_TARGET \ 1111 .MAKE.LEVEL 1112 1113.include <bsd.subdir.mk> 1114