UPDATING revision 1.127
1$NetBSD: UPDATING,v 1.127 2004/10/01 15:29:23 christos Exp $ 2 3This file (UPDATING) is intended to be a brief reference to recent 4changes that might cause problems in the build process, and a guide for 5what to do if something doesn't work. 6 7For a more detailed description of the recommended way to build NetBSD 8using build.sh, see the BUILDING file. 9 10Note that much of the advice in this UPDATING file was written before 11build.sh existed. Nevertheless, the advice here may be useful for 12working around specific problems with build.sh. 13 14See also: BUILDING, build.sh, Makefile. 15 16Recent changes: 17^^^^^^^^^^^^^^^ 18 1920041001: 20 The ipfilter kernel sources moved from sys/netinet to 21 dist/sys/ipf/netinet. Due to the move some Makefile 22 dependencies are now dangling requiring a make cleandir 23 before they work again (kdump, ktruss, rescue, ipf are 24 amongst the victims). 25 2620040715: 27 The rc.d/sendmail script now uses a heuristic to determine 28 if sendmail should be started at boot time. It checks the 29 contents of /etc/mailer.conf, /etc/mail/submit.cf, and the 30 owner and mode of the sendmail binary to see if any changes 31 to the mail infrastructure have been made. If no changes 32 are detected, it will start an SMTP listener. 33 34 Setting sendmail=NO in /etc/rc.conf will override this. 35 36 If you are only using sendmail by default and only for 37 local delivery, it is important that you also update your 38 sendmail.cf so that the SMTP listener only listens on the 39 loopback interface. 40 4120040715: 42 The method by which athhal-elf.o gets pulled into i386 43 kernel builds has been changed again. The latest version 44 of bsd.files.mk is no longer required. 45 4620040621: 47 Due to the recent rototill of tools/compat it's crucial one starts 48 from a clean objdir under tools/*. 49 50 This is mostly due to generated files (yacc and lex sources) needing 51 to be generated with new rules from bsd.hostprog.mk. 52 53 The safest course is to rm -rf all objects under tools before building. 54 5520040516: 56 The end-user modifiable X11 configuration has been moved 57 from /usr/X11R6/lib/X11/<dir> to /etc/X11/<dir>. 58 Ensure that src and xsrc is up to date, and run 59 "make cleandir" in src/x11 before your next build. 60 61 postinstall currently doesn't migrate the files from 62 /usr/X11R6/lib/X11/* to /etc/X11/* although it does 63 detect that this needs to occur, so you'll have to 64 manually move these files yourself. 65 6620040426: 67 Support for the original dynamic sysctl node structure has 68 been removed in favor of the newer layout. This affects 69 consumers of the create and delete interface, as well as 70 the dynamic discovery mechanism. This is believed only to 71 be the sysctl(8) binary itself, at this point in time, so 72 the only effect of this should be that a sysctl binary 73 built from sources dated between 2003/12/04 and 2004/03/24 74 will not work on a kernel built from sources dated after 75 2004/04/25. If you need a new sysctl binary but build.sh 76 does not work, make sure that your revision of 77 src/sys/sys/sysctl.h is 1.112 (or later), and then the 78 do the following: 79 80 cd /usr/src (or wherever your source tree is) 81 make USETOOLS=no includes 82 cd lib/libc 83 make USETOOLS=no dependall install 84 cd ../../sbin/sysctl 85 make USETOOLS=no dependall install 86 87 If you are using older sysctl binary, GNU autoconf would fail to 88 identify your machine architecture, and tries to build binary for 89 "unknown-unknown-netbsd20F" or something like that. if that happens, 90 make sure to follow the above steps. 91 9220040425: 93 The ffs superblock issues listed below under 20040109 and 20030402 94 are now automatically addressed by the /etc/rc.d/fixsb script or by 95 sysinst when it checks a a filesystem. The manual fsck_ffs -b16 -c4 96 invocation mentioned below will continue to work and is now 97 automated by those scripts. Note that under certain circumstances, 98 affected filesystems upgraded to a -current kernel first before 99 upgrading their userland with the fixsb and fsck_ffs fixes may 100 encounter a 'freeing free inode' panic when writing to the affected 101 filesystem, so it is a good idea to repair the filesystem as soon as 102 possible. For more details on the fixsb script, see pr install/25138. 103 10420040418: 105 statfs(2) and friends have been replaced with statvfs(2). Before 106 installing a newly build userland make sure that you are running 107 a newly built kernel with COMPAT_20 set. In addition your libc 108 build might not work (undefined SYS_statfs symbol) because make 109 clean does not know how to remove files it does not know about 110 anymore. Manually remove all generated .S sources and objects 111 from the libc build directory. 112 11320040326: 114 The method by which athhal-elf.o gets pulled into i386 kernel builds 115 has been changed. The file is now stored as a uuencoded file in CVS 116 and the generated Makefile will use the new .uue rules from bsd.file.mk 117 to build it. 118 119 This means you must have the latest bsd.files.mk installed when 120 building a kernel without USETOOLS=yes. 121 12220040318: 123 A bug in the cgd(4) blowfish code was corrected, without 124 provision of backwards compatibility, after several public 125 notices over several months. Users of cgd with blowfish cipher 126 ONLY must dump their data before updating their kernels, and 127 recreate cgd's and restore data using the new kernel. See 128 (recent message to current-users, URL when mail-index has updated) 129 13020040313: 131 On acorn32, the opms and qms drivers have been withdrawn, and 132 the old wsqms driver is now called qms. Kernel config files 133 will need updating. See the ones in sys/arch/acorn32/conf 134 for examples. 135 13620040125: 137 On acorn32, the beep and sysbeep devices are no longer 138 needed, and will need to be deleted from kernel configuration 139 files. 140 14120040109: 142 Compatibility for old ffs superblock layouts has been 143 added, and the restrictive fsck checks have been reenabled 144 when using those layouts. If you have been using -current 145 since 20030402, you may find that fsck again signals fatal 146 superblock mismatches. To repair, make sure you have 147 an updated fsck_ffs and then you can use fsck_ffs -b 16 -c 4 148 to complete the filesystem upgrade. A message has 149 been added to the kernel which should detect this problem. 150 See the following discussion for more information: 151 http://mail-index.NetBSD.org/current-users/2004/01/11/0022.html 152 15320031203: 154 New binutils builds may fail due to old dependencies. 155 It's necessary to "make cleandir" to ensure that 156 the dependencies will be rebuilt correctly. 157 15820031111: 159 A newer mkdep is needed. Error noting that is 160 cc: Ambiguous abbreviation -- 161 16220031008: 163 /usr/include/sys/disklabel_mbr.h was removed. 164 It's necessary to "make cleandir" to ensure that 165 the dependencies will be rebuilt correctly. 166 16720031007: 168 A sign exension bug was fixed which set all the high bits 169 of our newly expanded ffs fs_flags. This should only 170 affect users who installed or upgraded in September of 2003. 171 A small utility program was posted to tech-kern which 172 should fix this problem, and a warning message was added 173 to the kernel which should discover and warn about it. See 174 http://mail-index.NetBSD.org/tech-kern/2003/10/07/0005.html 175 17620030906: 177 With the addition of siginfo support the old signal trampoline 178 code has been deprecated to COMPAT_16. Make sure that your running 179 kernel has COMPAT_16 enabled before building userland. 180 18120030801: 182 With the new openssl, there is some header and library shuffling. 183 rm -f /usr/include/des.h /usr/include/kerberosIV/* /lib/libdes* \ 184 /usr/lib/libdes* before building. 185 18620030703: 187 Texinfo was updated to 4.6. To avoid failures when trying to 188 build the included texinfo files, do: 189 190 cd src/gnu/usr.bin/texinfo 191 make MKINFO=no dependall install 192 19320030630: 194 Groff was updated to 1.19; it's probably necessary to do 195 cd share/mk && make install 196 cd src/gnu/usr.bin/groff 197 make MKMAN=no dependall install 198 (untested). 199 20020030516: 201 Due to bugs in the export handling code, invalid export lines 202 were accepted before and caused the kernel to panic when 203 mountd got restarted because it freed memory that had already 204 been freed. This has been fixed and the kernel checks 205 export addresses very strictly. If you upgrade your kernel, 206 make sure you also upgrade mountd, because if your export 207 file contains lines with an old inet4 address syntax (i.e. 208 a.b.c or a.b or a), they will get rejected by the new kernel. 209 21020030402: 211 The superblock layout for FFS was changed. If you have 1.6 212 fsck binaries, they will signal a fatal superblock mismatch 213 with the first alternate, because they compare too many 214 fields (even ones that aren't useful). If possible, upgrade 215 your fsck_ffs binary before using a new kernel. 216 None of this signals actual filesystem damage. 217 21820030324: 219 sendmail version 8.12.8 was imported. Since sendmail is 220 now setgid to the smmsp group, and runs in "collection" 221 mode for most common activities, there is a new config 222 file called submit.cf that needs to live in /etc/mail. 223 The generic submit.cf sample in /usr/share/sendmail/cf 224 is named netbsd-msp.cf. Upgrading your regular sendmail 225 configuration file is also strongly advised. 226 227 See the section named "MESSAGE SUBMISSION PROGRAM" in 228 the updated /usr/share/sendmail/README file for more 229 information. 230 23120030117: 232 Texinfo was updated to 4.3. To avoid failures when trying to 233 build the included texinfo files, do: 234 235 cd src/gnu/usr.bin/texinfo 236 make MKINFO=no dependall install 237 23820021223: 239 The METALOG format changed slightly, to remove the leading 240 "${DESTDIR}" from path names. 241 This only affects people building with UNPRIVED. 242 For complete safety, remove the DESTDIR entirely and 243 update tools/mtree, before running make build. 244 24520021219: 246 CVS repository layout was changed. See the following for details 247 if you are using (anonymous) cvs to update your tree. 248 249 http://mail-index.NetBSD.org/netbsd-announce/2002/12/19/0000.html 250 25120021219: 252 install(1) had a '-N dbdir' option added, to specify an 253 alternate location to look up users & groups (instead 254 of the host system passwd(5) and group(5) databases). 255 256 The build system was modified to take advantage of 257 this option (using ${NETBSDSRCDIR}/etc), so if you 258 use USETOOLS==no, you may have to rebuild and 259 reinstall usr.bin/xinstall first. 260 26120021130: 262 fparseln(3) moved from libutil to libc. 263 If building to DESTDIR=/, reinstall the includes 264 and rebuild libc: 265 make includes 266 make do-lib-libc 267 If using build.sh, "cd tools/compat && make clean" 268 before rebuilding the tools. 269 27020021126: 271 The mk.conf(5) variable SYS_INCLUDE has been deprecated, 272 including the optional "SYS_INCLUDE=symlinks" support. 273 All header files, including <sys/*.h> are copied into 274 /usr/include. 275 27620021121: 277 The C run-time support files crtbegin.o and crtend.o 278 (and their companions crtbeginS.o and crtendS.o) were 279 split up, with new crti.o and crtn.o files resulting. 280 This means that libtool needs to be rebuilt once the 281 new libraries are installed. The process of rebuilding 282 libtool will cause it to automatically notice the new 283 required files, but it *must* be rebuilt in order to 284 do this. 285 286 An out-of-date libtool will result in shared libraries 287 which lack _init() and _fini() routines, which means that 288 their global contructors/destructors will not be invoked. 289 29020021121: 291 A bug related to how ARM ELF objects were tagged has been 292 corrected. 293 294 NetBSD ARM ELF uses the soft-VFP floating point model by 295 default. However, the assembler lacked support for marking 296 objects as using the VFP floating point format, and the 297 compiler was not properly passing the flag indicating "soft-VFP" 298 to the assembler. 299 300 Unfortunately, this means that the linker will now consider 301 old (i.e. not marked "softvfp") NetBSD ARM ELF objects to be 302 incompatible with new (properly marked) objects. 303 304 The problem will only manifest itself if you attempt to compile 305 a new program using the fixed toolchain, and link that program 306 against old libraries which do not have the proper "softvfp" 307 markings. ALL OF YOUR EXISTING BINARIES AND SHARED LIBRARIES 308 WILL CONTINUE TO WORK PROPERLY. 309 310 The only work-around for the problem is to recompile all of 311 the libraries on the system. The easiest way to do this for 312 system libraries is to install a binary snapshot; they are 313 generally available on releng.NetBSD.org. Any packages you 314 have installed which supply libraries will have to be recompiled 315 if you wish to link new programs against those libraries. 316 317 If you have questions about this matter, please contact 318 port-arm@NetBSD.org. 319 32020021011: 321 Systrace has been improved to support privilege elevation. 322 Updating the kernel requires the userland part of systrace 323 to be rebuilt. 324 32520021010: 326 The config(8) grammar was changed to allow options to register 327 dependencies on attributes, as well as other options. Users 328 must update and reinstall usr.sbin/config before building a new 329 kernel. 330 33120021009: 332 A new attribute dependency syntax was introduced to config(8), 333 which is now used by the SCSI configuration description. Users 334 must update and reinstall usr.sbin/config before building a new 335 kernel. 336 33720021003: 338 Several changes have been made to the autoconfiguration 339 framework. Users must update and reinstall usr.sbin/config 340 before building a new kernel. 341 34220021001: 343 The i386mp branch has been merged. To compile a kernel, users 344 will need to add the option 'cpu* at mainbus?' to their configuration 345 file. Multiprocessor kernels will need 346 ioapic* at mainbus? apid ? 347 options MULTIPROCESSOR 348 options COM_MPLOCK 349 35020020922: 351 MKDYNAMICROOT=yes enabled by default, which means that 352 certain shared libraries are installed into /lib, the shared 353 linker is installed into /libexec, and all programs in /bin 354 and /sbin are dynamically linked. 355 If you do not use "make build", you should ensure that 356 you have the libraries and shared linker in the new locations, 357 with: 358 make do-lib-csu do-lib-libc do-lib do-gnu-lib do-ld.elf_so 359 36020020917: 361 USE_NEW_TOOLCHAIN has been replaced with: 362 - TOOLCHAIN_MISSING -- set to "yes" on platforms for which 363 there is no working in-tree toolchain (hppa, ns32k, sh5, 364 x86_64). 365 - EXTERNAL_TOOLCHAIN -- if defined by the user, points to the 366 root of an external toolchain (e.g. /usr/local/gnu). This 367 enables the cross-build framework even for TOOLCHAIN_MISSING 368 platforms. 369 37020020906: 371 gehenna-devsw has been merged into the trunk. Need to update and 372 reinstall usr.sbin/config before building the kernel. 373 37420020822: 375 Crunched rescue tools (contents of /bin and /sbin, plus others) 376 are now provided in /rescue. 377 378 To ensure that these are built statically linked (no matter 379 what the setting of LDSTATIC is), use a crunchgen(1) built 380 from sources newer than 20020820 (see the next entry). 381 38220020820: 383 crunchgen(1) changed to ensure that the generated program 384 is statically linked. 385 386 Solution: update and reinstall usr.bin/crunch 387 38820020605: 389 smmsp user/group has been added for sendmail. 390 391 Add the following into /etc/group: 392 393 smmsp:*:17: 394 395 and the following to /etc/master.passwd (via vipw): 396 397 smmsp:*:17:17::0:0:Sendmail Message Submission Program:/nonexistent:/sbin/nologin 398 39920020515: 400 sshd user/group has been added. Need to hand add this in, or sshd 401 will not let you log in (with default, or UsePrivlegeSeparation=yes) 402 403 Add the following into /etc/group: 404 405 sshd:*:16: 406 407 and the following to /etc/master.passwd (via vipw): 408 409 sshd:*:16:16::0:0:& pseudo-user:/var/chroot/sshd:/sbin/nologin 410 411 Also /var/chroot/sshd directory needs to be present (digged as part of 412 the build process). 413 41420020426: 415 NBUILDJOBS obsoleted in favor of just using -j. 416 41720020426: 418 etc/postinstall added, which performs various checks for 419 configuration file updates and changes, and can fix most of 420 the problems identified. 421 This should make it much easier to upgrade a system's 422 configuration from earlier systems (as far back as NetBSD 1.5). 423 42420020320: 425 <bsd.lib.mk> needs a new install(1) for its "-a cmd" support. 426 Build and install at usr.bin/xinstall before the build. 427 42820020319: 429 Raw IPv6 socket now makes strict checking for sa_family and sa_len 430 on send(2) operation. Be sure to have sbin/rtsol and usr.sbin/rtsold 431 newer than November 2001 when you upgrade the kernel. 432 43320020311: 434 ssh configuration files were moved from /etc to /etc/ssh. Beware 435 if you restart your machine from remote. Note that sshd.conf needs 436 to be changed (due to the use of "/etc" inside). 437 43820020223: 439 Users of the VAX port will need to rebuild and install gas 440 so it deal with the now present register prefix used in all 441 the VAX assembly files. 442 44320020118: 444 ntpd user/group has been added. Need to hand add this in or builds 445 will break as mtree aborts early. 446 447 Add the following into /etc/group: 448 449 ntpd:*:15: 450 451 and the following to /etc/master.passwd (via vipw): 452 453 ntpd:*:15:15::0:0:Ntpd pseudo-user:/var/chroot/ntpd:/sbin/nologin 454 45520011207: 456 If you're attempting to build a snapshot on sparc64 and are getting 457 reloc errors from the toolchain groff binary this means your native 458 toolchain has some broken C++ bits. 459 460 To fix: 461 462 Build a new toolchain (i.e. build.sh -t) 463 Use the new toolchain to build and install natively (i.e. /usr/lib) 464 465 gnu/lib/libgcc 466 gnu/lib/libstdc++ 467 468 After this a snapshot will be able to be built. 469 47020011201: 471 In order for a sparc64 build to work you must have a working awk. If 472 you've built and installed a system with the new toolchain up to this 473 point you do not have a working awk as its ability to do floating 474 point is broken. 475 476 To build: 477 478 remake and install gnu/lib/libgcc 479 remake and install gnu/usr.bin/gawk into /usr/bin (make sure it links 480 against the new libgcc.a) 481 48220011128: 483 Kernel config information was changed to use defflag in 484 the various "files" files. Bug fixes to config(8) are 485 required in order for this to work properly. Make sure 486 to build and install in usr.sbin/config before attempting 487 to build a new kernel. 488 48920011030: 490 libc/locale/wcstod.c now needs new lint(1). Update lint(1) 491 before building libc. 492 49320011029: 494 The new document BUILDING.mdoc (view with nroff | more, or 495 see pre-generated .txt and .html versions) describes the build 496 procedure in great detail. BUILDING, and the USE_NEW_TOOLCHAIN 497 build process, are intended in the long run to replace this 498 manual update log. 499 500 Users building a USE_NEW_TOOLCHAIN system should read the 501 BUILDING document for caveats. Generally, BUILDING supersedes 502 UPDATING for these systems, as tool updating is taken care of 503 by the new build system. 504 50520011028: 506 src/etc/Makefile now needs install to be able to handle 507 symlinks that point to nowhere. A bug in install that 508 prevented this was corrected. 509 510 Solution: update and reinstall usr.bin/xinstall 511 Better Solution: Use the new toolchain and it will just work 512 for you. 513 51420011006: 515 /etc/mtree/NetBSD.dist has been updated to take advantage of 516 absolute path support added to mtree(8). Older mtree(8)s don't 517 understand the format. 518 519 Solution: update and reinstall usr.sbin/mtree 520 52120011004: 522 Crunchgen has been updated to work via reach-over makefiles. Updating 523 is suggested before running a snapshot build 524 52520010915: 526 The new "ubcperf" code committed by Chuck Silvers removed 527 a header file, uvm/uvm_vnode.h. There may be stale .depend 528 files that still reference this file. 529 530 Solution: "make cleandir && make dependall" in affected 531 directories. 532 53320010803: 534 grep.info is now built from grep.texi using makeinfo. Since it 535 requires makeinfo v4.0, you need to install new texinfo before 536 building gnu/usr.bin/grep. To install new texinfo, please follow 537 the instruction described in 20010726 entry. 538 53920010803: 540 (i386 only): i386 kernel now uses new instructions like 541 `fxsave' which old gas doesn't understand. To build the 542 kernel successfully, you need to build and install a new toolchain, 543 (i.e., build.sh -t) or (temporarily) comment out "options I686_CPU" 544 from your kernel configuration until you rebuild your userland. 545 See 20011029 above and BUILDING file in this directory for more information. 546 [updated 20020630 since i386 gas moved when USE_NEW_TOOLCHAIN enabled] 547 54820010731: 549 Bootloader update on ELF platforms. DDB in kernels from before 550 this will be unable to read symbol tables provided by newer 551 bootloaders. 552 55320010726: 554 Texinfo was updated to 4.0. To avoid failures when trying to 555 build the included texinfo files, do: 556 557 cd src/gnu/usr.bin/texinfo 558 make MKINFO=no dependall install 559 56020010718: 561 Enabled correct .init/.fini processing in crt0. The way this 562 was done was to change a -I directive to cc(1), which means 563 make(1) will have a stale dependency (it will be checking the 564 timestamp on the wrong "dot_init.h"). 565 566 The symptom you will see is that new programs die with SIGSEGV 567 if you have a stale dependency. 568 569 Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so 570 before starting your build. 571 57220010628: 573 A construct was added to uvm_page.h that uncovered a bug 574 in lint(1). If you get a warning/error about a non-portable 575 bitfield, update your lint(1) before proceeding. 576 57720010226: 578 Added named user/group to system. Need to hand add this in or builds 579 will break as mtree aborts early. 580 581 To work around add by hand: 582 583 named:*:14: 584 585 to /etc/group and add: 586 587 named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin 588 589 to master.passwd (use vipw for instance if doing by hand). 590 591 Now a make build should progress. 592 59320010219: 594 get/setprogname() added. Any hostprogs that may use this will need 595 to be bootstrapped manually until the host system is current. 596 597 Known problems: sys/arch/macppc/stand/fixcoff 598 usr.sbin/config (adding -DMAKE_BOOTSTRAP to 599 CFLAGS and rebuilding should work) 600 usr.sbin/mdsetimage - Build a static copy if 601 building a snapshot before fully bootstrapped. 602 60320010204: 604 prepare the code to compile with stricter gcc flags. in 605 particular start eliminating redundant declarations. Yacc 606 needs to be installed before make build. 607 60820010114: 609 introduce .if commands(target) in make(1). You need to 610 bring everything up-to-date first, then without installing 611 anything make and install in usr.bin/make, then proceed 612 with make build. 613 61420010101: 615 bsd.subdir.mk committed 20001230 had a bug which caused 616 afterinstall targets to run too soon; update again. 617 61820001230: 619 New share/mk files needed to support .WAIT in SUBDIR variables. 620 If you get make errors, 621 (cd share/mk; make install) 622 Also, PRINTOBJDIR has changed and is now used more heavily. 623 62420001019: 625 The `ca' device driver has been replaced by `ld'; although the 626 major and minor numbers haven't changed, you should update your /dev 627 directory. 628 62920000929: 630 The following make directives are obsoleted. 631 MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA 632 By default, RSA is built into libcrypto. IDEA and RC5 will not be 633 built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build 634 additional library libcrypto_{idea,rc5}. 635 636 637Hints for a more successful build: 638^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 639 Use build.sh, but do not use its "expert mode": 640 This will will automatically build the tools in the 641 correct order, and it will keep the tools and the 642 new build products from interfering with the running 643 system. This will allow you to ignore most of the 644 other advice in this file. 645 Build a new kernel first: 646 This makes sure that any new system calls or features 647 expected by the new userland will be present. This 648 helps to avoid critical errors when upgrading. 649 Use object directories: 650 This helps to keep stale object 651 files from polluting the build if a Makefile "forgets" 652 about one. It also makes it easier to clean up after 653 a build. It's also necessary if you want to use the 654 same source tree for multiple machines. 655 To use object directories with build.sh: 656 a) invoke build.sh with the "-M" or "-O" options. 657 To use object directories without using build.sh: 658 a) cd /usr/src ; make cleandir 659 b) Add "OBJMACHINE=yes" to /etc/mk.conf 660 c) Add "MKOBJDIRS=yes" to /etc/mk.conf 661 d) cd /usr/src ; make build 662 Note that running "make obj" in a directory will create 663 in obj.$MACHINE directory. 664 Build to a DESTDIR: 665 This helps to keep old installed files (especially libraries) 666 from interfering with the new build. 667 To build to a DESTDIR with build.sh, use the "-D" option. 668 To build to a DESTDIR without using build.sh, set the DESTDIR 669 environment variable before running make build. It should be 670 set to the pathname of an initially empty directory. 671 Problems: if you do not use build.sh, you might need to 672 update critical utilities without using DESTDIR since 673 nothing is executed from what is installed in DESTDIR. 674 (See critical utils, below.) 675 Build often: 676 This keeps critical utilities current enough to not choke 677 on any other part of the source tree that depends on up to 678 date functionality. If you use build.sh, you should not have 679 this problem. 680 681What to do if things don't work: 682^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 683When things don't work there is usually a few things that commonly 684should be done. 685 1) make includes 686 This should be done automatically by make build. 687 2) cd share/mk && make install 688 Again, automatically done by make build. 689 690Failsafe rebuild of a small part of the tree: 691^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 692To make sure you rebuild something correctly you want to do 693something like the following: 694 1) Make sure the includes and .mk files are up to date. 695 2) Make sure any program used to build the particular 696 utility is up to date. (yacc, lex, etc...) 697 3) cd ...path/to/util... 698 make cleandir 699 rm ...all obj directories... 700 make cleandir # yes, again 701 make obj 702 make depend && make 703 704Failsafe rebuild of the entire tree: 705^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 706If you really want to make sure the source tree is clean and 707ready for a build try the following. Note that sourcing /etc/mk.conf 708(a make(1) Makefile) in this manner is not right, and will not work 709for anyone who uses any make(1) features in /etc/mk.conf. 710 711---cut here--- 712#!/bin/sh 713. /etc/mk.conf 714 715if [ -z $NETBSDSRCDIR ] ; then 716 NETBSDSRCDIR=/usr/src 717fi 718if [ \! -d $NETBSDSRCDIR ] ; then 719 echo Unable to find sources 720 exit 1 721fi 722find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 723 724if [ -z $BSDOBJDIR ] ; then 725 BSDOBJDIR=/usr/obj 726fi 727if [ -d $BSDOBJDIR ] ; then 728 rm -rf $BSDOBJDIR 729fi 730 731cd $NETBSDSRCDIR && make cleandir 732 733---cut here--- 734 735Critical utilities: 736^^^^^^^^^^^^^^^^^^^ 737 gnu/usr.bin/egcs 738 usr.bin/compile_et 739 usr.bin/make 740 usr.bin/yacc 741 usr.bin/lex 742 usr.bin/xlint 743 usr.sbin/config 744 745Other problems and possible solutions: 746^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 747Symptom:Unreasonable compiler errors. 748Fix: Rebuild gnu/usr.bin/egcs 749 750Symptom:Complaints involving a Makefile. 751Fix: Rebuild usr.bin/make: 752 cd usr.bin/make && make && make install 753 Or, a failsafe method if that doesn't work: 754 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 755 756Fix: Make sure .mk files are up to date. 757 cd share/mk && make install 758 759Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 760Fix: Rebuild usr.sbin/config 761 762Symptom: 763Fix: Rebuild usr.bin/yacc 764 765Symptom: 766Fix: Rebuild usr.bin/lex 767 768Symptom: 769Fix: rm /usr/lib/libbfd.a 770 771Symptom:Obsolete intermediate files are used during compilation 772Fix: Try the following sequence of commands in the directory in question. 773 make cleandir; rm `make print-objdir`; make cleandir; make obj 774 (If you built the tree without "make obj" in the past, obsolete files 775 may remain. The command tries to clean everything up) 776 777Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type 778Fix: Rebuild and install usr.bin/menuc 779 780Symptom:mklocale not found during build in share/locale/ctype 781Fix: Build and install usr.bin/mklocale 782 783Symptom:undefined reference to `__assert13' or `__unsetenv13' 784Fix: Rebuild and install lib/libc 785 786Symptom:usr.sbin/config fails to build. 787Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 788 789Symptom:undefined reference to `getprogname' or `setprogname' 790Fix: Rebuild and install lib/libc 791 792Symptom:lint does not understand the '-X' option 793Fix: May need to build & install libs with NOLINT=1 before rebuilding lint 794