UPDATING revision 1.65
1$NetBSD: UPDATING,v 1.65 2002/08/24 13:25:01 lukem Exp $
2
3This file is intended to be a brief introduction to the build
4process and a reference on what to do if something doesn't work.
5
6For a more detailed description see Makefile.
7
8Recent changes:
9^^^^^^^^^^^^^^^
10
1120020822:
12	Crunched rescue tools (contents of /bin and /sbin, plus others)
13	are now provided in /rescue.
14
15	To ensure that these are built statically linked (no matter
16	what the setting of LDSTATIC is), use a crunchgen(1) built
17	from sources newer than 20020820 (see the next entry).
18
1920020820:
20	crunchgen(1) changed to ensure that the generated program
21	is statically linked.
22
23	Solution: update and reinstall usr.bin/crunch
24
2520020515:
26	sshd user/group has been added.  Need to hand add this in, or sshd
27	will not let you log in (with default, or UsePrivlegeSeparation=yes)
28
29	Add the following into /etc/group:
30
31	sshd:*:16:
32
33	and the following to /etc/master.passwd (via vipw):
34
35	sshd:*:16:16::0:0:& pseudo-user:/var/chroot/sshd:/sbin/nologin
36	
37	also /var/chroot/sshd directory needs to be present (digged as a part of
38	build process).
39
4020020426:
41	NBUILDJOBS obsoleted in favor of just using -j.
42
4320020426:
44	etc/postinstall added, which performs various checks for 
45	configuration file updates and changes, and can fix most of
46	the problems identified.
47	This should make it much easier to upgrade a system's
48	configuration from earlier systems (as far back as NetBSD 1.5).
49
5020020320:
51	<bsd.lib.mk> needs a new install(1) for it's "-a cmd" support.
52	build and install at usr.bin/xinstall before the build.
53
5420020319:
55	raw IPv6 socket now makes strict checking for sa_family and sa_len
56	on send(2) operation.  be sure to have sbin/rtsol and usr.sbin/rtsold
57	newer than November 2001 when you upgrade the kernel.
58
5920020311:
60	ssh configuration files were moved from /etc to /etc/ssh.  Beware
61	if you restart your machine from remote.  Note that sshd.conf needs
62	to be changed (due to the use of "/etc" inside).
63
6420020223:
65	Users of the VAX port will need to rebuild and install gas
66	so it deal with the now present register prefix used in all
67	the VAX assembly files.
68
6920020118:
70
71	ntpd user/group has been added.  Need to hand add this in or builds
72	will break as mtree aborts early.
73
74	Add the following into /etc/group:
75
76	ntpd:*:15:
77
78	and the following to /etc/master.passwd (via vipw):
79
80	ntpd:*:15:15::0:0:Ntpd pseudo-user:/var/chroot/ntpd:/sbin/nologin
81
8220011207:
83
84	If you're attempting to build a snapshot on sparc64 and are getting
85	reloc errors from the toolchain groff binary this means your native
86	toolchain has some broken C++ bits.
87
88	To fix:
89
90	Build a new toolchain (i.e. build.sh -t)
91	Use the new toolchain to build and install natively (i.e. /usr/lib)
92
93	gnu/lib/libgcc
94	gnu/lib/libstdc++
95
96	After this a snapshot will be able to be built.
97
9820011201:
99	In order for a sparc64 build to work you must have a working awk. If
100	you've built and installed a system with the new toolchain up to this
101	point you do not have a working awk as its ability to do floating
102	point is broken. 
103
104	To build:
105
106	remake and install gnu/lib/libgcc
107	remake and install gnu/usr.bin/gawk into /usr/bin (make sure it links
108	against the new libgcc.a)
109
11020011128:
111	Kernel config information was changed to use defflag in
112	the various "files" files.  Bug fixes to config(8) are
113	required in order for this to work properly.  Make sure
114	to build and install in usr.sbin/config before attempting
115	to build a new kernel.
116
11720011030:
118	libc/locale/wcstod.c now needs new lint(1). Update lint(1)
119	before building libc.
120
12120011029:
122	The new document BUILDING.mdoc (view with nroff | more, or
123	see pre-generated .txt and .html versions) describes the build
124	procedure in great detail.  BUILDING, and the USE_NEW_TOOLCHAIN
125	build process, are intended in the long run to replace this
126	manual update log.
127
128	Users building a USE_NEW_TOOLCHAIN system should read the
129	BUILDING document for caveats.  Generally, BUILDING supersedes
130	UPDATING for these systems, as tool updating is taken care of
131	by the new build system.
132
13320011028:
134	src/etc/Makefile now needs install to be able to handle
135	symlinks that point to nowhere. A bug in install that
136	prevented this was corrected.
137
138	Solution: update and reinstall usr.bin/xinstall
139	Better Solution: Use the new toolchain and it will just work
140	for you.
141
14220011006:
143	/etc/mtree/NetBSD.dist has been updated to take advantage of
144	absolute path support added to mtree(8). Older mtree(8)s don't
145	understand the format.
146
147	Solution: update and reinstall usr.sbin/mtree
148
14920011004:
150	Crunchgen has been updated to work via reach-over makefiles. Updating
151	is suggested before running a snapshot build
152
15320010915:
154	The new "ubcperf" code committed by Chuck Silvers removed
155	a header file, uvm/uvm_vnode.h.  There may be stale .depend
156	files that still reference this file.
157
158	Solution: "make cleandir && make dependall" in affected
159	directories.
160
16120010803:
162	grep.info is now built from grep.texi using makeinfo.  Since it
163	requires makeinfo v4.0, you need to install new texinfo before
164	building gnu/usr.bin/grep.  To install new texinfo, please follow
165	the instruction described in 20010726 entry.
166
16720010803: 
168	(i386 only): i386 kernel now uses new instructions like
169        `fxsave' which old gas doesn't understand.  To build the
170	kernel successfully, you need to build and install a new toolchain, 
171	(i.e., build.sh -t) or 	(temporarily) comment out "options I686_CPU" 
172	from your kernel configuration until you rebuild your userland.
173	See 20011029 above and BUILDING file in this directory for more information.
174	[updated 20020630 since i386 gas moved when USE_NEW_TOOLCHAIN enabled]
175
17620010731:
177	Bootloader update on ELF platforms.  DDB in kernels from before
178	this will be unable to read symbol tables provided by newer
179	bootloaders.
180
18120010726:
182	Texinfo was updated to 4.0.  To avoid failures when trying to
183	build the included texinfo files, do:
184
185	cd src/gnu/usr.bin/texinfo
186	make MKINFO=no dependall install
187
18820010718:
189	Enabled correct .init/.fini processing in crt0.  The way this
190	was done was to change a -I directive to cc(1), which means
191	make(1) will have a stale dependency (it will be checking the
192	timestamp on the wrong "dot_init.h").
193
194	The symptom you will see is that new programs die with SIGSEGV
195	if you have a stale dependency.
196
197	Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
198	before starting your build.
199
20020010628:
201	A construct was added to uvm_page.h that uncovered a bug
202	in lint(1).  If you get a warning/error about a non-portable
203	bitfield, update your lint(1) before proceeding.
204
20520010226:
206	Added named user/group to system. Need to hand add this in or builds
207	will break as mtree aborts early.
208
209	To work around add by hand:
210
211	named:*:14:
212
213	to /etc/group and add:
214
215	named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
216
217	to master.passwd (use vipw for instance if doing by hand).
218
219	Now a make build should progress.
220
22120010219:
222	get/setprogname() added. Any hostprogs that may use this will need
223        to be bootstrapped manually until the host system is current.
224
225        Known problems: sys/arch/macppc/stand/fixcoff
226			usr.sbin/config (adding -DMAKE_BOOTSTRAP to
227			  CFLAGS and rebuilding should work)
228			usr.sbin/mdsetimage - Build a static copy if
229  		          building a snapshot before fully bootstrapped.
230
23120010204:
232	prepare the code to compile with stricter gcc flags. in
233	particular start eliminating redundant declarations. Yacc
234	needs to be installed before make build.
235
23620010114:
237	introduce .if commands(target) in make(1). You need to
238	bring everything up-to-date first, then without installing
239	anything make and install in usr.bin/make, then proceed
240	with make build.
241
24220010101:
243	bsd.subdir.mk committed 20001230 had a bug which caused
244	afterinstall targets to run too soon; update again.
245
24620001230:
247	New share/mk files needed to support .WAIT in SUBDIR variables.
248	If you get make errors, 
249		(cd share/mk; make install)
250	Also, PRINTOBJDIR has changed and is now used more heavily.
251
25220001019:
253	The `ca' device driver has been replaced by `ld'; although the
254	major and minor numbers haven't changed, you should update your /dev
255	directory.
256
25720000929:
258	The following make directives are obsoleted.
259	MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA 
260	By default, RSA is built into libcrypto.  IDEA and RC5 will not be
261	built into libcrypto.  By using MKCRYPTO_{RC5,IDEA}, you can build
262	additional library libcrypto_{idea,rc5}.
263
264
265Hints for a more successful build:
266^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
267    Build a new kernel first:
268	This makes sure that any new system calls or features
269	   expected by the new userland will be present.  This
270	   helps to avoid critical errors when upgrading.
271    Use object directories:
272	This helps to keep stale object
273	   files from polluting the build if a Makefile "forgets"
274	   about one.  It also makes it easier to clean up after
275	   a build.  It's also necessary if you want to use the
276	   same source tree for multiple machines.
277	   To use object directories:
278	    a) cd /usr/src ; make cleandir
279	    b) Add "OBJMACHINE=yes" to /etc/mk.conf
280	    c) Add "MKOBJDIRS=yes" to /etc/mk.conf
281	    d) cd /usr/src ; make build
282	   Note that running "make obj" in a directory will create
283	   in obj.$MACHINE directory.
284    Build to a DESTDIR:
285	This helps to keep old
286	   installed files (especially libraries) from interfering
287	   with the new build.
288	   To build to a DESTDIR, set the DESTDIR environment
289	   variable before running make build.  It should be set to
290	   the pathname of an initially empty directory.
291	   Problems: you might need to update critical utilities
292		without using DESTDIR since nothing is executed
293		from what is installed in DESTDIR.
294		(See critical utils, below)
295    Build often:
296	This keeps critical utilities current enough to not choke
297	on any other part of the source tree that depends on up to
298	date functionality.
299 
300What to do if things don't work:
301^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
302When things don't work there is usually a few things that commonly
303should be done.
304    1)	make includes
305	This should be done automatically by make build.
306    2)  cd share/mk && make install
307	Again, automatically done by make build.
308
309Failsafe rebuild of a small part of the tree:
310^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
311To make sure you rebuild something correctly you want to do
312something like the following:
313    1)  Make sure the includes and .mk files are up to date.
314    2)  Make sure any program used to build the particular
315	utility is up to date.  (yacc, lex, etc...)
316    3)  cd ...path/to/util...
317	make cleandir
318	rm ...all obj directories...
319	make cleandir			# yes, again
320	make obj
321	make depend && make
322
323Failsafe rebuild of the entire tree:
324^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
325If you really want to make sure the source tree is clean and
326ready for a build try the following.  Note that sourcing /etc/mk.conf
327(a make(1) Makefile) in this manner is not right, and will not work
328for anyone who uses any make(1) features in /etc/mk.conf.
329
330---cut here---
331#!/bin/sh
332. /etc/mk.conf
333
334if [ -z $NETBSDSRCDIR ] ; then
335    NETBSDSRCDIR=/usr/src
336fi
337if [ \! -d $NETBSDSRCDIR ] ; then
338    echo Unable to find sources
339    exit 1
340fi
341find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
342
343if [ -z $BSDOBJDIR ] ; then
344    BSDOBJDIR=/usr/obj
345fi
346if [ -d $BSDOBJDIR ] ; then
347    rm -rf $BSDOBJDIR
348fi
349
350cd $NETBSDSRCDIR && make cleandir
351
352---cut here---
353
354Critical utilities:
355^^^^^^^^^^^^^^^^^^^
356	gnu/usr.bin/egcs
357	usr.bin/compile_et
358	usr.bin/make
359	usr.bin/yacc
360	usr.bin/lex
361	usr.bin/xlint
362	usr.sbin/config
363
364Other problems and possible solutions:
365^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
366Symptom:Unreasonable compiler errors.
367Fix:	Rebuild gnu/usr.bin/egcs
368
369Symptom:Complaints involving a Makefile.
370Fix:	Rebuild usr.bin/make:
371	cd usr.bin/make && make && make install
372        Or, a failsafe method if that doesn't work:
373	cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
374
375Fix:	Make sure .mk files are up to date.
376	cd share/mk && make install
377
378Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
379Fix:	Rebuild usr.sbin/config
380
381Symptom:
382Fix:	Rebuild usr.bin/yacc
383
384Symptom:
385Fix:	Rebuild usr.bin/lex
386
387Symptom:
388Fix:	rm /usr/lib/libbfd.a
389
390Symptom:Obsolete intermediate files are used during compilation
391Fix:	Try the following sequence of commands in the directory in question.
392	make cleandir; rm `make print-objdir`; make cleandir; make obj
393	(If you built the tree without "make obj" in the past, obsolete files
394	may remain.  The command tries to clean everything up)
395
396Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
397Fix:	Rebuild and install usr.bin/menuc
398
399Symptom:mklocale not found during build in share/locale/ctype
400Fix:	Build and install usr.bin/mklocale
401
402Symptom:undefined reference to `__assert13'
403Fix:    Rebuild and install lib/libc
404
405Symptom:usr.sbin/config fails to build.
406Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
407
408Symptom:undefined reference to `getprogname' or `setprogname'
409Fix:    Rebuild and install lib/libc
410
411Symptom:lint does not understand the '-X' option
412Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
413