UPDATING revision 1.30
1$NetBSD: UPDATING,v 1.30 2001/08/03 14:19:50 enami 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
1120010803:
12	(i386 only): i386 kernel now uses new instructions like fxsave which
13	old gas doesn't understand.  To build the kernel successfuly, you
14	need to build and install new gas (gnu/usr.bin/gas.new).
15
1620010731:
17	Bootloader update on ELF platforms.  DDB in kernels from before
18	this will be unable to read symbol tables provided by newer
19	bootloaders.
20
2120010726:
22	Texinfo was updated to 4.0.  To avoid failures when trying to
23	build the included texinfo files, do:
24
25	cd src/gnu/usr.bin/texinfo
26	make MKINFO=no dependall install
27
2820010718:
29
30	Enabled correct .init/.fini processing in crt0.  The way this
31	was done was to change a -I directive to cc(1), which means
32	make(1) will have a stale dependency (it will be checking the
33	timestamp on the wrong "dot_init.h").
34
35	The symptom you will see is that new programs die with SIGSEGV
36	if you have a stale dependency.
37
38	Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
39	before starting your build.
40
4120010628:
42
43	A construct was added to uvm_page.h that uncovered a bug
44	in lint(1).  If you get a warning/error about a non-portable
45	bitfield, update your lint(1) before proceeding.
46
4720010226:
48
49	Added named user/group to system. Need to hand add this in or builds
50	will break as mtree aborts early.
51
52	To work around add by hand:
53
54	named:*:14:
55
56	to /etc/group and add:
57
58	named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
59
60	to master.passwd (use vipw for instance if doing by hand).
61
62	Now a make build should progress.
63
6420010219:
65	get/setprogname() added. Any hostprog's that may use this will need
66        to be bootstrapped manually until the host system is current.
67
68        Known problems: sys/arch/macppc/stand/fixcoff
69			usr.sbin/config (adding -DMAKE_BOOTSTRAP to
70			  CFLAGS and rebuilding should work)
71			usr.sbin/mdsetimage - Build a static copy if
72  		          building a snapshot before fully bootstrapped.
73
7420010204:
75	prepare the code to compile with stricter gcc flags. in
76	particular start eliminating redundant declarations. Yacc
77	needs to be installed before make build.
78
7920010114:
80	introduce .if commands(target) in make(1). You need to
81	bring everything up-to-date first, then without installing
82	anything make and install in usr.bin/make, then proceed
83	with make build.
84
8520010101:
86	bsd.subdir.mk committed 20001230 had a bug which caused
87	afterinstall targets to run too soon; update again.
88
8920001230:
90	New share/mk files needed to support .WAIT in SUBDIR variables.
91	If you get make errors, 
92		(cd share/mk; make install)
93	Also, PRINTOBJDIR has changed and is now used more heavily.
94
9520001019:
96	The `ca' device driver has been replaced by `ld'; although the
97	major and minor numbers haven't changed, you should update your /dev
98	directory.
99
10020000929:
101	The following make directives are obsoleted.
102	MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA 
103	By default, RSA is built into libcrypto.  IDEA and RC5 will not be
104	built into libcrypto.  By using MKCRYPTO_{RC5,IDEA}, you can build
105	additional library libcrypto_{idea,rc5}.
106
10720000623:
108	MKCRYPTO and friends added to share/mk/bsd.own.mk.
109	'cd share/mk ; make install' needed before make build.
110
111
112Hints for a more successful build:
113^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
114    Build a new kernel first:
115	This makes sure that any new system calls or features
116	   expected by the new userland will be present.  This
117	   helps to avoid critical errors when upgrading.
118    Use object directories:
119	This helps to keep stale object
120	   files from polluting the build if a Makefile "forgets"
121	   about one.  It also makes it easier to clean up after
122	   a build.  It's also necessary if you want to use the
123	   same source tree for multiple machines.
124	   To use object directories:
125	    a) cd /usr/src ; make cleandir
126	    b) Add "OBJMACHINE=yes" to /etc/mk.conf
127	    c) Add "MKOBJDIRS=yes" to /etc/mk.conf
128	    d) cd /usr/src ; make build
129	   Note that running "make obj" in a directory will create
130	   in obj.$MACHINE directory.
131    Build to a DESTDIR:
132	This helps to keep old
133	   installed files (especially libraries) from interfering
134	   with the new build.
135	   To build to a DESTDIR, set the DESTDIR environment
136	   variable before running make build.  It should be set to
137	   the pathname of an initially empty directory.
138	   Problems: you might need to update critical utilities
139		without using DESTDIR since nothing is executed
140		from what is installed in DESTDIR.
141		(See critical utils, below)
142    Build often:
143	This keeps critical utilities current enough to not choke
144	on any other part of the source tree that depends on up to
145	date functionality.
146 
147What to do if things don't work:
148^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
149When things don't work there is usually a few things that commonly
150should be done.
151    1)	make includes
152	This should be done automatically by make build.
153    2)  cd share/mk && make install
154	Again, automatically done by make build.
155
156Failsafe rebuild of a small part of the tree:
157^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
158To make sure you rebuild something correctly you want to do
159something like the following:
160    1)  Make sure the includes and .mk files are up to date.
161    2)  Make sure any program used to build the particular
162	utility is up to date.  (yacc, lex, etc...)
163    3)  cd ...path/to/util...
164	make cleandir
165	rm ...all obj directories...
166	make cleandir			# yes, again
167	make obj
168	make depend && make
169
170Failsafe rebuild of the entire tree:
171^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
172If you really want to make sure the source tree is clean and
173ready for a build try the following.  Note that sourcing /etc/mk.conf
174(a make(1) Makefile) in this manner is not right, and will not work
175for anyone who uses any make(1) features in /etc/mk.conf.
176
177---cut here---
178#!/bin/sh
179. /etc/mk.conf
180
181if [ -z $BSDSRCDIR ] ; then
182    BSDSRCDIR=/usr/src
183fi
184if [ \! -d $BSDSRCDIR ] ; then
185    echo Unable to find sources
186    exit 1
187fi
188find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
189
190if [ -z $BSDOBJDIR ] ; then
191    BSDOBJDIR=/usr/obj
192fi
193if [ -d $BSDOBJDIR ] ; then
194    rm -rf $BSDOBJDIR
195fi
196
197cd $BSDSRCDIR && make cleandir
198
199---cut here---
200
201Critical utilities:
202^^^^^^^^^^^^^^^^^^^
203	gnu/usr.bin/egcs
204	usr.bin/compile_et
205	usr.bin/make
206	usr.bin/yacc
207	usr.bin/lex
208	usr.bin/xlint
209	usr.sbin/config
210
211Other problems and possibly solutions:
212^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
213Symptom:Unreasonable compiler errors.
214Fix:	Rebuild gnu/usr.bin/egcs
215
216Symptom:Complaints involving a Makefile.
217Fix:	Rebuild usr.bin/make:
218	cd usr.bin/make && make && make install
219        Or, a failsafe method if that doesn't work:
220	cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
221
222Fix:	Make sure .mk files are up to date.
223	cd share/mk && make install
224
225Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
226Fix:	Rebuild usr.sbin/config
227
228Symptom:
229Fix:	Rebuild usr.bin/yacc
230
231Symptom:
232Fix:	Rebuild usr.bin/lex
233
234Symptom:
235Fix:	rm /usr/lib/libbfd.a
236
237Symptom:Obsolete intermediate files are used during compilation
238Fix:	Try the following sequence of commands in the directory in question.
239	make cleandir; rm `make print-objdir`; make cleandir; make obj
240	(If you built the tree without "make obj" in the past, obsolete files
241	may remain.  The command tries to clean everything up)
242
243Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
244Fix:	Rebuild and install usr.bin/menuc
245
246Symptom:mklocale not found during build in share/locale/ctype
247Fix:	Build and install usr.bin/mklocale
248
249Symptom:undefined reference to `__assert13'
250Fix:    Rebuild and install lib/libc
251
252Symptom:usr.sbin/config fails to build.
253Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
254
255Symptom:undefined reference to `getprogname' or `setprogname'
256Fix:    Rebuild and install lib/libc
257
258Symptom:lint does not understand the '-X' option
259Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
260