UPDATING revision 1.24 1 1.24 abs $NetBSD: UPDATING,v 1.24 2001/05/27 23:34:22 abs Exp $
2 1.1 abs
3 1.1 abs This file is intended to be a brief introduction to the build
4 1.1 abs process and a reference on what to do if something doesn't work.
5 1.1 abs
6 1.1 abs For a more detailed description see Makefile.
7 1.1 abs
8 1.1 abs Recent changes:
9 1.1 abs ^^^^^^^^^^^^^^^
10 1.21 jmc
11 1.21 jmc 20010226:
12 1.21 jmc
13 1.22 jmc Added named user/group to system. Need to hand add this in or builds
14 1.21 jmc will break as mtree aborts early.
15 1.21 jmc
16 1.21 jmc To work around add by hand:
17 1.21 jmc
18 1.21 jmc named:*:14:
19 1.21 jmc
20 1.22 jmc to /etc/group and add:
21 1.22 jmc
22 1.22 jmc named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
23 1.22 jmc
24 1.22 jmc to master.passwd (use vipw for instance if doing by hand).
25 1.22 jmc
26 1.22 jmc Now a make build should progress.
27 1.18 jmc
28 1.18 jmc 20010219:
29 1.18 jmc get/setprogname() added. Any hostprog's that may use this will need
30 1.20 jmc to be bootstrapped manually until the host system is current.
31 1.18 jmc
32 1.18 jmc Known problems: sys/arch/macppc/stand/fixcoff
33 1.19 cgd usr.sbin/config (adding -DMAKE_BOOTSTRAP to
34 1.19 cgd CFLAGS and rebuilding should work)
35 1.20 jmc usr.sbin/mdsetimage - Build a static copy if
36 1.20 jmc building a snapshot before fully bootstrapped.
37 1.15 christos
38 1.15 christos 20010204:
39 1.15 christos prepare the code to compile with stricter gcc flags. in
40 1.15 christos particular start eliminating redundant declarations. Yacc
41 1.15 christos needs to be installed before make build.
42 1.10 christos
43 1.10 christos 20010114:
44 1.10 christos introduce .if commands(target) in make(1). You need to
45 1.10 christos bring everything up-to-date first, then without installing
46 1.23 tron anything make and install in usr.bin/make, then proceed
47 1.10 christos with make build.
48 1.9 sommerfe
49 1.9 sommerfe 20010101:
50 1.9 sommerfe bsd.subdir.mk committed 20001230 had a bug which caused
51 1.9 sommerfe afterinstall targets to run too soon; update again.
52 1.8 sommerfe
53 1.8 sommerfe 20001230:
54 1.8 sommerfe New share/mk files needed to support .WAIT in SUBDIR variables.
55 1.8 sommerfe If you get make errors,
56 1.8 sommerfe (cd share/mk; make install)
57 1.8 sommerfe Also, PRINTOBJDIR has changed and is now used more heavily.
58 1.6 ad
59 1.6 ad 20001019:
60 1.7 ad The `ca' device driver has been replaced by `ld'; although the
61 1.6 ad major and minor numbers haven't changed, you should update your /dev
62 1.6 ad directory.
63 1.1 abs
64 1.4 itojun 20000929:
65 1.4 itojun The following make directives are obsoleted.
66 1.4 itojun MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
67 1.4 itojun By default, RSA is built into libcrypto. IDEA and RC5 will not be
68 1.16 wiz built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build
69 1.4 itojun additional library libcrypto_{idea,rc5}.
70 1.4 itojun
71 1.1 abs 20000623:
72 1.1 abs MKCRYPTO and friends added to share/mk/bsd.own.mk.
73 1.1 abs 'cd share/mk ; make install' needed before make build.
74 1.1 abs
75 1.1 abs
76 1.1 abs Hints for a more successful build:
77 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
78 1.2 mrg Build a new kernel first:
79 1.2 mrg This makes sure that any new system calls or features
80 1.2 mrg expected by the new userland will be present. This
81 1.2 mrg helps to avoid critical errors when upgrading.
82 1.1 abs Use object directories:
83 1.1 abs This helps to keep stale object
84 1.1 abs files from polluting the build if a Makefile "forgets"
85 1.1 abs about one. It also makes it easier to clean up after
86 1.1 abs a build. It's also necessary if you want to use the
87 1.1 abs same source tree for multiple machines.
88 1.1 abs To use object directories:
89 1.1 abs a) cd /usr/src ; make cleandir
90 1.2 mrg b) Add "OBJMACHINE=yes" to /etc/mk.conf
91 1.2 mrg c) Add "MKOBJDIRS=yes" to /etc/mk.conf
92 1.1 abs d) cd /usr/src ; make build
93 1.2 mrg Note that running "make obj" in a directory will create
94 1.2 mrg in obj.$MACHINE directory.
95 1.1 abs Build to a DESTDIR:
96 1.1 abs This helps to keep old
97 1.1 abs installed files (especially libraries) from interfering
98 1.1 abs with the new build.
99 1.1 abs To build to a DESTDIR, set the DESTDIR environment
100 1.2 mrg variable before running make build. It should be set to
101 1.2 mrg the pathname of an initially empty directory.
102 1.1 abs Problems: you might need to update critical utilities
103 1.1 abs without using DESTDIR since nothing is executed
104 1.1 abs from what is installed in DESTDIR.
105 1.1 abs (See critical utils, below)
106 1.1 abs Build often:
107 1.1 abs This keeps critical utilities current enough to not choke
108 1.1 abs on any other part of the source tree that depends on up to
109 1.1 abs date functionality.
110 1.1 abs
111 1.1 abs What to do if things don't work:
112 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
113 1.1 abs When things don't work there is usually a few things that commonly
114 1.1 abs should be done.
115 1.1 abs 1) make includes
116 1.1 abs This should be done automatically by make build.
117 1.1 abs 2) cd share/mk && make install
118 1.1 abs Again, automatically done by make build.
119 1.1 abs
120 1.1 abs Failsafe rebuild of a small part of the tree:
121 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
122 1.1 abs To make sure you rebuild something correctly you want to do
123 1.1 abs something like the following:
124 1.1 abs 1) Make sure the includes and .mk files are up to date.
125 1.1 abs 2) Make sure any program used to build the particular
126 1.1 abs utility is up to date. (yacc, lex, etc...)
127 1.1 abs 3) cd ...path/to/util...
128 1.1 abs make cleandir
129 1.1 abs rm ...all obj directories...
130 1.1 abs make cleandir # yes, again
131 1.1 abs make obj
132 1.1 abs make depend && make
133 1.1 abs
134 1.1 abs Failsafe rebuild of the entire tree:
135 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
136 1.1 abs If you really want to make sure the source tree is clean and
137 1.2 mrg ready for a build try the following. Note that sourcing /etc/mk.conf
138 1.2 mrg (a make(1) Makefile) in this manner is not right, and will not work
139 1.2 mrg for anyone who uses any make(1) features in /etc/mk.conf.
140 1.1 abs
141 1.1 abs ---cut here---
142 1.1 abs #!/bin/sh
143 1.1 abs . /etc/mk.conf
144 1.1 abs
145 1.1 abs if [ -z $BSDSRCDIR ] ; then
146 1.1 abs BSDSRCDIR=/usr/src
147 1.1 abs fi
148 1.1 abs if [ \! -d $BSDSRCDIR ] ; then
149 1.1 abs echo Unable to find sources
150 1.1 abs exit 1
151 1.1 abs fi
152 1.1 abs find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
153 1.1 abs
154 1.1 abs if [ -z $BSDOBJDIR ] ; then
155 1.1 abs BSDOBJDIR=/usr/obj
156 1.1 abs fi
157 1.1 abs if [ -d $BSDOBJDIR ] ; then
158 1.1 abs rm -rf $BSDOBJDIR
159 1.1 abs fi
160 1.1 abs
161 1.1 abs cd $BSDSRCDIR && make cleandir
162 1.1 abs
163 1.1 abs ---cut here---
164 1.1 abs
165 1.1 abs Critical utilities:
166 1.1 abs ^^^^^^^^^^^^^^^^^^^
167 1.1 abs gnu/usr.bin/egcs
168 1.3 itojun usr.bin/compile_et
169 1.1 abs usr.bin/make
170 1.1 abs usr.bin/yacc
171 1.1 abs usr.bin/lex
172 1.11 lukem usr.bin/xlint
173 1.2 mrg usr.sbin/config
174 1.1 abs
175 1.1 abs Other problems and possibly solutions:
176 1.1 abs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
177 1.1 abs Symptom:Unreasonable compiler errors.
178 1.1 abs Fix: Rebuild gnu/usr.bin/egcs
179 1.1 abs
180 1.1 abs Symptom:Complaints involving a Makefile.
181 1.17 erh Fix: Rebuild usr.bin/make:
182 1.17 erh cd usr.bin/make && make && make install
183 1.17 erh Or, a failsafe method if that doesn't work:
184 1.17 erh cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
185 1.17 erh
186 1.1 abs Fix: Make sure .mk files are up to date.
187 1.1 abs cd share/mk && make install
188 1.2 mrg
189 1.2 mrg Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
190 1.2 mrg Fix: Rebuild usr.sbin/config
191 1.1 abs
192 1.1 abs Symptom:
193 1.1 abs Fix: Rebuild usr.bin/yacc
194 1.1 abs
195 1.1 abs Symptom:
196 1.1 abs Fix: Rebuild usr.bin/lex
197 1.1 abs
198 1.1 abs Symptom:
199 1.1 abs Fix: rm /usr/lib/libbfd.a
200 1.4 itojun
201 1.4 itojun Symptom:Obsolete intermediate files are used during compilation
202 1.4 itojun Fix: Try the following sequence of commands in the directory in question.
203 1.4 itojun make cleandir; rm `make print-objdir`; make cleandir; make obj
204 1.4 itojun (If you built the tree without "make obj" in the past, obsolete files
205 1.4 itojun may remain. The command tries to clean everything up)
206 1.5 wiz
207 1.5 wiz Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
208 1.5 wiz Fix: Rebuild and install usr.bin/menuc
209 1.12 itojun
210 1.12 itojun Symptom:mklocale not found during build in share/locale/ctype
211 1.12 itojun Fix: Build and install usr.bin/mklocale
212 1.13 dogcow
213 1.13 dogcow Symptom:undefined reference to `__assert13'
214 1.13 dogcow Fix: Rebuild and install lib/libc
215 1.13 dogcow
216 1.19 cgd Symptom:usr.sbin/config fails to build.
217 1.19 cgd Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
218 1.13 dogcow
219 1.19 cgd Symptom:undefined reference to `getprogname' or `setprogname'
220 1.19 cgd Fix: Rebuild and install lib/libc
221 1.24 abs
222 1.24 abs Symptom:lint does not understand the '-X' option
223 1.24 abs Fix: May need to build & install libs with NOLINT=1 before rebuilding lint
224