Home | History | Annotate | Line # | Download | only in src
UPDATING revision 1.45
      1 $NetBSD: UPDATING,v 1.45 2001/10/30 06:05:28 yamt 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 20011030:
     11 	libc/locale/wcstod.c now needs new lint(1). Update lint(1)
     12 	before building libc.
     13 
     14 20011029:
     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 
     26 20011028:
     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 
     35 20011006:
     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 
     42 20011004:
     43 	Crunchgen has been updated to work via reach-over makefiles. Updating
     44 	is suggested before running a snapshot build
     45 
     46 20010915:
     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 
     54 20010803:
     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 
     60 20010803:
     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 
     68 20010731:
     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 
     73 20010726:
     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 
     80 20010718:
     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 
     92 20010628:
     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 
     97 20010226:
     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 
    113 20010219:
    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 
    123 20010204:
    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 
    128 20010114:
    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 
    134 20010101:
    135 	bsd.subdir.mk committed 20001230 had a bug which caused
    136 	afterinstall targets to run too soon; update again.
    137 
    138 20001230:
    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 
    144 20001019:
    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 
    149 20000929:
    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 
    157 Hints 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  
    192 What to do if things don't work:
    193 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    194 When things don't work there is usually a few things that commonly
    195 should 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 
    201 Failsafe rebuild of a small part of the tree:
    202 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    203 To make sure you rebuild something correctly you want to do
    204 something 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 
    215 Failsafe rebuild of the entire tree:
    216 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    217 If you really want to make sure the source tree is clean and
    218 ready 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
    220 for anyone who uses any make(1) features in /etc/mk.conf.
    221 
    222 ---cut here---
    223 #!/bin/sh
    224 . /etc/mk.conf
    225 
    226 if [ -z $BSDSRCDIR ] ; then
    227     BSDSRCDIR=/usr/src
    228 fi
    229 if [ \! -d $BSDSRCDIR ] ; then
    230     echo Unable to find sources
    231     exit 1
    232 fi
    233 find $BSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
    234 
    235 if [ -z $BSDOBJDIR ] ; then
    236     BSDOBJDIR=/usr/obj
    237 fi
    238 if [ -d $BSDOBJDIR ] ; then
    239     rm -rf $BSDOBJDIR
    240 fi
    241 
    242 cd $BSDSRCDIR && make cleandir
    243 
    244 ---cut here---
    245 
    246 Critical 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 
    256 Other problems and possible solutions:
    257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    258 Symptom:Unreasonable compiler errors.
    259 Fix:	Rebuild gnu/usr.bin/egcs
    260 
    261 Symptom:Complaints involving a Makefile.
    262 Fix:	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 
    267 Fix:	Make sure .mk files are up to date.
    268 	cd share/mk && make install
    269 
    270 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
    271 Fix:	Rebuild usr.sbin/config
    272 
    273 Symptom:
    274 Fix:	Rebuild usr.bin/yacc
    275 
    276 Symptom:
    277 Fix:	Rebuild usr.bin/lex
    278 
    279 Symptom:
    280 Fix:	rm /usr/lib/libbfd.a
    281 
    282 Symptom:Obsolete intermediate files are used during compilation
    283 Fix:	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 
    288 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
    289 Fix:	Rebuild and install usr.bin/menuc
    290 
    291 Symptom:mklocale not found during build in share/locale/ctype
    292 Fix:	Build and install usr.bin/mklocale
    293 
    294 Symptom:undefined reference to `__assert13'
    295 Fix:    Rebuild and install lib/libc
    296 
    297 Symptom:usr.sbin/config fails to build.
    298 Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
    299 
    300 Symptom:undefined reference to `getprogname' or `setprogname'
    301 Fix:    Rebuild and install lib/libc
    302 
    303 Symptom:lint does not understand the '-X' option
    304 Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
    305