xref: /netbsd-src/UPDATING (revision b5cd2489b2952ee409ede7b61183dba7ab0359ad)
1$NetBSD: UPDATING,v 1.45 2001/10/30 06:05:28 yamt 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^^^^^^^^^^^^^^^
1020011030:
11	libc/locale/wcstod.c now needs new lint(1). Update lint(1)
12	before building libc.
13
1420011029:
15	The new document BUILDING.mdoc (view with nroff | more, or
16	see pre-generated .txt and .html versions) describes the build
17	procedure in great detail.  BUILDING, and the USE_NEW_TOOLCHAIN
18	build process, are intended in the long run to replace this
19	manual update log.
20
21	Users building a USE_NEW_TOOLCHAIN system should read the
22	BUILDING document for caveats.  Generally, BUILDING supersedes
23	UPDATING for these systems, as tool updating is taken care of
24	by the new build system.
25
2620011028:
27	src/etc/Makefile now needs install to be able to handle
28	symlinks that point to nowhere. A bug in install that
29	prevented this was corrected.
30
31	Solution: update and reinstall usr.bin/xinstall
32	Better Solution: Use the new toolchain and it will just work
33	for you.
34
3520011006:
36	/etc/mtree/NetBSD.dist has been updated to take advantage of
37	absolute path support added to mtree(8). Older mtree(8)s don't
38	understand the format.
39
40	Solution: update and reinstall usr.sbin/mtree
41
4220011004:
43	Crunchgen has been updated to work via reach-over makefiles. Updating
44	is suggested before running a snapshot build
45
4620010915:
47	The new "ubcperf" code committed by Chuck Silvers removed
48	a header file, uvm/uvm_vnode.h.  There may be stale .depend
49	files that still reference this file.
50
51	Solution: "make cleandir && make dependall" in affected
52	directories.
53
5420010803:
55	grep.info is now built from grep.texi using makeinfo.  Since it
56	requires makeinfo v4.0, you need to install new texinfo before
57	building gnu/usr.bin/grep.  To install new texinfo, please follow
58	the instruction described in 20010726 entry.
59
6020010803:
61	(i386 only): i386 kernel now uses new instructions like
62        `fxsave' which old gas doesn't understand.  To build the
63	kernel successfuly, you need to build and install new gas
64	(gnu/usr.bin/gas.new), or (temporarily) comment out
65	"options I686_CPU" from your kernel configuration until you
66	rebuilt your userland (and got a new gas).
67
6820010731:
69	Bootloader update on ELF platforms.  DDB in kernels from before
70	this will be unable to read symbol tables provided by newer
71	bootloaders.
72
7320010726:
74	Texinfo was updated to 4.0.  To avoid failures when trying to
75	build the included texinfo files, do:
76
77	cd src/gnu/usr.bin/texinfo
78	make MKINFO=no dependall install
79
8020010718:
81	Enabled correct .init/.fini processing in crt0.  The way this
82	was done was to change a -I directive to cc(1), which means
83	make(1) will have a stale dependency (it will be checking the
84	timestamp on the wrong "dot_init.h").
85
86	The symptom you will see is that new programs die with SIGSEGV
87	if you have a stale dependency.
88
89	Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
90	before starting your build.
91
9220010628:
93	A construct was added to uvm_page.h that uncovered a bug
94	in lint(1).  If you get a warning/error about a non-portable
95	bitfield, update your lint(1) before proceeding.
96
9720010226:
98	Added named user/group to system. Need to hand add this in or builds
99	will break as mtree aborts early.
100
101	To work around add by hand:
102
103	named:*:14:
104
105	to /etc/group and add:
106
107	named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
108
109	to master.passwd (use vipw for instance if doing by hand).
110
111	Now a make build should progress.
112
11320010219:
114	get/setprogname() added. Any hostprog's that may use this will need
115        to be bootstrapped manually until the host system is current.
116
117        Known problems: sys/arch/macppc/stand/fixcoff
118			usr.sbin/config (adding -DMAKE_BOOTSTRAP to
119			  CFLAGS and rebuilding should work)
120			usr.sbin/mdsetimage - Build a static copy if
121  		          building a snapshot before fully bootstrapped.
122
12320010204:
124	prepare the code to compile with stricter gcc flags. in
125	particular start eliminating redundant declarations. Yacc
126	needs to be installed before make build.
127
12820010114:
129	introduce .if commands(target) in make(1). You need to
130	bring everything up-to-date first, then without installing
131	anything make and install in usr.bin/make, then proceed
132	with make build.
133
13420010101:
135	bsd.subdir.mk committed 20001230 had a bug which caused
136	afterinstall targets to run too soon; update again.
137
13820001230:
139	New share/mk files needed to support .WAIT in SUBDIR variables.
140	If you get make errors,
141		(cd share/mk; make install)
142	Also, PRINTOBJDIR has changed and is now used more heavily.
143
14420001019:
145	The `ca' device driver has been replaced by `ld'; although the
146	major and minor numbers haven't changed, you should update your /dev
147	directory.
148
14920000929:
150	The following make directives are obsoleted.
151	MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
152	By default, RSA is built into libcrypto.  IDEA and RC5 will not be
153	built into libcrypto.  By using MKCRYPTO_{RC5,IDEA}, you can build
154	additional library libcrypto_{idea,rc5}.
155
156
157Hints for a more successful build:
158^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
159    Build a new kernel first:
160	This makes sure that any new system calls or features
161	   expected by the new userland will be present.  This
162	   helps to avoid critical errors when upgrading.
163    Use object directories:
164	This helps to keep stale object
165	   files from polluting the build if a Makefile "forgets"
166	   about one.  It also makes it easier to clean up after
167	   a build.  It's also necessary if you want to use the
168	   same source tree for multiple machines.
169	   To use object directories:
170	    a) cd /usr/src ; make cleandir
171	    b) Add "OBJMACHINE=yes" to /etc/mk.conf
172	    c) Add "MKOBJDIRS=yes" to /etc/mk.conf
173	    d) cd /usr/src ; make build
174	   Note that running "make obj" in a directory will create
175	   in obj.$MACHINE directory.
176    Build to a DESTDIR:
177	This helps to keep old
178	   installed files (especially libraries) from interfering
179	   with the new build.
180	   To build to a DESTDIR, set the DESTDIR environment
181	   variable before running make build.  It should be set to
182	   the pathname of an initially empty directory.
183	   Problems: you might need to update critical utilities
184		without using DESTDIR since nothing is executed
185		from what is installed in DESTDIR.
186		(See critical utils, below)
187    Build often:
188	This keeps critical utilities current enough to not choke
189	on any other part of the source tree that depends on up to
190	date functionality.
191
192What to do if things don't work:
193^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
194When things don't work there is usually a few things that commonly
195should be done.
196    1)	make includes
197	This should be done automatically by make build.
198    2)  cd share/mk && make install
199	Again, automatically done by make build.
200
201Failsafe rebuild of a small part of the tree:
202^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
203To make sure you rebuild something correctly you want to do
204something like the following:
205    1)  Make sure the includes and .mk files are up to date.
206    2)  Make sure any program used to build the particular
207	utility is up to date.  (yacc, lex, etc...)
208    3)  cd ...path/to/util...
209	make cleandir
210	rm ...all obj directories...
211	make cleandir			# yes, again
212	make obj
213	make depend && make
214
215Failsafe rebuild of the entire tree:
216^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
217If you really want to make sure the source tree is clean and
218ready for a build try the following.  Note that sourcing /etc/mk.conf
219(a make(1) Makefile) in this manner is not right, and will not work
220for anyone who uses any make(1) features in /etc/mk.conf.
221
222---cut here---
223#!/bin/sh
224. /etc/mk.conf
225
226if [ -z $BSDSRCDIR ] ; then
227    BSDSRCDIR=/usr/src
228fi
229if [ \! -d $BSDSRCDIR ] ; then
230    echo Unable to find sources
231    exit 1
232fi
233find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
234
235if [ -z $BSDOBJDIR ] ; then
236    BSDOBJDIR=/usr/obj
237fi
238if [ -d $BSDOBJDIR ] ; then
239    rm -rf $BSDOBJDIR
240fi
241
242cd $BSDSRCDIR && make cleandir
243
244---cut here---
245
246Critical utilities:
247^^^^^^^^^^^^^^^^^^^
248	gnu/usr.bin/egcs
249	usr.bin/compile_et
250	usr.bin/make
251	usr.bin/yacc
252	usr.bin/lex
253	usr.bin/xlint
254	usr.sbin/config
255
256Other problems and possible solutions:
257^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
258Symptom:Unreasonable compiler errors.
259Fix:	Rebuild gnu/usr.bin/egcs
260
261Symptom:Complaints involving a Makefile.
262Fix:	Rebuild usr.bin/make:
263	cd usr.bin/make && make && make install
264        Or, a failsafe method if that doesn't work:
265	cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
266
267Fix:	Make sure .mk files are up to date.
268	cd share/mk && make install
269
270Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
271Fix:	Rebuild usr.sbin/config
272
273Symptom:
274Fix:	Rebuild usr.bin/yacc
275
276Symptom:
277Fix:	Rebuild usr.bin/lex
278
279Symptom:
280Fix:	rm /usr/lib/libbfd.a
281
282Symptom:Obsolete intermediate files are used during compilation
283Fix:	Try the following sequence of commands in the directory in question.
284	make cleandir; rm `make print-objdir`; make cleandir; make obj
285	(If you built the tree without "make obj" in the past, obsolete files
286	may remain.  The command tries to clean everything up)
287
288Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
289Fix:	Rebuild and install usr.bin/menuc
290
291Symptom:mklocale not found during build in share/locale/ctype
292Fix:	Build and install usr.bin/mklocale
293
294Symptom:undefined reference to `__assert13'
295Fix:    Rebuild and install lib/libc
296
297Symptom:usr.sbin/config fails to build.
298Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
299
300Symptom:undefined reference to `getprogname' or `setprogname'
301Fix:    Rebuild and install lib/libc
302
303Symptom:lint does not understand the '-X' option
304Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
305