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