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