UPDATING revision 1.288
1$NetBSD: UPDATING,v 1.288 2017/12/26 11:40:47 martin 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 2220171225: 23 removal of the vadvise syscall requires manual removal of all 24 associated files from the libc build object directory (including 25 the .depend files) - a command like 26 cd $OBJ && find . -type d -name libc | xargs rm -rf 27 or a one time build without -u will do. 28 2920171010: 30 a change to the build structure of external/bsd/acpica/bin/iasl 31 means that its objdir (or *.d and .depend at least) might need 32 to be manually removed - or a build done once without -u. 33 3420170822: 35 a new version of GMP has been imported and probably 36 will break parts of builds related to themselves or GCC, both 37 in the tools and the native section. Remove all GCC, GMP, MPFR 38 and MPC objdirs or build once without -u. 39 4020170816: 41 a new version of MPFR and MPC have been imported and probably 42 will break parts of builds related to themselves or GCC, both 43 in the tools and the native section. Remove all GCC, GMP, MPFR 44 and MPC objdirs or build once without -u. 45 4620170402: 47 a new version of dhcpcd has been imported, which does not support 48 update builds from the previous version. Remove your 49 external/bsd/dhcpcd object dir or build once without -u. 50 5120170211: 52 a new terminfo database has been imported. 53 The structure of it has changed slightly from prior versions and 54 an updated tic tool is required. 55 If you build.sh, don't use -u 56 5720170207: 58 various arch dependent libc/exect.S files were removed 59 Either remove the obj directories (lib/libc and compat/amd64/i386/lib 60 if it exists) or do a clean build. 61 (This is a bug in the make system, it should be corrected without 62 human intervention, but isn't.) 63 6420170104: 65 xinput build options have changed. 66 Remove the obj directory (external/mit/xorg/bin/xinput) 67 if you build.sh -u 68 6920170103: 70 a new version of flex has been imported. 71 Remove the file from obj (external/bsd/flex) 72 if you build.sh -u 73 7420161014: 75 a new version of OpenSSL has been imported. 76 Remove the files from obj (crypto/external/bsd/openssl) 77 if you build.sh -u 78 7920161009: 80 a new version of dhcpcd has been imported with slightly changed 81 build infrastructure. When doing a build.sh -u this requires 82 pruning the external/bsd/dhcpcd objdir. 83 8420160914: 85 i386, amd64, shark, ofppc and macppc have joined shark and x68k 86 ports in using xorg-server 1.18. This requires a clean destdir 87 and a clean objdir. 88 8920160527: 90 i386 needs a full cleandir or objdir deletion because PIE has 91 been enabled. (see the amd64 entry two down for further info) 92 9320160418: 94 libedit needs manual removal of all autogenerated files since 95 some of them are not autogenerated anymore. Remember that there 96 might be two copies of libedit if your platform builds "compat". 97 9820160410: 99 amd64 needs full "make cleandir" or deletion of objdir now that 100 PIE has been enabled for amd64. PIE, or position-independent 101 executables, means all code, including executables and not just 102 shared libraries, is position-independent and hence able to be 103 relocated by ASLR, address space layout randomization. 104 105 The change was made in Makefile variables for compiler and 106 linker flags, for which make(1) does not record dependencies, 107 hence it is unable to detect that all .o files need rebuilding. 108 109 Partial rebuilds with some modified source files will likely 110 fail when linking executables, since the linker refuses to mix 111 position-independent code with position-dependent code in 112 position-independent executables: 113 114 .../x86_64--netbsd/bin/ld: foo.o: relocation R_X86_64_32 against `...' cannot be used when making a shared object; recompile with -fPIC 115 11620160401: 117 Ports switching to GCC 5.3 will need a full "make cleandir". 118 Some people have found that cleandir is not sufficient, so if 119 in doubt delete the entire object directory tree for gcc. 120 12120160306: 122 NetBSD's regexp implementation is now part of libnbcompat. 123 Nblex, nbm4, nbpax, nbsed use it and they may crash on 124 non-NetBSD hosts if linked with stale object files produced 125 while they included a non-NetBSD regex.h. 126 In any case, you should "make cleandir" at least these tools 127 before updating your toolchain. 128 12920160125: 130 Dtrace has been enabled by default on some architectures. 131 When doing an update build, make sure to clean the etc/mtree 132 object directory before starting the build - otherwise the 133 needed directories in destdir will not be created. 134 An easy way to do this is: 135 cd src/etc/mtree && $TOOLDIR/bin/nbmake-$arch cleandir 136 13720150818: 138 New acpica requires "make cleandir" in src/external/bsd/acpica 139 again. 140 14120150413: 142 New acpica requires "make cleandir" and reinstalling yacc 143 in /usr/src/external/bsd/byacc and /usr/src/tools/yacc and 144 also "make cleandir" in /usr/src/external/bsd/acpica. 145 14620150404: 147 Lint changes require a full rebuild of the tool, so make 148 sure to build without -u option to build.sh, or manually 149 do a make cleandir in src/tools/lint1 and 150 src/usr.bin/xlint. 151 15220150310: 153 Improvements to openssl for arm mean that update builds of 154 the openssl libraries will fail. A make cleandir in 155 external/bsd/openssl/lib is needed 156 15720141026: 158 A mishap during the import of pppd may cause your corruption 159 in your cvs directory if you happened to do a cvs update 160 during a short period of time. To fix, just remove the 161 directory src/external/bsd/ppp/dist/pppd completely 162 and let cvs restore it on next update. 163 16420140721: 165 The src/external/mit/lua/src directory was accidentally created 166 and then deleted in the CVS repository. If you get errors like 167 168 cvs [update aborted]: cannot open directory 169 /cvsroot/src/external/mit/lua/src: No such file or directory 170 171 then delete your local copy of that directory tree and try again. 172 17320140530: 174 ARM eABI switched to DWARF based exception handling. This requires 175 rebuilding all C++ code. It is strongly advised to do a clean build. 176 17720140131: 178 The new compiler_rt/libc integration moved a few things. It is strongly 179 advised to do a clean build. At least lib/libc, the compat version(s) 180 of libc, libkern, rump and the kernels need to be cleaned. 181 18220131227: 183 1. The new ntpd runs in a restricted mode to prevent amplification 184 attacks. If you need ntpdc to work you need to explicitly enable 185 mode7 in your config file. Make sure you put the necessary restrict 186 statements to avoid being exposed. 187 2. strncat has moved from lib/libc to common/lib/libc; you might need 188 to make clean in libc 189 19020131129: 191 The GMP sources were updated, and builds will likely fail without 192 cleaning their build trees for both tools and in-tree, like below. 193 19420131128: 195 The MPC and MPFR sources were updated, and builds may require their 196 tools and in-tree directories cleaned for successful updates. 197 19820130605: 199 The kernel option FAST_IPSEC no longer exists, it's been renamed 200 to IPSEC (and the older IPSEC version removed). 201 20220130605: 203 Previous freetype installations eroneously installed private 204 header files. If you are building against a non-empty $DESTDIR, 205 please remove ${DESTDIR}//usr/X11R7/include/freetype2/freetype/. 206 20720130531: 208 The xdm update may cause build failure due to xdm.man being 209 in the obj tree. Make sure to ensure any like this: 210 nbmake: nbmake: don't know how to make xdm.man. Stop 211 is fixed by deleting the xdm.man in the obj tree. 212 21320130530: 214 Updates of many xsrc packages will leave old .pc files around. 215 Best to clean out the xsrc objdir entirely before rebuilds. 216 21720130301: 218 The removal of netiso requires manual removal of /usr/include/netiso 219 prior to the build and make cleandir in /usr/src/usr.bin/{ktruss,kdump} 220 22120120726: 222 The update of OpenSSL requires cleaning both the OpenSSL build 223 directory and DESTDIR. *Even non-update builds require cleaning 224 DESTDIR.* Builds done without taking these steps may fail, or in 225 some cases may succeed and install broken OpenSSL libraries that 226 cause third-party software to link incorrectly and/or crash. 227 22820120507: 229 The database schema for makemandb was changed. You will 230 need to update the database using 'makemandb -f' or wait 231 for the next weekly run to fix it. 232 23320120319: 234 sys/conf/Makefile.kern.inc has been modified to adjust the 235 size of db_symtab automatically. You need to update dbsym in 236 your $TOOLDIR to build kernels with options SYMTAB_SPACE. If 237 you don't want this behavior, add AUTO_SYMTAB_SPACE=no to your 238 mk.conf. 239 24020120216: 241 Default for MKCATPAGES changed to NO. Update builds will fail 242 unless DESTDIR is cleaned manually. If you built between 20120207 243 and 20120216, daily and weekly could have created an unreadable 244 /var/db/man.db index for apropos. Running makemandb -f or 245 the next run of weekly will fix it. 246 24720111227: 248 If you built between 20111225 and 20111227 you need to remove 249 /usr/lib/libpam.so.4* and /usr/lib/security/*.so.4, since the 250 bump has been reverted. 251 25220111125: 253 The "rnd" pseudodevice has been added to sys/conf/std, which 254 means it should no longer be explicitly listed in kernel 255 configuration files. The line "pseudo-device rnd" should be 256 removed from any custom kernel config files users may have. 257 25820111119: 259 A problem with the datastructures used by the rndctl(8) 260 utility (pointers in datastructures in an array, making 32->64 261 bit compatibility very painful) has been fixed in a 262 non-backwards-compatible way. If you replace your kernel, 263 replace your rndctl executable too. 264 26520111001: 266 the prop_*_send_syscall() functions from proplib(3) have been 267 changed and their new version is not backward compatible with the old 268 one. So ensure that all consumers of these functions (currently: 269 quota2 code and its tests) are updated together with the new lib. 270 27120110817: 272 sparc has been changed to use GCC 4.5.3, so any objdir or 273 DESTDIR for them should be deleted before updating. 274 27520110806: 276 i386 and amd64 have been changed to use GCC 4.5.3, so any 277 objdir or DESTDIR for them should be deleted before updating. 278 27920110805: 280 The update to GCC 4.5.3 requires a non-trivial portion of 281 the tree to be cleaned. Best to delete both objdir and 282 DESTDIR before running this update. So far, only the 283 sparc64, mips and powerpc platforms have changed. 284 28520110803: 286 The layout of external/public-domain/xz has changed. To do an 287 update build you will have to remove the contents of the OBJDIR 288 for external/public-domain/xz/bin by hand as the xz entry there 289 is now a directory. 290 29120110410: 292 The configuration of src/tools/gcc has changed. To do an 293 update build you have to clean both tools/binutils and 294 tools/gcc by hand. 295 29620110328: 297 Building the Xorg binary was moved into a subdirectory to fix 298 ordering issues with "make all". It may be necessary to remove 299 the OBJDIR for external/mit/xorg/server/xorg-server/hw/xfree86 300 if your update build fails, as the "Xorg" entry there is now a 301 directory. 302 30320110121: 304 Assembler files no longer use -traditional-cpp. This can break 305 the build of individual parts of the tree. This is handled 306 correctly by build.sh. Manual builds have to update /usr/share/mk 307 and re-run config(1) for any kernel configurations as needed. 308 30920101217: 310 The tcpdump(8) program was changed to drop privileges and chroot(2) 311 by default. It may be necessary to manually update passwd(5) and 312 group(5) in order to make the program work with existing setups. 313 31420101125: 315 The latest changes to setenv(3) dissallow setting environment 316 variables with names that contain '='. Revision 1.18 of env.c 317 assumed that this was allowed. Installing a new libc with an 318 old copy of /usr/bin/env causes env x=1 printenv | grep x= to 319 break which affects the autoconf tests for dependency finding, 320 so building gcc will end up printing: 321 checking dependency style of gcc... none 322 configure: error: no usable dependency style found 323 Fix it by rebuilding and re-installing env. 324 32520101119: 326 Recent Xorg updates in xsrc/external/mit/ may cause various build 327 or run-time problems. Delete your entire DESTDIR and OBJDIR if you 328 have any build problems with xsrc, or problems with mismatched 329 versions between xorg-server and drivers. 330 33120100604: 332 The update of ATF to 0.9 causes old tests written in shell to fail 333 unless they are rebuilt. If you are building with MKUPDATE=yes, 334 you need to clean the src/external/bsd/atf/tests/ and the src/tests/ 335 trees by hand. 336 33720100522: 338 Recent Xorg updates in xsrc/external/mit/ will cause various build 339 problems. Delete your entire DESTDIR and OBJDIR if you have any 340 build problems with xsrc. 341 34220100522: 343 private section of <ctype.h> was splitted, and now mklocale(1) 344 include ctype_local.h, so you have to make cleandir in tools/mklocale. 345 34620100520: 347 The location of the xkb compiled descriptions has changed. Please 348 remove usr/X11R7/lib/X11/xkb/compiled from your $DESTDIR. 349 35020100222: 351 The shared objects file extension has been changed from .so to 352 .pico, in order to avoid conflicts with shared libraries names 353 libXX.so. All now stale regular .so files can be removed from 354 your object directories. 355 35620100204: 357 The termcap database has been removed from the sources, 358 but has not been marked obsolete so it is not removed 359 from the system when upgrading. 360 As such, you will need to remove them from your object 361 and destination directories. 362 36320091101: 364 After updating, it may be necessary to make the 'cleandir' 365 target in src/tools/yacc/ and in src/usr.bin/yacc/ before a 366 'build.sh -u tools' or 'build.sh -u distribution'. Ditto 367 src/tools/lex/ and src/usr.bin/lex/. 368 36920091001: 370 On amd64 you must rebuild tools (to get the new binutils) 371 before building a kernel, or the build fails on cpufunc.S. 372 37320091001: 374 An error will create a ./usr/X11R7/lib/X11/xkb/compiled/xkb 375 symlink, failing the build. Delete the link, and the subdir 376 it is in, and retry your build. 377 37820090718: 379 libc build changed so that strchr() provides the extra entry 380 point for index(). Update build of libc.a (and libc_pic.a) 381 may fail because the archive contains the unwanted index.o. 382 (Similarly for strrchr() and rindex().) 383 38420090709: 385 Native Xorg was upgraded again. Builds will probably fail again 386 without a clean objdir, at least for src/external/mit/xorg. 387 38820090616: 389 Native Xorg was upgraded. Builds will need a clean objdir for 390 src/external/mit/xorg. Upgrading a system from sets will not 391 work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc 392 subdirectory has been changed into a file, and this needs to 393 be manually "rm -r"'ed before installing xbase.tgz. 394 39520090501: 396 Several new functions were added to string.h/libc, and this 397 can cause autoconf problems during the tool build for people 398 who fail to clean out their tools objects properly. If you 399 note messages about stpcpy, stpncpy or strnlen accompanying a 400 failure during the tool build, clean out all your tools 401 objects and start again. 402 40320090325: 404 The i386 port was switched to i486 default toolchain. This requires 405 cleaning your src/tools directory and $TOOLDIR and rebuilding them. 406 40720090126: 408 The __posix_fadvise50 system call changed assembly stub type. You 409 need to 'rm -f __posix_fadvise50.*' in the libc build directory 410 to avoid using the old assembly stub. 411 41220090202: 413 pkg_install now depends on the pkgdb cache for automatic conflict 414 detection. It is recommented to rebuild the cache with 415 ``pkg_admin rebuild''. 416 41720090110: 418 time_t and dev_t have been bumped to 64 bit quantities. To upgrade: 419 1. Make sure your kernel has COMPAT_50 in it. Build and install. 420 This is needed even in the MODULAR kernel because there is 421 conditionally compiled code in rtsock.c. 422 2. make sure build.sh completes and the binaries in a chroot work 423 before installing. 424 3. If you don't use build.sh and you build directly to root, and 425 your build breaks in the middle, don't despair. Make sure headers 426 are installed properly, and start building libraries first libc 427 and libutil, install them and then continue building all the 428 libraries in src/lib and src/gnu/lib and install them. Once 429 the new libraries are installed, you can restart the build. 430 4. If you compile packages and you notice link time warnings, 431 rebuild the required packages to update their shared libraries. 432 Any package you rebuild will require rebuilding all the packages 433 that depend on it. 434 5. Next time you run pwd_mkdb with the new binary, the file 435 will be upgraded and it will not be backwards compatible. 436 6. The utmpx/wtmpx files (/var/run/utmpx and /var/log/wtmpx, see 437 lastlogx(5)) have been versioned, and there is a heuristic 438 for utmp. You are better off removing the old files after 439 upgrading. The automated clearing of /var/run during 440 boot, and the automated rotating of files in /var/log by 441 newsyslog(8), may mean that you do not have to remove the 442 files manually. 443 7. The optional accounting file (/var/account/acct, see 444 accton(8)) has not been versioned, and will need to be 445 removed. The automatic rotation of the accounting file by 446 /etc/daily limits the bad consequences of failure to remove 447 the file. 448 8. Application software that writes time_t to binary files on 449 disk will break or need attention. Most notably: if you are 450 using PostgreSQL < 8.4, you need to dump your databases, 451 rebuild PostgreSQL with the new time_t, then restore. 452 45320081219: 454 config(1) has been updated, and one of the files it creates - 455 swapnetbsd.o - has changed format. You need to rebuild config 456 (done automatically by build.sh) and then you need to rerun 457 config on all kernel configuration files before rebuilding those 458 kernels. 459 46020081205: 461 If you build with MKX11=no, you should remove /etc/rc.d/xdm and 462 /etc/rc.d/xfs from DESTDIR because those files were moved to the xetc 463 set and will appear as extra files for MKX11=no update builds. 464 46520081122: 466 On i386, various kernel options(4) in GENERIC including 467 file systems have been disabled and moved into kernel modules. 468 Before trying a new GENERIC kernel, you have to prepare the 469 following files as well as a new GENERIC kernel: 470 471 - build and install kernel modules from src/sys/modules 472 473 - install the latest bootloader, which will load a module 474 for the file system from which the kernel is loaded automatically 475 476 If you have to load your kernel from a file system which is not of 477 the same type as the root file system, you have to load the necessary 478 file system module manually on the boot prompt or in the boot.cfg file. 479 48020080827: 481 If you built and installed a libc from sources between 482 2008/08/20 and 2008/08/26 you got a broken strtouq(3) 483 which results in false errors reported by lint(1). 484 Since this breaks the libc build itself, manual help is 485 needed -- lint must be disabled temporarily, e.g.: 486 $ (cd lib/libc && make MKLINT=no dependall install) 487 48820080813: 489 MKDEBUG build was broken because the .depend files did not know 490 about .go files. You need to remove all .depend files and rebuild. 491 49220080802: 493 A regression in binary compatibility for pthread_mutex_t has 494 been fixed. Unfortunately, the price is breaking compatibility 495 for -current. 496 497 Threaded programs (using libpthread) and C++ programs (using 498 libstdc++) compiled after 20070907 and before 20080802 need to 499 be recompiled. 500 501 One way to find affected pkgsrc packages: 502 503 $ grep REQUIRES=/usr/lib/libpthread /var/db/pkg/*/+BUILD_INFO 504 $ grep REQUIRES=/usr/lib/libstdc++ /var/db/pkg/*/+BUILD_INFO 505 50620080731: 507 WAPBL (metadata journaling support) has been added, but at this 508 time isn't backwards compatible with pre-WAPBL aware kernels 509 and userland (fsck_ffs in particular). Please make sure you 510 don't use a journaled filesystem with an older kernel/userland, 511 especially an uncleanly mounted journaled filesystem. WAPBL 512 also requires the super block to be in the UFS2 format. You 513 can use fsck_ffs -c 4 to update the superblock format. 514 51520080721: 516 Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR 517 isn't defined. 518 51920080531: 520 The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed 521 from 125 (conflicted with DRVCTLCOMMAND) to 129. The drvctl(8) 522 utility needs to be rebuilt and reinstalled as older binaries 523 won't work correctly. The following sequence of commands: 524 525 $ (cd sys/sys/ && nbmake-$arch includes) 526 $ (cd sbin/drvctl/ && nbmake-$arch clean) 527 $ (cd sbin/drvctl/ && nbmake-$arch all) 528 529 leaves new drvctl utility in sbin/drvctl build directory. 530 53120080503: 532 The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE. 533 53420080521: 535 For a while, unprivileged UPDATE builds would fail to 536 succeed at the checkflist stage, complaining that 537 ${DESTDIR}/stand/<arch>/ did not exist. A fix for this 538 problem was committed to share/mk/bsd.kmodule.mk, revision 1.9. 539 If you already hit this problem, update the .mk file, 540 remove ${DESTDIR}/stand/<arch>, and re-run the build. 541 54220080303: 543 Linker warnings are now fatal if $WARNS>0. 544 54520080126: 546 The posix_fadvise system call has been changed from an assembly 547 stub, to a c file that calls an assembly stub. You need to 548 'rm -f posix_fadvise.* .depend' in the libc build directory to 549 avoid using the old assembly stub. 550 55120071209: 552 The acpiec(4) driver has been split into two attachments. If you 553 get ACPI errors before the attachment, please update your kernel 554 configuration file appropriately or see GENERIC for more details. 555 55620071115: 557 The it(4) driver has been renamed to itesio(4) and the old port 558 argument specified in the kernel configuration file is not valid 559 anymore. The itesio(4) driver now uses the Super I/O address port 560 rather than the EC address port. Please update your kernel 561 configuration file appropriately or see GENERIC for more details. 562 56320071028: 564 The pccons(4) driver has been removed from the NetBSD/shark port. 565 You need to update any custom kernel configuration file you have 566 to remove any references to pccons (which includes removing the 567 now useless XSERVER option) and replace them with the correct 568 entries for the wscons driver. See the GENERIC configuration file 569 for more details. 570 57120070913: 572 A latent bug in dhclient/dhcpd that caused it to be unable to 573 enumerate interfaces was fixed. The bug began to cause 574 problems after 20070911 when the kernel's SIOCGIFCONF 575 implementation was repaired. From 20070529 to 20070911 racoon 576 could not enumerate interfaces. (These are noted because 577 normal kernel/userspace version matching hygiene is not 578 sufficient to avoid this problem.) Ensure that both kernel 579 and userland are from after 20070913. 580 58120070703: 582 nbinstall has been renamed ${MACHINE_GNU_ARCH}-install. It 583 calls the target-specific strip program, and the logic to pass 584 down STRIP from make has been removed. This requires a 585 re-installation of tools. 586 58720070422: 588 The way OS emulations lookup filenames inside the emulation root 589 has been changed. Rather than modify the pathname (and copy back 590 to userspace) namei() and lookup() directly check the emulation 591 root. One side effect is that absolute symlinks inside the emulated 592 root file system will be relative to that file system - unless they 593 start /../ this is useful when the emulated root is a real install 594 that has such links. 595 This might affect symlinks that have been added to reference outside 596 the emulated root. 597 59820070412: 599 The pckbc driver on sgimips IP32 has been removed. Use macekbc 600 instead. See the GENERIC32_IP3x kernel configuration for an 601 example. 602 60320070319: 604 src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so 605 on many platforms due to incorrect flags settings. If you 606 updated and built after about 20070315, do "nbmake-$arch 607 cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a 608 rebuild of object files that might have been built 609 incorrectly, and ensure that you have at least 610 src/lib/libc/Makefile 1.130. 611 61220070210: 613 src/sys/sys/{sa.h,savar.h} were removed. 614 find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \ 615 | xargs egrep -l '/sa.h|/savar.h' | xargs rm 616 will allow dependencies on those files to get get rebuilt 617 61820070209: 619 The threading model was changed when the newlock2 branch 620 was merged to NetBSD-current. If you boot with a new 621 kernel (version 4.99.10), then you also need a new pthread 622 library (/usr/lib/libpthread.so.0.7). If you boot with 623 an old kernel, then you need the old pthread library 624 (/usr/lib/libpthread.so.0.6). Provided you keep the kernel and 625 the pthread library in sync, old threaded applications should 626 continue to work with an old or new kernel. Note that named(8) 627 is the only threaded application in the base system. 628 62920061214: 630 Following the move of string_to_flags() and flags_to_string() 631 from the bin/ls/ sources to libutil, users doing UPDATE builds 632 will need to do a "make cleandir" in 633 tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/, 634 bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/, 635 usr.bin/xinstall/, libexec/ftpd/, rescue/, as well 636 as the installation images in distrib/ 637 in order to excise stale references to the old stat_flags.h header 638 file in the ls sources -- stat_flags.h has been removed. 639 64020061108: 641 The configure script used in the src/tools/gcc compiler has been 642 changed to indicate that our libc has ssp support built-in and 643 does not depend on -lssp and -lssp-nonshared. You'll need to 644 make clean in src/tools/gcc first to rebuild the compiler. 645 64620061009: 647 The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer 648 available. Use net.inet{,6}.tcp{,6}.congctl.selected instead. 649 65020060814: 651 The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been 652 withdrawn. Use vidcvideo and pckbd instead. See the GENERIC 653 kernel configuration for an example. X servers from the last 654 few years should cope. 655 65620060703: 657 MPACPI is no more. We always configure PCI interrupts using ACPI 658 if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed 659 to ACPI_SCANPCI. Thanks to work from fvdl. 660 66120060627: 662 socket(2) has changed, and its system call has been versioned. 663 For userlands with the old version of socket(2), make sure that 664 your kernel has 'options COMPAT_30' set, or else 'bad system call' 665 errors will result. 666 667Hints for a more successful build: 668^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 669 Use build.sh, but do not use its "expert mode": 670 This will automatically build the tools in the 671 correct order, and it will keep the tools and the 672 new build products from interfering with the running 673 system. This will allow you to ignore most of the 674 other advice in this file. 675 Build a new kernel first: 676 This makes sure that any new system calls or features 677 expected by the new userland will be present. This 678 helps to avoid critical errors when upgrading. 679 Use object directories: 680 This helps to keep stale object 681 files from polluting the build if a Makefile "forgets" 682 about one. It also makes it easier to clean up after 683 a build. It's also necessary if you want to use the 684 same source tree for multiple machines. 685 To use object directories with build.sh: 686 a) invoke build.sh with the "-M" or "-O" options. 687 To use object directories without using build.sh: 688 a) cd /usr/src ; make cleandir 689 b) Add "OBJMACHINE=yes" to /etc/mk.conf 690 c) Add "MKOBJDIRS=yes" to /etc/mk.conf 691 d) cd /usr/src ; make build 692 Note that running "make obj" in a directory will create 693 in obj.$MACHINE directory. 694 Build to a DESTDIR: 695 This helps to keep old installed files (especially libraries) 696 from interfering with the new build. 697 To build to a DESTDIR with build.sh, use the "-D" option. 698 To build to a DESTDIR without using build.sh, set the DESTDIR 699 environment variable before running make build. It should be 700 set to the pathname of an initially empty directory. 701 Problems: if you do not use build.sh, you might need to 702 update critical utilities without using DESTDIR since 703 nothing is executed from what is installed in DESTDIR. 704 (See critical utils, below.) 705 Build often: 706 This keeps critical utilities current enough to not choke 707 on any other part of the source tree that depends on up to 708 date functionality. If you use build.sh, you should not have 709 this problem. 710 711What to do if things don't work: 712^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 713When things don't work there are usually a few things that commonly 714should be done. 715 1) make includes 716 This should be done automatically by make build. 717 2) cd share/mk && make install 718 Again, automatically done by make build. 719 720Failsafe rebuild of a small part of the tree: 721^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 722To make sure you rebuild something correctly you want to do 723something like the following: 724 1) Make sure the includes and .mk files are up to date. 725 2) Make sure any program used to build the particular 726 utility is up to date. (yacc, lex, etc...) 727 3) cd ...path/to/util... 728 make cleandir 729 rm ...all obj directories... 730 make cleandir # yes, again 731 make obj 732 make depend && make 733 734Failsafe rebuild of the entire tree: 735^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 736If you really want to make sure the source tree is clean and 737ready for a build try the following. Note that sourcing /etc/mk.conf 738(a make(1) Makefile) in this manner is not right, and will not work 739for anyone who uses any make(1) features in /etc/mk.conf. 740 741---cut here--- 742#!/bin/sh 743. /etc/mk.conf 744 745if [ -z $NETBSDSRCDIR ] ; then 746 NETBSDSRCDIR=/usr/src 747fi 748if [ \! -d $NETBSDSRCDIR ] ; then 749 echo Unable to find sources 750 exit 1 751fi 752find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 753 754if [ -z $BSDOBJDIR ] ; then 755 BSDOBJDIR=/usr/obj 756fi 757if [ -d $BSDOBJDIR ] ; then 758 rm -rf $BSDOBJDIR 759fi 760 761cd $NETBSDSRCDIR && make cleandir 762 763---cut here--- 764 765Critical utilities: 766^^^^^^^^^^^^^^^^^^^ 767 usr.bin/compile_et 768 usr.bin/make 769 usr.bin/yacc 770 usr.bin/lex 771 usr.bin/xlint 772 usr.bin/config 773 774Other problems and possible solutions: 775^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 776Symptom:Complaints involving a Makefile. 777Fix: Rebuild usr.bin/make: 778 cd usr.bin/make && make && make install 779 Or, a failsafe method if that doesn't work: 780 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 781 782Fix: Make sure .mk files are up to date. 783 cd share/mk && make install 784 785Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 786Fix: Rebuild usr.bin/config 787 788Symptom: 789Fix: Rebuild usr.bin/yacc 790 791Symptom: 792Fix: Rebuild usr.bin/lex 793 794Symptom: 795Fix: rm /usr/lib/libbfd.a 796 797Symptom:Obsolete intermediate files are used during compilation 798Fix: Try the following sequence of commands in the directory in question. 799 make cleandir; rm `make print-objdir`; make cleandir; make obj 800 (If you built the tree without "make obj" in the past, obsolete files 801 may remain. The command tries to clean everything up) 802 803Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible 804 pointer type 805Fix: Rebuild and install usr.bin/menuc 806 807Symptom:mklocale not found during build in share/locale/ctype 808Fix: Build and install usr.bin/mklocale 809 810Symptom:undefined reference to `__assert13' or `__unsetenv13' 811Fix: Rebuild and install lib/libc 812 813Symptom:usr.bin/config fails to build. 814Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 815 816Symptom:undefined reference to `getprogname' or `setprogname' 817Fix: Rebuild and install lib/libc 818 819Symptom:lint does not understand the '-X' option 820Fix: May need to build & install libs with NOLINT=1 before rebuilding lint 821 822Symptom:Update build fails in src/tools/gcc complaining that a variable 823 (e.g. CPPFLAGS) has changed since the previous run. 824Fix: Run "nbmake-${ARCH} clean" in src/tools/gcc or do a clean build. 825 826Symptom:cvs [update aborted]: cannot open directory /cvsroot/src/...: 827 No such file or directory. 828Cause: If a directory is created by mistake, then it is sometimes 829 deleted from the CVS repository using administrative commands 830 that bypass the normal cvs access controls. If your cvs working tree 831 contains references to a directory that has been deleted on the 832 server in this way, then "cvs update" reports this error. 833Fix: Recursively delete the affected directory from your working tree 834 and try the update again. 835