UPDATING revision 1.267
1$NetBSD: UPDATING,v 1.267 2016/04/03 06:16:02 mrg 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 14Sections are marked with "^^^^^". After the section on "Recent changes" 15are several sections containing more general information. 16 17See also: BUILDING, build.sh, Makefile. 18 19Recent changes: 20^^^^^^^^^^^^^^^ 21 2220160401: 23 Ports switching to GCC 5.3 will need a full "make cleandir". 24 2520160306: 26 NetBSD's regexp implementation is now part of libnbcompat. 27 Nblex, nbm4, nbpax, nbsed use it and they may crash on 28 non-NetBSD hosts if linked with stale object files produced 29 while they included a non-NetBSD regex.h. 30 In any case, you should "make cleandir" at least these tools 31 before updating your toolchain. 32 3320160125: 34 Dtrace has been enabled by default on some architectures. 35 When doing an update build, make sure to clean the etc/mtree 36 object directory before starting the build - otherwise the 37 needed directories in destdir will not be created. 38 An easy way to do this is: 39 cd src/etc/mtree && $TOOLDIR/bin/nbmake-$arch cleandir 40 4120150818: 42 New acpica requires "make cleandir" in src/external/bsd/acpica 43 again. 44 4520150413: 46 New acpica requires "make cleandir" and reinstalling yacc 47 in /usr/src/external/bsd/byacc and /usr/src/tools/yacc and 48 also "make cleandir" in /usr/src/external/bsd/acpica. 49 5020150404: 51 Lint changes require a full rebuild of the tool, so make 52 sure to build without -u option to build.sh, or manually 53 do a make cleandir in src/tools/lint1 and 54 src/usr.bin/xlint. 55 5620150310: 57 Improvements to openssl for arm mean that update builds of 58 the openssl libraries will fail. A make cleandir in 59 external/bsd/openssl/lib is needed 60 6120141026: 62 A mishap during the import of pppd may cause your corruption 63 in your cvs directory if you happened to do a cvs update 64 during a short period of time. To fix, just remove the 65 directory src/external/bsd/ppp/dist/pppd completely 66 and let cvs restore it on next update. 67 6820140721: 69 The src/external/mit/lua/src directory was accidentally created 70 and then deleted in the CVS repository. If you get errors like 71 72 cvs [update aborted]: cannot open directory 73 /cvsroot/src/external/mit/lua/src: No such file or directory 74 75 then delete your local copy of that directory tree and try again. 76 7720140530: 78 ARM eABI switched to DWARF based exception handling. This requires 79 rebuilding all C++ code. It is strongly advised to do a clean build. 80 8120140131: 82 The new compiler_rt/libc integration moved a few things. It is strongly 83 advised to do a clean build. At least lib/libc, the compat version(s) 84 of libc, libkern, rump and the kernels need to be cleaned. 85 8620131227: 87 1. The new ntpd runs in a restricted mode to prevent amplification 88 attacks. If you need ntpdc to work you need to explicitly enable 89 mode7 in your config file. Make sure you put the necessary restrict 90 statements to avoid being exposed. 91 2. strncat has moved from lib/libc to common/lib/libc; you might need 92 to make clean in libc 93 9420131129: 95 The GMP sources were updated, and builds will likely fail without 96 cleaning their build trees for both tools and in-tree, like below. 97 9820131128: 99 The MPC and MPFR sources were updated, and builds may require their 100 tools and in-tree directories cleaned for successful updates. 101 10220130605: 103 The kernel option FAST_IPSEC no longer exists, it's been renamed 104 to IPSEC (and the older IPSEC version removed). 105 10620130605: 107 Previous freetype installations eroneously installed private 108 header files. If you are building against a non-empty $DESTDIR, 109 please remove ${DESTDIR}//usr/X11R7/include/freetype2/freetype/. 110 11120130531: 112 The xdm update may cause build failure due to xdm.man being 113 in the obj tree. Make sure to ensure any like this: 114 nbmake: nbmake: don't know how to make xdm.man. Stop 115 is fixed by deleting the xdm.man in the obj tree. 116 11720130530: 118 Updates of many xsrc packages will leave old .pc files around. 119 Best to clean out the xsrc objdir entirely before rebuilds. 120 12120130301: 122 The removal of netiso requires manual removal of /usr/include/netiso 123 prior to the build and make cleandir in /usr/src/usr.bin/{ktruss,kdump} 124 12520120726: 126 The update of OpenSSL requires cleaning both the OpenSSL build 127 directory and DESTDIR. *Even non-update builds require cleaning 128 DESTDIR.* Builds done without taking these steps may fail, or in 129 some cases may succeed and install broken OpenSSL libraries that 130 cause third-party software to link incorrectly and/or crash. 131 13220120507: 133 The database schema for makemandb was changed. You will 134 need to update the database using 'makemandb -f' or wait 135 for the next weekly run to fix it. 136 13720120319: 138 sys/conf/Makefile.kern.inc has been modified to adjust the 139 size of db_symtab automatically. You need to update dbsym in 140 your $TOOLDIR to build kernels with options SYMTAB_SPACE. If 141 you don't want this behavior, add AUTO_SYMTAB_SPACE=no to your 142 mk.conf. 143 14420120216: 145 Default for MKCATPAGES changed to NO. Update builds will fail 146 unless DESTDIR is cleaned manually. If you built between 20120207 147 and 20120216, daily and weekly could have created an unreadable 148 /var/db/man.db index for apropos. Running makemandb -f or 149 the next run of weekly will fix it. 150 15120111227: 152 If you built between 20111225 and 20111227 you need to remove 153 /usr/lib/libpam.so.4* and /usr/lib/security/*.so.4, since the 154 bump has been reverted. 155 15620111125: 157 The "rnd" pseudodevice has been added to sys/conf/std, which 158 means it should no longer be explicitly listed in kernel 159 configuration files. The line "pseudo-device rnd" should be 160 removed from any custom kernel config files users may have. 161 16220111119: 163 A problem with the datastructures used by the rndctl(8) 164 utility (pointers in datastructures in an array, making 32->64 165 bit compatibility very painful) has been fixed in a 166 non-backwards-compatible way. If you replace your kernel, 167 replace your rndctl executable too. 168 16920111001: 170 the prop_*_send_syscall() functions from proplib(3) have been 171 changed and their new version is not backward compatible with the old 172 one. So ensure that all consumers of these functions (currently: 173 quota2 code and its tests) are updated together with the new lib. 174 17520110817: 176 sparc has been changed to use GCC 4.5.3, so any objdir or 177 DESTDIR for them should be deleted before updating. 178 17920110806: 180 i386 and amd64 have been changed to use GCC 4.5.3, so any 181 objdir or DESTDIR for them should be deleted before updating. 182 18320110805: 184 The update to GCC 4.5.3 requires a non-trivial portion of 185 the tree to be cleaned. Best to delete both objdir and 186 DESTDIR before running this update. So far, only the 187 sparc64, mips and powerpc platforms have changed. 188 18920110803: 190 The layout of external/public-domain/xz has changed. To do an 191 update build you will have to remove the contents of the OBJDIR 192 for external/public-domain/xz/bin by hand as the xz entry there 193 is now a directory. 194 19520110410: 196 The configuration of src/tools/gcc has changed. To do an 197 update build you have to clean both tools/binutils and 198 tools/gcc by hand. 199 20020110328: 201 Building the Xorg binary was moved into a subdirectory to fix 202 ordering issues with "make all". It may be necessary to remove 203 the OBJDIR for external/mit/xorg/server/xorg-server/hw/xfree86 204 if your update build fails, as the "Xorg" entry there is now a 205 directory. 206 20720110121: 208 Assembler files no longer use -traditional-cpp. This can break 209 the build of individual parts of the tree. This is handled 210 correctly by build.sh. Manual builds have to update /usr/share/mk 211 and re-run config(1) for any kernel configurations as needed. 212 21320101217: 214 The tcpdump(8) program was changed to drop privileges and chroot(2) 215 by default. It may be necessary to manually update passwd(5) and 216 group(5) in order to make the program work with existing setups. 217 21820101125: 219 The latest changes to setenv(3) dissallow setting environment 220 variables with names that contain '='. Revision 1.18 of env.c 221 assumed that this was allowed. Installing a new libc with an 222 old copy of /usr/bin/env causes env x=1 printenv | grep x= to 223 break which affects the autoconf tests for dependency finding, 224 so building gcc will end up printing: 225 checking dependency style of gcc... none 226 configure: error: no usable dependency style found 227 Fix it by rebuilding and re-installing env. 228 22920101119: 230 Recent Xorg updates in xsrc/external/mit/ may cause various build 231 or run-time problems. Delete your entire DESTDIR and OBJDIR if you 232 have any build problems with xsrc, or problems with mismatched 233 versions between xorg-server and drivers. 234 23520100604: 236 The update of ATF to 0.9 causes old tests written in shell to fail 237 unless they are rebuilt. If you are building with MKUPDATE=yes, 238 you need to clean the src/external/bsd/atf/tests/ and the src/tests/ 239 trees by hand. 240 24120100522: 242 Recent Xorg updates in xsrc/external/mit/ will cause various build 243 problems. Delete your entire DESTDIR and OBJDIR if you have any 244 build problems with xsrc. 245 24620100522: 247 private section of <ctype.h> was splitted, and now mklocale(1) 248 include ctype_local.h, so you have to make cleandir in tools/mklocale. 249 25020100520: 251 The location of the xkb compiled descriptions has changed. Please 252 remove usr/X11R7/lib/X11/xkb/compiled from your $DESTDIR. 253 25420100222: 255 The shared objects file extension has been changed from .so to 256 .pico, in order to avoid conflicts with shared libraries names 257 libXX.so. All now stale regular .so files can be removed from 258 your object directories. 259 26020100204: 261 The termcap database has been removed from the sources, 262 but has not been marked obsolete so it is not removed 263 from the system when upgrading. 264 As such, you will need to remove them from your object 265 and destination directories. 266 26720091101: 268 After updating, it may be necessary to make the 'cleandir' 269 target in src/tools/yacc/ and in src/usr.bin/yacc/ before a 270 'build.sh -u tools' or 'build.sh -u distribution'. Ditto 271 src/tools/lex/ and src/usr.bin/lex/. 272 27320091001: 274 On amd64 you must rebuild tools (to get the new binutils) 275 before building a kernel, or the build fails on cpufunc.S. 276 27720091001: 278 An error will create a ./usr/X11R7/lib/X11/xkb/compiled/xkb 279 symlink, failing the build. Delete the link, and the subdir 280 it is in, and retry your build. 281 28220090718: 283 libc build changed so that strchr() provides the extra entry 284 point for index(). Update build of libc.a (and libc_pic.a) 285 may fail because the archive contains the unwanted index.o. 286 (Similarly for strrchr() and rindex().) 287 28820090709: 289 Native Xorg was upgraded again. Builds will probably fail again 290 without a clean objdir, at least for src/external/mit/xorg. 291 29220090616: 293 Native Xorg was upgraded. Builds will need a clean objdir for 294 src/external/mit/xorg. Upgrading a system from sets will not 295 work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc 296 subdirectory has been changed into a file, and this needs to 297 be manually "rm -r"'ed before installing xbase.tgz. 298 29920090501: 300 Several new functions were added to string.h/libc, and this 301 can cause autoconf problems during the tool build for people 302 who fail to clean out their tools objects properly. If you 303 note messages about stpcpy, stpncpy or strnlen accompanying a 304 failure during the tool build, clean out all your tools 305 objects and start again. 306 30720090325: 308 The i386 port was switched to i486 default toolchain. This requires 309 cleaning your src/tools directory and $TOOLDIR and rebuilding them. 310 31120090126: 312 The __posix_fadvise50 system call changed assembly stub type. You 313 need to 'rm -f __posix_fadvise50.*' in the libc build directory 314 to avoid using the old assembly stub. 315 31620090202: 317 pkg_install now depends on the pkgdb cache for automatic conflict 318 detection. It is recommented to rebuild the cache with 319 ``pkg_admin rebuild''. 320 32120090110: 322 time_t and dev_t have been bumped to 64 bit quantities. To upgrade: 323 1. Make sure your kernel has COMPAT_50 in it. Build and install. 324 This is needed even in the MODULAR kernel because there is 325 conditionally compiled code in rtsock.c. 326 2. make sure build.sh completes and the binaries in a chroot work 327 before installing. 328 3. If you don't use build.sh and you build directly to root, and 329 your build breaks in the middle, don't despair. Make sure headers 330 are installed properly, and start building libraries first libc 331 and libutil, install them and then continue building all the 332 libraries in src/lib and src/gnu/lib and install them. Once 333 the new libraries are installed, you can restart the build. 334 4. If you compile packages and you notice link time warnings, 335 rebuild the required packages to update their shared libraries. 336 Any package you rebuild will require rebuilding all the packages 337 that depend on it. 338 5. Next time you run pwd_mkdb with the new binary, the file 339 will be upgraded and it will not be backwards compatible. 340 6. The utmpx/wtmpx files (/var/run/utmpx and /var/log/wtmpx, see 341 lastlogx(5)) have been versioned, and there is a heuristic 342 for utmp. You are better off removing the old files after 343 upgrading. The automated clearing of /var/run during 344 boot, and the automated rotating of files in /var/log by 345 newsyslog(8), may mean that you do not have to remove the 346 files manually. 347 7. The optional accounting file (/var/account/acct, see 348 accton(8)) has not been versioned, and will need to be 349 removed. The automatic rotation of the accounting file by 350 /etc/daily limits the bad consequences of failure to remove 351 the file. 352 8. Application software that writes time_t to binary files on 353 disk will break or need attention. Most notably: if you are 354 using PostgreSQL < 8.4, you need to dump your databases, 355 rebuild PostgreSQL with the new time_t, then restore. 356 35720081219: 358 config(1) has been updated, and one of the files it creates - 359 swapnetbsd.o - has changed format. You need to rebuild config 360 (done automatically by build.sh) and then you need to rerun 361 config on all kernel configuration files before rebuilding those 362 kernels. 363 36420081205: 365 If you build with MKX11=no, you should remove /etc/rc.d/xdm and 366 /etc/rc.d/xfs from DESTDIR because those files were moved to the xetc 367 set and will appear as extra files for MKX11=no update builds. 368 36920081122: 370 On i386, various kernel options(4) in GENERIC including 371 file systems have been disabled and moved into kernel modules. 372 Before trying a new GENERIC kernel, you have to prepare the 373 following files as well as a new GENERIC kernel: 374 375 - build and install kernel modules from src/sys/modules 376 377 - install the latest bootloader, which will load a module 378 for the file system from which the kernel is loaded automatically 379 380 If you have to load your kernel from a file system which is not of 381 the same type as the root file system, you have to load the necessary 382 file system module manually on the boot prompt or in the boot.cfg file. 383 38420080827: 385 If you built and installed a libc from sources between 386 2008/08/20 and 2008/08/26 you got a broken strtouq(3) 387 which results in false errors reported by lint(1). 388 Since this breaks the libc build itself, manual help is 389 needed -- lint must be disabled temporarily, e.g.: 390 $ (cd lib/libc && make MKLINT=no dependall install) 391 39220080813: 393 MKDEBUG build was broken because the .depend files did not know 394 about .go files. You need to remove all .depend files and rebuild. 395 39620080802: 397 A regression in binary compatibility for pthread_mutex_t has 398 been fixed. Unfortunately, the price is breaking compatibility 399 for -current. 400 401 Threaded programs (using libpthread) and C++ programs (using 402 libstdc++) compiled after 20070907 and before 20080802 need to 403 be recompiled. 404 405 One way to find affected pkgsrc packages: 406 407 $ grep REQUIRES=/usr/lib/libpthread /var/db/pkg/*/+BUILD_INFO 408 $ grep REQUIRES=/usr/lib/libstdc++ /var/db/pkg/*/+BUILD_INFO 409 41020080731: 411 WAPBL (metadata journaling support) has been added, but at this 412 time isn't backwards compatible with pre-WAPBL aware kernels 413 and userland (fsck_ffs in particular). Please make sure you 414 don't use a journaled filesystem with an older kernel/userland, 415 especially an uncleanly mounted journaled filesystem. WAPBL 416 also requires the super block to be in the UFS2 format. You 417 can use fsck_ffs -c 4 to update the superblock format. 418 41920080721: 420 Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR 421 isn't defined. 422 42320080531: 424 The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed 425 from 125 (conflicted with DRVCTLCOMMAND) to 129. The drvctl(8) 426 utility needs to be rebuilt and reinstalled as older binaries 427 won't work correctly. The following sequence of commands: 428 429 $ (cd sys/sys/ && nbmake-$arch includes) 430 $ (cd sbin/drvctl/ && nbmake-$arch clean) 431 $ (cd sbin/drvctl/ && nbmake-$arch all) 432 433 leaves new drvctl utility in sbin/drvctl build directory. 434 43520080503: 436 The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE. 437 43820080521: 439 For a while, unprivileged UPDATE builds would fail to 440 succeed at the checkflist stage, complaining that 441 ${DESTDIR}/stand/<arch>/ did not exist. A fix for this 442 problem was committed to share/mk/bsd.kmodule.mk, revision 1.9. 443 If you already hit this problem, update the .mk file, 444 remove ${DESTDIR}/stand/<arch>, and re-run the build. 445 44620080303: 447 Linker warnings are now fatal if $WARNS>0. 448 44920080126: 450 The posix_fadvise system call has been changed from an assembly 451 stub, to a c file that calls an assembly stub. You need to 452 'rm -f posix_fadvise.* .depend' in the libc build directory to 453 avoid using the old assembly stub. 454 45520071209: 456 The acpiec(4) driver has been split into two attachments. If you 457 get ACPI errors before the attachment, please update your kernel 458 configuration file appropriately or see GENERIC for more details. 459 46020071115: 461 The it(4) driver has been renamed to itesio(4) and the old port 462 argument specified in the kernel configuration file is not valid 463 anymore. The itesio(4) driver now uses the Super I/O address port 464 rather than the EC address port. Please update your kernel 465 configuration file appropriately or see GENERIC for more details. 466 46720071028: 468 The pccons(4) driver has been removed from the NetBSD/shark port. 469 You need to update any custom kernel configuration file you have 470 to remove any references to pccons (which includes removing the 471 now useless XSERVER option) and replace them with the correct 472 entries for the wscons driver. See the GENERIC configuration file 473 for more details. 474 47520070913: 476 A latent bug in dhclient/dhcpd that caused it to be unable to 477 enumerate interfaces was fixed. The bug began to cause 478 problems after 20070911 when the kernel's SIOCGIFCONF 479 implementation was repaired. From 20070529 to 20070911 racoon 480 could not enumerate interfaces. (These are noted because 481 normal kernel/userspace version matching hygiene is not 482 sufficient to avoid this problem.) Ensure that both kernel 483 and userland are from after 20070913. 484 48520070703: 486 nbinstall has been renamed ${MACHINE_GNU_ARCH}-install. It 487 calls the target-specific strip program, and the logic to pass 488 down STRIP from make has been removed. This requires a 489 re-installation of tools. 490 49120070422: 492 The way OS emulations lookup filenames inside the emulation root 493 has been changed. Rather than modify the pathname (and copy back 494 to userspace) namei() and lookup() directly check the emulation 495 root. One side effect is that absolute symlinks inside the emulated 496 root file system will be relative to that file system - unless they 497 start /../ this is useful when the emulated root is a real install 498 that has such links. 499 This might affect symlinks that have been added to reference outside 500 the emulated root. 501 50220070412: 503 The pckbc driver on sgimips IP32 has been removed. Use macekbc 504 instead. See the GENERIC32_IP3x kernel configuration for an 505 example. 506 50720070319: 508 src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so 509 on many platforms due to incorrect flags settings. If you 510 updated and built after about 20070315, do "nbmake-$arch 511 cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a 512 rebuild of object files that might have been built 513 incorrectly, and ensure that you have at least 514 src/lib/libc/Makefile 1.130. 515 51620070210: 517 src/sys/sys/{sa.h,savar.h} were removed. 518 find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \ 519 | xargs egrep -l '/sa.h|/savar.h' | xargs rm 520 will allow dependencies on those files to get get rebuilt 521 52220070209: 523 The threading model was changed when the newlock2 branch 524 was merged to NetBSD-current. If you boot with a new 525 kernel (version 4.99.10), then you also need a new pthread 526 library (/usr/lib/libpthread.so.0.7). If you boot with 527 an old kernel, then you need the old pthread library 528 (/usr/lib/libpthread.so.0.6). Provided you keep the kernel and 529 the pthread library in sync, old threaded applications should 530 continue to work with an old or new kernel. Note that named(8) 531 is the only threaded application in the base system. 532 53320061214: 534 Following the move of string_to_flags() and flags_to_string() 535 from the bin/ls/ sources to libutil, users doing UPDATE builds 536 will need to do a "make cleandir" in 537 tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/, 538 bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/, 539 usr.bin/xinstall/, libexec/ftpd/, rescue/, as well 540 as the installation images in distrib/ 541 in order to excise stale references to the old stat_flags.h header 542 file in the ls sources -- stat_flags.h has been removed. 543 54420061108: 545 The configure script used in the src/tools/gcc compiler has been 546 changed to indicate that our libc has ssp support built-in and 547 does not depend on -lssp and -lssp-nonshared. You'll need to 548 make clean in src/tools/gcc first to rebuild the compiler. 549 55020061009: 551 The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer 552 available. Use net.inet{,6}.tcp{,6}.congctl.selected instead. 553 55420060814: 555 The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been 556 withdrawn. Use vidcvideo and pckbd instead. See the GENERIC 557 kernel configuration for an example. X servers from the last 558 few years should cope. 559 56020060703: 561 MPACPI is no more. We always configure PCI interrupts using ACPI 562 if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed 563 to ACPI_SCANPCI. Thanks to work from fvdl. 564 56520060627: 566 socket(2) has changed, and its system call has been versioned. 567 For userlands with the old version of socket(2), make sure that 568 your kernel has 'options COMPAT_30' set, or else 'bad system call' 569 errors will result. 570 571Hints for a more successful build: 572^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 573 Use build.sh, but do not use its "expert mode": 574 This will automatically build the tools in the 575 correct order, and it will keep the tools and the 576 new build products from interfering with the running 577 system. This will allow you to ignore most of the 578 other advice in this file. 579 Build a new kernel first: 580 This makes sure that any new system calls or features 581 expected by the new userland will be present. This 582 helps to avoid critical errors when upgrading. 583 Use object directories: 584 This helps to keep stale object 585 files from polluting the build if a Makefile "forgets" 586 about one. It also makes it easier to clean up after 587 a build. It's also necessary if you want to use the 588 same source tree for multiple machines. 589 To use object directories with build.sh: 590 a) invoke build.sh with the "-M" or "-O" options. 591 To use object directories without using build.sh: 592 a) cd /usr/src ; make cleandir 593 b) Add "OBJMACHINE=yes" to /etc/mk.conf 594 c) Add "MKOBJDIRS=yes" to /etc/mk.conf 595 d) cd /usr/src ; make build 596 Note that running "make obj" in a directory will create 597 in obj.$MACHINE directory. 598 Build to a DESTDIR: 599 This helps to keep old installed files (especially libraries) 600 from interfering with the new build. 601 To build to a DESTDIR with build.sh, use the "-D" option. 602 To build to a DESTDIR without using build.sh, set the DESTDIR 603 environment variable before running make build. It should be 604 set to the pathname of an initially empty directory. 605 Problems: if you do not use build.sh, you might need to 606 update critical utilities without using DESTDIR since 607 nothing is executed from what is installed in DESTDIR. 608 (See critical utils, below.) 609 Build often: 610 This keeps critical utilities current enough to not choke 611 on any other part of the source tree that depends on up to 612 date functionality. If you use build.sh, you should not have 613 this problem. 614 615What to do if things don't work: 616^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 617When things don't work there are usually a few things that commonly 618should be done. 619 1) make includes 620 This should be done automatically by make build. 621 2) cd share/mk && make install 622 Again, automatically done by make build. 623 624Failsafe rebuild of a small part of the tree: 625^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 626To make sure you rebuild something correctly you want to do 627something like the following: 628 1) Make sure the includes and .mk files are up to date. 629 2) Make sure any program used to build the particular 630 utility is up to date. (yacc, lex, etc...) 631 3) cd ...path/to/util... 632 make cleandir 633 rm ...all obj directories... 634 make cleandir # yes, again 635 make obj 636 make depend && make 637 638Failsafe rebuild of the entire tree: 639^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 640If you really want to make sure the source tree is clean and 641ready for a build try the following. Note that sourcing /etc/mk.conf 642(a make(1) Makefile) in this manner is not right, and will not work 643for anyone who uses any make(1) features in /etc/mk.conf. 644 645---cut here--- 646#!/bin/sh 647. /etc/mk.conf 648 649if [ -z $NETBSDSRCDIR ] ; then 650 NETBSDSRCDIR=/usr/src 651fi 652if [ \! -d $NETBSDSRCDIR ] ; then 653 echo Unable to find sources 654 exit 1 655fi 656find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 657 658if [ -z $BSDOBJDIR ] ; then 659 BSDOBJDIR=/usr/obj 660fi 661if [ -d $BSDOBJDIR ] ; then 662 rm -rf $BSDOBJDIR 663fi 664 665cd $NETBSDSRCDIR && make cleandir 666 667---cut here--- 668 669Critical utilities: 670^^^^^^^^^^^^^^^^^^^ 671 usr.bin/compile_et 672 usr.bin/make 673 usr.bin/yacc 674 usr.bin/lex 675 usr.bin/xlint 676 usr.bin/config 677 678Other problems and possible solutions: 679^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 680Symptom:Complaints involving a Makefile. 681Fix: Rebuild usr.bin/make: 682 cd usr.bin/make && make && make install 683 Or, a failsafe method if that doesn't work: 684 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 685 686Fix: Make sure .mk files are up to date. 687 cd share/mk && make install 688 689Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 690Fix: Rebuild usr.bin/config 691 692Symptom: 693Fix: Rebuild usr.bin/yacc 694 695Symptom: 696Fix: Rebuild usr.bin/lex 697 698Symptom: 699Fix: rm /usr/lib/libbfd.a 700 701Symptom:Obsolete intermediate files are used during compilation 702Fix: Try the following sequence of commands in the directory in question. 703 make cleandir; rm `make print-objdir`; make cleandir; make obj 704 (If you built the tree without "make obj" in the past, obsolete files 705 may remain. The command tries to clean everything up) 706 707Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible 708 pointer type 709Fix: Rebuild and install usr.bin/menuc 710 711Symptom:mklocale not found during build in share/locale/ctype 712Fix: Build and install usr.bin/mklocale 713 714Symptom:undefined reference to `__assert13' or `__unsetenv13' 715Fix: Rebuild and install lib/libc 716 717Symptom:usr.bin/config fails to build. 718Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 719 720Symptom:undefined reference to `getprogname' or `setprogname' 721Fix: Rebuild and install lib/libc 722 723Symptom:lint does not understand the '-X' option 724Fix: May need to build & install libs with NOLINT=1 before rebuilding lint 725 726Symptom:Update build fails in src/tools/gcc complaining that a variable 727 (e.g. CPPFLAGS) has changed since the previous run. 728Fix: Run "nbmake-${ARCH} clean" in src/tools/gcc or do a clean build. 729 730Symptom:cvs [update aborted]: cannot open directory /cvsroot/src/...: 731 No such file or directory. 732Cause: If a directory is created by mistake, then it is sometimes 733 deleted from the CVS repository using administrative commands 734 that bypass the normal cvs access controls. If your cvs working tree 735 contains references to a directory that has been deleted on the 736 server in this way, then "cvs update" reports this error. 737Fix: Recursively delete the affected directory from your working tree 738 and try the update again. 739