UPDATING revision 1.9 1 $NetBSD: UPDATING,v 1.9 2001/01/01 15:29:16 sommerfeld Exp $
2
3 This file is intended to be a brief introduction to the build
4 process and a reference on what to do if something doesn't work.
5
6 For a more detailed description see Makefile.
7
8 Recent changes:
9 ^^^^^^^^^^^^^^^
10
11 20010101:
12 bsd.subdir.mk committed 20001230 had a bug which caused
13 afterinstall targets to run too soon; update again.
14
15 20001230:
16 New share/mk files needed to support .WAIT in SUBDIR variables.
17 If you get make errors,
18 (cd share/mk; make install)
19 Also, PRINTOBJDIR has changed and is now used more heavily.
20
21 20001019:
22 The `ca' device driver has been replaced by `ld'; although the
23 major and minor numbers haven't changed, you should update your /dev
24 directory.
25
26 20000929:
27 The following make directives are obsoleted.
28 MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
29 By default, RSA is built into libcrypto. IDEA and RC5 will not be
30 bulit into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build
31 additional library libcrypto_{idea,rc5}.
32
33 20000623:
34 MKCRYPTO and friends added to share/mk/bsd.own.mk.
35 'cd share/mk ; make install' needed before make build.
36
37
38 Hints for a more successful build:
39 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
40 Build a new kernel first:
41 This makes sure that any new system calls or features
42 expected by the new userland will be present. This
43 helps to avoid critical errors when upgrading.
44 Use object directories:
45 This helps to keep stale object
46 files from polluting the build if a Makefile "forgets"
47 about one. It also makes it easier to clean up after
48 a build. It's also necessary if you want to use the
49 same source tree for multiple machines.
50 To use object directories:
51 a) cd /usr/src ; make cleandir
52 b) Add "OBJMACHINE=yes" to /etc/mk.conf
53 c) Add "MKOBJDIRS=yes" to /etc/mk.conf
54 d) cd /usr/src ; make build
55 Note that running "make obj" in a directory will create
56 in obj.$MACHINE directory.
57 Build to a DESTDIR:
58 This helps to keep old
59 installed files (especially libraries) from interfering
60 with the new build.
61 To build to a DESTDIR, set the DESTDIR environment
62 variable before running make build. It should be set to
63 the pathname of an initially empty directory.
64 Problems: you might need to update critical utilities
65 without using DESTDIR since nothing is executed
66 from what is installed in DESTDIR.
67 (See critical utils, below)
68 Build often:
69 This keeps critical utilities current enough to not choke
70 on any other part of the source tree that depends on up to
71 date functionality.
72
73 What to do if things don't work:
74 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75 When things don't work there is usually a few things that commonly
76 should be done.
77 1) make includes
78 This should be done automatically by make build.
79 2) cd share/mk && make install
80 Again, automatically done by make build.
81
82 Failsafe rebuild of a small part of the tree:
83 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
84 To make sure you rebuild something correctly you want to do
85 something like the following:
86 1) Make sure the includes and .mk files are up to date.
87 2) Make sure any program used to build the particular
88 utility is up to date. (yacc, lex, etc...)
89 3) cd ...path/to/util...
90 make cleandir
91 rm ...all obj directories...
92 make cleandir # yes, again
93 make obj
94 make depend && make
95
96 Failsafe rebuild of the entire tree:
97 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
98 If you really want to make sure the source tree is clean and
99 ready for a build try the following. Note that sourcing /etc/mk.conf
100 (a make(1) Makefile) in this manner is not right, and will not work
101 for anyone who uses any make(1) features in /etc/mk.conf.
102
103 ---cut here---
104 #!/bin/sh
105 . /etc/mk.conf
106
107 if [ -z $BSDSRCDIR ] ; then
108 BSDSRCDIR=/usr/src
109 fi
110 if [ \! -d $BSDSRCDIR ] ; then
111 echo Unable to find sources
112 exit 1
113 fi
114 find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
115
116 if [ -z $BSDOBJDIR ] ; then
117 BSDOBJDIR=/usr/obj
118 fi
119 if [ -d $BSDOBJDIR ] ; then
120 rm -rf $BSDOBJDIR
121 fi
122
123 cd $BSDSRCDIR && make cleandir
124
125 ---cut here---
126
127 Critical utilities:
128 ^^^^^^^^^^^^^^^^^^^
129 gnu/usr.bin/egcs
130 usr.bin/compile_et
131 usr.bin/make
132 usr.bin/yacc
133 usr.bin/lex
134 usr.sbin/config
135
136 Other problems and possibly solutions:
137 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
138 Symptom:Unreasonable compiler errors.
139 Fix: Rebuild gnu/usr.bin/egcs
140
141 Symptom:Complaints involving a Makefile.
142 Fix: Make sure .mk files are up to date.
143 cd share/mk && make install
144 Fix: Rebuild usr.bin/make
145
146 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
147 Fix: Rebuild usr.sbin/config
148
149 Symptom:
150 Fix: Rebuild usr.bin/yacc
151
152 Symptom:
153 Fix: Rebuild usr.bin/lex
154
155 Symptom:
156 Fix: rm /usr/lib/libbfd.a
157
158 Symptom:Obsolete intermediate files are used during compilation
159 Fix: Try the following sequence of commands in the directory in question.
160 make cleandir; rm `make print-objdir`; make cleandir; make obj
161 (If you built the tree without "make obj" in the past, obsolete files
162 may remain. The command tries to clean everything up)
163
164 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
165 Fix: Rebuild and install usr.bin/menuc
166