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