bsd.README revision 1.125
1#	$NetBSD: bsd.README,v 1.125 2003/07/22 06:53:21 lukem Exp $
2#	@(#)bsd.README	8.2 (Berkeley) 4/2/94
3
4This is the README file for the new make "include" files for the BSD
5source tree.  The files are installed in /usr/share/mk, and are, by
6convention, named with the suffix ".mk".
7
8Note, this file is not intended to replace reading through the .mk
9files for anything tricky.
10
11=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
12
13RANDOM THINGS WORTH KNOWING:
14
15The files are simply C-style #include files, and pretty much behave like
16you'd expect.  The syntax is slightly different in that a single '.' is
17used instead of the hash mark, i.e. ".include <bsd.prog.mk>".
18
19One difference that will save you lots of debugging time is that inclusion
20of the file is normally done at the *end* of the Makefile.  The reason for
21this is because .mk files often modify variables and behavior based on the
22values of variables set in the Makefile.  To make this work, remember that
23the FIRST target found is the target that is used, i.e. if the Makefile has:
24
25	a:
26		echo a
27	a:
28		echo a number two
29
30the command "make a" will echo "a".  To make things confusing, the SECOND
31variable assignment is the overriding one, i.e. if the Makefile has:
32
33	a=	foo
34	a=	bar
35
36	b:
37		echo ${a}
38
39the command "make b" will echo "bar".  This is for compatibility with the
40way the V7 make behaved.
41
42It's fairly difficult to make the BSD .mk files work when you're building
43multiple programs in a single directory.  It's a lot easier to split up the
44programs than to deal with the problem.  Most of the agony comes from making
45the "obj" directory stuff work right, not because we switched to a new version
46of make.  So, don't get mad at us, figure out a better way to handle multiple
47architectures so we can quit using the symbolic link stuff.  (Imake doesn't
48count.)
49
50The file .depend in the source directory is expected to contain dependencies
51for the source files.  This file is read automatically by make after reading
52the Makefile.
53
54The variable DESTDIR works as before.  It's not set anywhere but will change
55the tree where the file gets installed.
56
57The profiled libraries are no longer built in a different directory than
58the regular libraries.  A new suffix, ".po", is used to denote a profiled
59object, and ".so" denotes a shared (position-independent) object.
60
61There are various make variables used during the build.  Basic rule for
62the variable naming scheme is as follows:
63
64MKxxx		Can be set to "no" by a user to disable functionality.
65		Usually defaults to "yes".
66
67NOxxx		If defined, disables a feature.
68		Not intended for users.
69		This is to allow Makefiles to disable functionality
70		that they don't support (such as missing man pages).
71		NOxxx variables must be defined before <bsd.own.mk>
72		is included.
73
74The following variables that control how things are made/installed that
75are not set by default. These should not be set by Makefiles; they're for
76the user to define in MAKECONF (see bsd.own.mk, below) or on the make(1)
77command line:
78
79BUILD 		If defined, 'make install' checks that the targets in the
80		source directories are up-to-date and remakes them if they
81                are out of date, instead of blindly trying to install
82                out of date or non-existent targets.
83
84MKBFD		If "no", don't build libbfd, libiberty, or any of the things
85		that depend on them (binutils/gas/ld, gdb, dbsym, mdsetimage).
86		Default: yes
87
88MKCATPAGES	If "no", don't build or install the catman pages.
89		Default: yes
90
91MKCRYPTO	If "no", no cryptography support will be built into the system,
92		and also acts as MKKERBEROS=no.
93		Default: yes
94
95MKCRYPTO_IDEA	If not "no", IDEA support will be built into libcrypto_idea.a.
96		Default: no
97
98MKCRYPTO_MDC2	If not "no", MDC2 support will be built into libcrypto_mdc2.a
99		Default: no
100
101MKCRYPTO_RC5	If not "no", RC5 support will be built into libcrypto_rc5.a.
102		Default: no
103
104MKDOC		If "no", don't build or install the documentation.
105		Default: yes
106
107MKDYNAMICROOT	If "no", build programs in /bin and /sbin statically,
108		don't install certain libraries in /lib, and don't
109		install the shared linker into /libexec.
110		Default: yes
111
112MKGCC		If "no", don't build gcc or any of the gcc-related
113		libraries (libg2c, libgcc, libobjc, libstdc++).
114		Default: yes
115
116MKGDB		If "no", don't build gdb.
117		Default: yes
118
119MKHESIOD	If "no", disables building of Hesiod infrastructure
120		(libraries and support programs).
121		Default: yes
122
123MKHOSTOBJ	If "yes", for programs intended to be run on the compile host,
124		the name, release, and architecture of the host operating
125		system will be suffixed to the name of the object directory
126		created by "make obj".
127		Default: no
128
129MKHTML		If "no", don't build or install the html man pages.
130		Default: yes
131
132MKIEEEFP	If "no", don't add code for IEEE754/IEC60559 conformance.
133		Has no effect on most platforms.
134		Default: yes
135
136MKINFO		If "no", don't build or install Info documentation from
137		Texinfo source files.
138		Default: yes
139
140MKKERBEROS	If "no", disables building of Kerberos (v4 or v5)
141		infrastructure (libraries and support programs).
142		Default: yes
143
144MKLINKLIB	If "no", act as "MKPICINSTALL=no MKPROFILE=no".
145		Also:
146			- don't install the .a libraries
147			- don't install _pic.a libraries on PIC systems
148			- don't build .a libraries on PIC systems
149			- don't install the .so symlink on ELF systems
150		I.e, only install the shared library (and the .so.major
151		symlink on ELF).
152		Default: yes
153
154MKLINT		If "no", don't build or install the lint libraries.
155		Default: yes
156
157MKMAN		If "no", don't build or install the man or catman pages,
158		and also acts as "MKCATPAGES=no MKHTML=no"
159		Default: yes
160
161MKMANZ		If not "no", compress manual pages at installation time.
162		Default: no
163
164MKNLS		If "no", don't build or install the NLS files and locale
165		definition files.
166		Default: yes
167
168MKOBJ		If "no", don't enable the rule which creates objdirs,
169		and also acts as "MKOBJDIRS=no"
170		Default: yes
171
172MKOBJDIRS	If "no", don't create objdirs during a "make build".
173		Default: no
174
175MKPIC		If "no", don't build or install shared libraries, and
176		also acts as "MKPICLIB=no"
177		Default: yes, except for ${MACHINE_ARCH} == "sh3"
178
179MKPICINSTALL	If "no", don't install the *_pic.a libraries.
180		Default: yes
181
182MKPICLIB	If "no", don't build *_pic.a libraries, and build the
183		shared object libraries from the .a libraries.
184		A symlink is installed in ${DESTDIR}/usr/lib for the
185		_pic.a library pointing to the .a library.
186		Default: yes
187
188MKPROFILE	If "no", don't build or install the profiling libraries.
189		Default: yes
190
191MKSHARE		If "no", act as "MKCATPAGES=no MKDOC=no MKHTML=no MKINFO=no
192		MKMAN=no MKNLS=no".
193		I.e, don't build catman pages, documentation, Info
194		documentation, man pages, NLS files, ...
195		Default: yes
196
197MKSKEY		If "no", disables building of S/key authentication
198		infrastructure (libraries and support programs).
199		Default: yes
200
201MKSOFTFLOAT	If not "no", build with options to enable the compiler to
202		generate output containing library calls for floating
203		point and possibly soft-float library support.
204		Default: no
205
206MKUNPRIVED	If not "no", don't set the owner/group/mode when installing
207		files or directories, and keep a metadata log of what
208		the owner/group/mode should be.  This allows a
209		non-root "make install".
210		Default: no
211
212MKUPDATE 	If not "no", 'make install' only installs targets that are
213		more recently modified in the source directories that their
214		installed counterparts.
215		Default: no
216
217MKYP		If "no", disables building of YP (NIS)
218		infrastructure (libraries and support programs).
219		Default: yes
220
221USE_HESIOD	If set to "no", disables building Hesiod support into
222		various system utilities/libraries that support it.
223		If MKHESIOD is set to "no", USE_HESIOD will also be
224		forced to "no".
225
226USE_KERBEROS	If set to "no", disables building Kerberos (v4 or v5)
227		support into various system utilities/libraries that
228		support it.  If MKKERBEROS is set to "no", USE_KERBEROS
229		will also be forced to "no".
230
231USE_SKEY	If set to "no", disables building S/key authentication
232		support into various system utilities/libraries that
233		support it.  If MKSKEY is set to "no", USE_SKEY will
234		also be forced to "no".
235
236USE_YP		If set to "no", disables building YP (NIS) support into
237		various system utilities/libraries that support it.  If
238		MKYP is set to "no", USE_YP will also be forced to "no".
239
240
241=-=-=-=-=   sys.mk   =-=-=-=-=
242
243The include file <sys.mk> has the default rules for all makes, in the BSD
244environment or otherwise.  You probably don't want to touch this file.
245If you intend to run a cross build, you will need to supply the following
246host tools, and configure the following variables properly:
247
248OBJCOPY		objcopy - copy and translate object files
249
250STRIP		strip - Discard symbols from object files
251
252
253=-=-=-=-=   bsd.own.mk   =-=-=-=-=
254
255The include file <bsd.own.mk> contains source tree configuration parameters,
256such as the owners, groups, etc. for both manual pages and binaries, and
257a few global "feature configuration" parameters.
258
259It has no targets.
260
261To get system-specific configuration parameters, bsd.own.mk will try to
262include the file specified by the "MAKECONF" variable.  If MAKECONF is not
263set, or no such file exists, the system make configuration file, /etc/mk.conf
264is included.  These files may define any of the variables described below.
265
266bsd.own.mk sets the following variables, if they are not already defined
267(defaults are in brackets):
268
269NETBSDSRCDIR	Top of the NetBSD source tree.
270		If _SRC_TOP_ != "", that will be used as the default,
271		otherwise BSDSRCDIR will be used as the default.
272		Various makefiles within the NetBSD source tree will
273		use this to reference the top level of the source tree.
274
275_SRC_TOP_	Top of the system source tree, as determined by <bsd.own.mk>
276		based on the presence of tools/ and build.sh.  This variable
277		is "internal" to <bsd.own.mk>, although its value is only
278		determined once and then propagated to all sub-makes.
279
280BSDSRCDIR	The real path to the system sources, so that 'make obj'
281		will work correctly.  [/usr/src]
282
283BSDOBJDIR	The real path to the system 'obj' tree, so that 'make obj'
284		will work correctly.  [/usr/obj]
285
286BINGRP		Binary group.  [wheel]
287
288BINOWN		Binary owner.  [root]
289
290BINMODE		Binary mode.  [555]
291
292NONBINMODE	Mode for non-executable files.  [444]
293
294MANDIR		Base path for manual installation.  [/usr/share/man/cat]
295
296MANGRP		Manual group.  [wheel]
297
298MANOWN		Manual owner.  [root]
299
300MANMODE		Manual mode.  [${NONBINMODE}]
301
302MANINSTALL	Manual installation type: maninstall, catinstall, or both
303
304LDSTATIC	Control program linking; if set blank, link everything
305		dynamically. If set to "-static", link everything statically.
306		If not set, programs link according to their makefile.
307
308LIBDIR		Base path for library installation.  [/usr/lib]
309
310LINTLIBDIR	Base path for lint(1) library installation.  [/usr/libdata/lint]
311
312LIBGRP		Library group.  [${BINGRP}]
313
314LIBOWN		Library owner.  [${BINOWN}]
315
316LIBMODE		Library mode.  [${NONBINMODE}]
317
318DOCDIR		Base path for system documentation (e.g. PSD, USD, etc.)
319	        installation.  [/usr/share/doc]
320
321HTMLDOCDIR	Base path for html system documentation installation.
322		[/usr/share/doc/html]
323
324DOCGRP		Documentation group.  [wheel]
325
326DOCOWN		Documentation owner.  [root]
327
328DOCMODE		Documentation mode.  [${NONBINMODE}]
329
330NLSDIR		Base path for Native Language Support files installation.
331		[/usr/share/nls]
332
333NLSGRP		Native Language Support files group.  [wheel]
334
335NLSOWN		Native Language Support files owner.  [root]
336
337NLSMODE		Native Language Support files mode.  [${NONBINMODE}]
338
339STRIPFLAG	The flag passed to the install program to cause the binary
340		to be stripped.  This is to be used when building your
341		own install script so that the entire system can be made
342		stripped/not-stripped using a single knob.  [-s]
343
344COPY		The flag passed to the install program to cause the binary
345		to be copied rather than moved.  This is to be used when
346		building our own install script so that the entire system
347		can either be installed with copies, or with moves using
348		a single knob.  [-c]
349
350Additionally, the following variables may be set by bsd.own.mk or in a
351make configuration file to modify the behaviour of the system build
352process (default values are in brackets along with comments, if set by
353bsd.own.mk):
354
355OBJECT_FMT	Object file format.  [set to "ELF" on architectures that
356		use ELF -- currently if ${MACHINE_ARCH} is "alpha",
357		"mipsel", "mipseb", "powerpc", "sparc", "sparc64",
358		"i386" and some m68k machines, or set to "a.out" on
359		other architectures].
360
361TOOLCHAIN_MISSING
362		If "yes", this indicates that the platform being built
363		does not have a working in-tree toolchain.  If the
364		MACHINE_ARCH in question falls into this category, the
365		variable is conditionally assigned the value "yes".
366		Otherwise, the variable is unconditionally assigned the
367		value "no".
368
369		If TOOLCHAIN_MISSING is "yes", the variables MKBFD, MKGCC,
370		and MKGDB are unconditionally assigned the value "no".
371
372EXTERNAL_TOOLCHAIN
373		This variable is not directly set by <bsd.own.mk>, but
374		including <bsd.own.mk> is the canonical way to gain
375		access to this variable.  The variable should be defined
376		either in the user's environment or in the user's mk.conf
377		file.  If defined, this variable indicates the root of
378		an external toolchain which will be used to build the
379		tree.  For example, if a platform is a TOOLCHAIN_MISSING
380		platform, EXTERNAL_TOOLCHAIN can be used to re-enable the
381		cross-compile framework.
382
383		If EXTERNAL_TOOLCHAIN is defined, the variable MKGCC is
384		unconditionally assigned the value "no", since the external
385		version of the compiler may not be able to build the library
386		components of the in-tree compiler.
387
388		NOTE: This variable is not yet used in as many places as
389		it should be.  Expect the exact semantics of this variable
390		to change in the short term as parts of the cross-compile
391		framework continue to be cleaned up.
392
393bsd.own.mk is generally useful when building your own Makefiles so that
394they use the same default owners etc. as the rest of the tree.
395
396
397=-=-=-=-=   bsd.files.mk   =-=-=-=-=
398
399The include file <bsd.files.mk> handles the FILES variables and is included
400from bsd.lib.mk and bsd.prog.mk, and uses the following variables:
401
402FILES		The list of files to install.
403
404FILESOWN	File owner.  [${BINOWN}]
405
406FILESGRP	File group.  [${BINGRP}]
407
408FILESMODE	File mode.  [${BINMODE}]
409
410FILESDIR	The location to install the files.
411
412FILESNAME	Optional name to install each file as.
413
414FILESDIR.<fn>	The location to install the specific file <fn>.
415
416FILESNAME.<fn>	Optional name to install <fn> as.
417
418
419=-=-=-=-=   bsd.gcc.mk   =-=-=-=-=
420
421The include file <bsd.gcc.mk> computes various parameters related to GCC
422support libraries.  It defines no targets.  <bsd.own.mk> MUST be included
423before bsd.gcc.mk.
424
425The primary users of bsd.gcc.mk are <bsd.prog.mk> and <bsd.lib.mk>, each
426of which need to know where to find certain GCC support libraries.
427
428The behavior of bsd.gcc.mk is influenced by the EXTERNAL_TOOLCHAIN variable,
429which is generally set by the user.  If EXTERNAL_TOOLCHAIN it set, then
430the compiler is asked where to find the support libraries, otherwise the
431support libraries are found in ${DESTDIR}/usr/lib.
432
433bsd.gcc.mk sets the following variables:
434
435_GCC_CRTBEGIN	The full path name to crtbegin.o.
436
437_GCC_CRTBEGINS	The full path name to crtbeginS.o.
438
439_GCC_CRTEND	The full path name to crtend.o.
440
441_GCC_CRTENDS	The full path name to crtendS.o.
442
443_GCC_LIBGCCDIR	The directory where libgcc.a is located.
444
445
446=-=-=-=-=   bsd.inc.mk   =-=-=-=-=
447
448The include file <bsd.inc.mk> defines the includes target and uses two
449variables:
450
451INCS		The list of include files.
452
453INCSDIR		The location to install the include files.
454
455INCSNAME	Target name of the include file, if only one; same as
456		FILESNAME, but for include files.
457
458INCSNAME_<file>	The name file <file> should be installed as, if not <file>,
459		same as FILESNAME_<file>, but for include files.
460
461
462=-=-=-=-=   bsd.info.mk   =-=-=-=-=
463
464The include file <bsd.info.mk> is used to generate and install GNU Info
465documentation from respective Texinfo source files.  It defines three
466implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the
467following variables:
468
469TEXINFO		List of Texinfo source files.  Info documentation will
470		consist of single files with the extension replaced by
471		.info.
472
473INFOFLAGS	Flags to pass to makeinfo.  []
474
475
476=-=-=-=-=   bsd.kernobj.mk   =-=-=-=-=
477
478The include file <bsd.kernobj.mk> defines variables related to the
479location of kernel sources and object directories.
480
481KERNSRCDIR	Is the location of the top of the kernel src.
482		[${_SRC_TOP_}/sys]
483
484KERNARCHDIR	Is the location of the machine dependent kernel sources.
485		[arch/${MACHINE}]
486
487KERNCONFDIR	Is where the configuration files for kernels are found.
488		[${KERNSRCDIR}/${KERNARCHDIR}/conf]
489
490KERNOBJDIR	Is the kernel build directory.  The kernel GENERIC for
491		instance will be compiled in ${KERNOBJDIR}/GENERIC.
492		The default value is
493		${MAKEOBJDIRPREFIX}${KERNSRCDIR}/${KERNARCHDIR}/compile
494		if it exists or the target 'obj' is being made.
495		Otherwise the default is
496		${KERNSRCDIR}/${KERNARCHDIR}/compile.
497
498It is important that Makefiles (such as those under src/distrib) that
499wish to find compiled kernels use bsd.kernobj.mk and ${KERNOBJDIR}
500rather than make assumptions about the location of the compiled kernel.
501
502
503=-=-=-=-=   bsd.kinc.mk   =-=-=-=-=
504
505The include file <bsd.kinc.mk> defines the many targets (includes,
506subdirectories, etc.), and is used by kernel makefiles to handle
507include file installation.  It is intended to be included alone, by
508kernel Makefiles.  Please see bsd.kinc.mk for more details, and keep
509the documentation in that file up to date.
510
511
512=-=-=-=-=   bsd.lib.mk   =-=-=-=-=
513
514The include file <bsd.lib.mk> has support for building libraries.  It has
515the same eight targets as <bsd.prog.mk>: all, clean, cleandir, depend,
516includes, install, lint, and tags.  Additionally, it has a checkver target
517which checks for installed shared object libraries whose version is greater
518that the version of the source. It has a limited number of suffixes,
519consistent with the current needs of the BSD tree.  bsd.lib.mk includes
520<bsd.shlib.mk> to get shared library parameters.
521
522It sets/uses the following variables:
523
524LIB		The name of the library to build.
525
526LIBDIR		Target directory for libraries.
527
528SHLIBINSTALLDIR	Target directory for shared libraries if ${USE_SHLIBDIR}
529		is "yes".
530
531USE_SHLIBDIR	If "yes", use ${SHLIBINSTALLDIR} instead of ${LIBDIR}
532		as the path to install shared libraries to.
533		USE_SHLIBDIR must be defined before <bsd.own.mk> is included.
534
535LINTLIBDIR	Target directory for lint libraries.
536
537LIBGRP		Library group.
538
539LIBOWN		Library owner.
540
541LIBMODE		Library mode.
542
543LDADD		Additional loader objects.
544
545MAN		The manual pages to be installed (use a .1 - .9 suffix).
546
547NOCHECKVER_<library>
548NOCHECKVER	If set, disables checking for installed shared object
549		libraries with versions greater than the source.  A
550		particular library name, without the "lib" prefix, may
551		be appended to the variable name to disable the check for
552		only that library.
553
554SRCS		List of source files to build the library.  Suffix types
555		.s, .c, and .f are supported.  Note, .s files are preferred
556		to .c files of the same name.  (This is not the default for
557		versions of make.)
558
559The include file <bsd.lib.mk> includes the file named "../Makefile.inc"
560if it exists, as well as the include file <bsd.man.mk>.
561
562It has rules for building profiled objects; profiled libraries are
563built by default.
564
565Libraries are ranlib'd when made.
566
567
568=-=-=-=-=   bsd.links.mk   =-=-=-=-=
569
570The include file <bsd.links.mk> handles the LINKS and SYMLINKS variables
571and is included from from bsd.lib.mk and bsd.prog.mk.
572
573
574=-=-=-=-=   bsd.man.mk   =-=-=-=-=
575
576The include file <bsd.man.mk> handles installing manual pages and their
577links.
578
579It has a two targets:
580
581	maninstall:
582		Install the manual page sources and their links.
583	catinstall:
584		Install the preformatted manual pages and their links.
585
586It sets/uses the following variables:
587
588MANDIR		Base path for manual installation.
589
590MANGRP		Manual group.
591
592MANOWN		Manual owner.
593
594MANMODE		Manual mode.
595
596MANSUBDIR	Subdirectory under the manual page section, i.e. "/vax"
597		or "/tahoe" for machine specific manual pages.
598
599MAN		The manual pages to be installed (use a .1 - .9 suffix).
600
601MLINKS		List of manual page links (using a .1 - .9 suffix).  The
602		linked-to file must come first, the linked file second,
603		and there may be multiple pairs.  The files are soft-linked.
604
605The include file <bsd.man.mk> includes a file named "../Makefile.inc" if
606it exists.
607
608
609=-=-=-=-=   bsd.obj.mk   =-=-=-=-=
610
611The include file <bsd.obj.mk> defines targets related to the creation
612and use of separated object and source directories.
613
614If an environment variable named MAKEOBJDIRPREFIX is set, make(1) uses
615${MAKEOBJDIRPREFIX}${.CURDIR} as the name of the object directory if
616it exists.  Otherwise make(1) looks for the existence of a
617subdirectory (or a symlink to a directory) of the source directory
618into which built targets should be placed.  If an environment variable
619named MAKEOBJDIR is set, make(1) uses its value as the name of the
620object directory; failing that, make first looks for a subdirectory
621named "obj.${MACHINE}", and if that doesn't exist, it looks for "obj".
622
623Object directories are not created automatically by make(1) if they
624don't exist; you need to run a separate "make obj".  (This will happen
625during a top-level build if "MKOBJDIRS" is set to a value other than
626"no").  When the source directory is a subdirectory of ${BSDSRCDIR} --
627and this is determined by a simple string prefix comparison -- object
628directories are created in a separate object directory tree, and a
629symlink to the object directory in that tree is created in the source
630directory; otherwise, "make obj" assumes that you're not in the main
631source tree and that it's not safe to use a separate object tree.
632
633Several variables used by <bsd.obj.mk> control exactly what
634directories and links get created during a "make obj":
635
636MAKEOBJDIR	If set, this is the component name of the object
637		directory.
638
639OBJMACHINE	If this is set but MAKEOBJDIR is not set, creates
640		object directories or links named "obj.${MACHINE}";
641		otherwise, just creates ones named "obj".
642
643USR_OBJMACHINE  If set, and the current directory is a subdirectory of
644		${BSDSRCDIR}, create object directory in the
645		corresponding subdirectory of ${BSDOBJDIR}.${MACHINE};
646		otherwise, create it in the corresponding subdirectory
647		of ${BSDOBJDIR}
648
649BUILDID		If set, the contents of this variable are appended
650		to the object directory name.  If OBJMACHINE is also
651		set, ".${BUILDID}" is added after ".${MACHINE}".
652
653
654=-=-=-=-=   bsd.prog.mk   =-=-=-=-=
655
656The include file <bsd.prog.mk> handles building programs from one or
657more source files, along with their manual pages.  It has a limited number
658of suffixes, consistent with the current needs of the BSD tree.  bsd.prog.mk
659includes <bsd.shlib.mk> to get shared library parameters.
660
661It has eight targets:
662
663	all:
664		build the program and its manual page.  This also
665		creates a GDB initialization file (.gdbinit) in
666		the objdir.  The .gdbinit file sets the shared library
667		prefix to ${DESTDIR} to facilitate cross-debugging.
668	clean:
669		remove the program, any object files and the files a.out,
670		Errs, errs, mklog, and ${PROG}.core.
671	cleandir:
672		remove all of the files removed by the target clean, as
673		well as .depend, tags, and any manual pages.
674		`distclean' is a synonym for `cleandir'.
675	depend:
676		make the dependencies for the source files, and store
677		them in the file .depend.
678	includes:
679		install any header files.
680	install:
681		install the program and its manual pages; if the Makefile
682		does not itself define the target install, the targets
683		beforeinstall and afterinstall may also be used to cause
684		actions immediately before and after the install target
685		is executed.
686	lint:
687		run lint on the source files
688	tags:
689		create a tags file for the source files.
690
691It sets/uses the following variables:
692
693BINGRP		Binary group.
694
695BINOWN		Binary owner.
696
697BINMODE		Binary mode.
698
699CLEANFILES	Additional files to remove for the clean and cleandir targets.
700
701COPTS		Additional flags to the compiler when creating C objects.
702
703COPTS.<fn>	Additional flags to the compiler when creating the
704		C objects for <fn>.
705		For <fn>.[ly], "<fn>.c" must be used.
706
707CPUFLAGS	Additional flags to the compiler/assembler to select
708		CPU instruction set options, CPU tuning options, etc.
709
710CPUFLAGS.<fn>	Additional flags to the compiler/assembler for <fn>.
711		For <fn>.[ly], "<fn>.c" must be used.
712
713CPPFLAGS	Additional flags to the C pre-processor.
714
715CPPFLAGS.<fn>	Additional flags to the C pre-processor for <fn>.
716		For <fn>.[ly], "<fn>.c" must be used.
717
718GDBINIT		List of GDB initialization files to add to "source"
719		directives in the .gdbinit file that is created in the
720		objdir.
721
722LDADD		Additional loader objects.  Usually used for libraries.
723		For example, to load with the compatibility and utility
724		libraries, use:
725
726			LDADD+=-lutil -lcompat
727
728LDFLAGS		Additional loader flags.
729
730LINKS		The list of binary links; should be full pathnames, the
731		linked-to file coming first, followed by the linked
732		file.  The files are hard-linked.  For example, to link
733		/bin/test and /bin/[, use:
734
735			LINKS=	${DESTDIR}/bin/test ${DESTDIR}/bin/[
736
737SYMLINKS	The list of symbolic links; should be full pathnames.
738                Syntax is identical to LINKS. Note that DESTDIR is not
739		automatically included in the link.
740
741MAN		Manual pages (should end in .1 - .9).  If no MAN variable is
742		defined, "MAN=${PROG}.1" is assumed.
743
744PROG		The name of the program to build.  If not supplied, nothing
745		is built.
746
747PROG_CXX	If defined, the name of the program to build.  Also
748		causes <bsd.prog.mk> to link the program with the C++
749		compiler rather than the C compiler.  PROG_CXX overrides
750		the value of PROG if PROG is also set.
751
752PROGNAME	The name that the above program will be installed as, if
753		different from ${PROG}.
754
755SRCS		List of source files to build the program.  If SRCS is not
756		defined, it's assumed to be ${PROG}.c.
757
758DPSRCS		List of source files which are needed for generating
759		dependencies, but are not needed in ${SRCS}.
760
761DPADD		Additional dependencies for the program.  Usually used for
762		libraries.  For example, to depend on the compatibility and
763		utility libraries use:
764
765			DPADD+=${LIBCOMPAT} ${LIBUTIL}
766
767		The following libraries are predefined for DPADD:
768
769		LIBCRT0?=	${DESTDIR}/usr/lib/crt0.o
770		LIBBZ2?=	${DESTDIR}/usr/lib/libbz2.a
771		LIBC?=		${DESTDIR}/usr/lib/libc.a
772		LIBC_PIC?=	${DESTDIR}/usr/lib/libc_pic.a
773		LIBCDK?=	${DESTDIR}/usr/lib/libcdk.a
774		LIBCOM_ERR?=	${DESTDIR}/usr/lib/libcom_err.a
775		LIBCOMPAT?=	${DESTDIR}/usr/lib/libcompat.a
776		LIBCRYPT?=	${DESTDIR}/usr/lib/libcrypt.a
777		LIBCRYPTO?=	${DESTDIR}/usr/lib/libcrypto.a
778		LIBCRYPTO_IDEA?=${DESTDIR}/usr/lib/libcrypto_idea.a
779		LIBCRYPTO_MDC2?=${DESTDIR}/usr/lib/libcrypto_mdc2.a
780		LIBCRYPTO_RC5?=	${DESTDIR}/usr/lib/libcrypto_rc5.a
781		LIBCURSES?=	${DESTDIR}/usr/lib/libcurses.a
782		LIBDBM?=	${DESTDIR}/usr/lib/libdbm.a
783		LIBDES?=	${DESTDIR}/usr/lib/libdes.a
784		LIBEDIT?=	${DESTDIR}/usr/lib/libedit.a
785		LIBEVENT?=	${DESTDIR}/usr/lib/libevent.a
786		LIBFORM?=	${DESTDIR}/usr/lib/libform.a
787		LIBGCC?=	${DESTDIR}/usr/lib/libgcc.a
788		LIBGNUMALLOC?=	${DESTDIR}/usr/lib/libgnumalloc.a
789		LIBGSSAPI?=	${DESTDIR}/usr/lib/libgssapi.a
790		LIBHDB?=	${DESTDIR}/usr/lib/libhdb.a
791		LIBINTL?=	${DESTDIR}/usr/lib/libintl.a
792		LIBIPSEC?=	${DESTDIR}/usr/lib/libipsec.a
793		LIBKADM?=	${DESTDIR}/usr/lib/libkadm.a
794		LIBKADM5CLNT?=	${DESTDIR}/usr/lib/libkadm5clnt.a
795		LIBKADM5SRV?=	${DESTDIR}/usr/lib/libkadm5srv.a
796		LIBKAFS?=	${DESTDIR}/usr/lib/libkafs.a
797		LIBKDB?=	${DESTDIR}/usr/lib/libkdb.a
798		LIBKRB?=	${DESTDIR}/usr/lib/libkrb.a
799		LIBKRB5?=	${DESTDIR}/usr/lib/libkrb5.a
800		LIBKSTREAM?=	${DESTDIR}/usr/lib/libkstream.a
801		LIBKVM?=	${DESTDIR}/usr/lib/libkvm.a
802		LIBL?=		${DESTDIR}/usr/lib/libl.a
803		LIBM?=		${DESTDIR}/usr/lib/libm.a
804		LIBMENU?=	${DESTDIR}/usr/lib/libmenu.a
805		LIBMP?=		${DESTDIR}/usr/lib/libmp.a
806		LIBNTP?=	${DESTDIR}/usr/lib/libntp.a
807		LIBOBJC?=	${DESTDIR}/usr/lib/libobjc.a
808		LIBOSSAUDIO?=	${DESTDIR}/usr/lib/libossaudio.a
809		LIBPC?=		${DESTDIR}/usr/lib/libpc.a
810		LIBPCAP?=	${DESTDIR}/usr/lib/libpcap.a
811		LIBPCI?=	${DESTDIR}/usr/lib/libpci.a
812		LIBPLOT?=	${DESTDIR}/usr/lib/libplot.a
813		LIBPMC?=	${DESTDIR}/usr/lib/libpmc.a
814		LIBPOSIX?=	${DESTDIR}/usr/lib/libposix.a
815		LIBPTHREAD?=	${DESTDIR}/usr/lib/libpthread.a
816		LIBPTHREAD_DBG?=${DESTDIR}/usr/lib/libpthread_dbg.a
817		LIBRESOLV?=	${DESTDIR}/usr/lib/libresolv.a
818		LIBRMT?=	${DESTDIR}/usr/lib/librmt.a
819		LIBROKEN?=	${DESTDIR}/usr/lib/libroken.a
820		LIBRPCSVC?=	${DESTDIR}/usr/lib/librpcsvc.a
821		LIBRT?=		${DESTDIR}/usr/lib/librt.a
822		LIBSKEY?=	${DESTDIR}/usr/lib/libskey.a
823		LIBSS?=		${DESTDIR}/usr/lib/libss.a
824		LIBSSL?=	${DESTDIR}/usr/lib/libssl.a
825		LIBSKEY?=	${DESTDIR}/usr/lib/libskey.a
826		LIBSL?=		${DESTDIR}/usr/lib/libsl.a
827		LIBTERMCAP?=	${DESTDIR}/usr/lib/libtermcap.a
828		LIBUSBHID?=	${DESTDIR}/usr/lib/libusbhid.a
829		LIBUTIL?=	${DESTDIR}/usr/lib/libutil.a
830		LIBWRAP?=	${DESTDIR}/usr/lib/libwrap.a
831		LIBY?=		${DESTDIR}/usr/lib/liby.a
832		LIBZ?=		${DESTDIR}/usr/lib/libz.a
833
834SHAREDSTRINGS	If defined, a new .c.o rule is used that results in shared
835		strings, using xstr(1). Note that this will not work with
836		parallel makes.
837
838STRIPFLAG	The flag passed to the install program to cause the binary
839		to be stripped.
840
841SUBDIR		A list of subdirectories that should be built as well.
842		Each of the targets will execute the same target in the
843		subdirectories.
844
845SCRIPTS		A list of interpreter scripts [file.{sh,csh,pl,awk,...}].
846		These are installed exactly like programs.
847
848SCRIPTSNAME	The name that the above program will be installed as, if
849		different from ${SCRIPTS}. These can be further specialized
850		by setting SCRIPTSNAME_<script>.
851
852FILES		See description of <bsd.files.mk>.
853
854SHLINKDIR	Target directory for shared linker.  See description of
855		<bsd.own.mk> for additional information about this variable.
856
857The include file <bsd.prog.mk> includes the file named "../Makefile.inc"
858if it exists, as well as the include file <bsd.man.mk>.
859
860Some simple examples:
861
862To build foo from foo.c with a manual page foo.1, use:
863
864	PROG=	foo
865
866	.include <bsd.prog.mk>
867
868To build foo from foo.c with a manual page foo.2, add the line:
869
870	MAN=	foo.2
871
872If foo does not have a manual page at all, add the line:
873
874	MKMAN=	no
875
876If foo has multiple source files, add the line:
877
878	SRCS=	a.c b.c c.c d.c
879
880
881=-=-=-=-=   bsd.rpc.mk   =-=-=-=-=
882
883The include file <bsd.rpc.mk> contains a makefile fragment used to
884construct source files built by rpcgen.
885
886The following macros may be defined in makefiles which include
887<bsd.rpc.mk> in order to control which files get built and how they
888are to be built:
889
890RPC_INCS:	construct .h file from .x file
891RPC_XDRFILES:	construct _xdr.c from .x file
892		(for marshalling/unmarshalling data types)
893RPC_SVCFILES:	construct _svc.c from .x file
894		(server-side stubs)
895RPC_SVCFLAGS:	Additional flags passed to builds of RPC_SVCFILES.
896
897RPC_XDIR:	Directory containing .x/.h files
898
899
900=-=-=-=-=   bsd.shlib.mk   =-=-=-=-=
901
902The include file <bsd.shlib.mk> computes parameters for shared library
903installation and use.  It defines no targets.  <bsd.own.mk> MUST be
904included before bsd.shlib.mk.
905
906bsd.own.mk sets the following variables, if they are not already defined
907(defaults are in brackets):
908
909SHLIBINSTALLDIR	If ${USE_SHLIBDIR} is "yes", use ${SHLIBINSTALLDIR} instead of
910		${LIBDIR} as the base path for shared library installation.
911		[/lib]
912
913SHLIBDIR	The path to USE_SHLIBDIR shared libraries to use when building
914		a program.  [/lib for programs in /bin and /sbin, /usr/lib
915		for all others.]
916
917_LIBSODIR	Set to ${SHLIBINSTALLDIR} if ${USE_SHLIBDIR} is "yes",
918		otherwise set to ${LIBDIR}
919
920SHLINKINSTALLDIR Base path for shared linker.  [/libexec]
921
922SHLINKDIR	Path to use for shared linker when building a program.
923		[/libexec for programs in /bin and /sbin, /usr/libexec for
924		all others.]
925
926
927=-=-=-=-=   bsd.subdir.mk   =-=-=-=-=
928
929The include file <bsd.subdir.mk> contains the default targets for building
930subdirectories.  It has the same eight targets as <bsd.prog.mk>: all,
931clean, cleandir, depend, includes, install, lint, and tags.  For all of
932the directories listed in the variable SUBDIR, the specified directory
933will be visited and the target made.  There is also a default target which
934allows the command "make subdir" where subdir is any directory listed in
935the variable SUBDIR.
936
937As a special case, the use of a token .WAIT as an entry in SUBDIR acts
938as a synchronization barrier when multiple make jobs are run; subdirs
939before the .WAIT must complete before any subdirs after .WAIT are
940started.  See make(1) for some caveats on use of .WAIT and other
941special sources.
942
943
944=-=-=-=-=   bsd.sys.mk   =-=-=-=-=
945
946The include file <bsd.sys.mk> is used by <bsd.prog.mk> and
947<bsd.lib.mk>.  It contains overrides that are used when building
948the NetBSD source tree.  For instance, if "PARALLEL" is defined by
949the program/library Makefile, it includes a set of rules for lex and
950yacc that allow multiple lex and yacc targets to be built in parallel.
951
952The following variables are defined to commands to perform the
953appropriate operation, with the default in [brackets].
954(Note that these are overridden in <bsd.own.mk> if USETOOLS=yes):
955
956TOOL_ASN1_COMPILE	ASN1 compiler.  [asn1_compile]
957
958TOOL_CAP_MKDB		Create capability database.  [cap_mkdb]
959
960TOOL_CAT		Concatenate and print files.  [cat]
961
962TOOL_CKSUM		Display file checksums.  [cksum]
963
964TOOL_COMPILE_ET		Error table compiler.  [compile_et]
965
966TOOL_CONFIG		Build kernel compilation directories.  [config]
967
968TOOL_CRUNCHGEN		Generate crunched binary build environment.  [crunchgen]
969
970TOOL_CTAGS		Create a tags file.  [ctags]
971
972TOOL_DB			Manipulate db(3) databases.  [db]
973
974TOOL_EQN		Format equations for groff.  [eqn]
975
976TOOL_FGEN		IEEE 1275 Open Firmware FCode Tokenizer.  [fgen]
977
978TOOL_GENCAT		Generate NLS message catalogs.  [gencat]
979
980TOOL_GROFF		Front end for groff document formatting system.  [groff]
981
982TOOL_HEXDUMP		Ascii, decimal, hexadecimal, octal dump.  [hexdump]
983
984TOOL_INDXBIB		Make bibliographic database's inverted index.  [indxbib]
985
986TOOL_INSTALLBOOT	Install disk bootstrap software.  [installboot]
987
988TOOL_INSTALL_INFO	Update info/dir entries.  [install-info]
989
990TOOL_M4			M4 macro language processor.  [m4]
991
992TOOL_MAKEFS		Create file system image from directory tree.  [makefs]
993
994TOOL_MAKEINFO		Translate Texinfo documents.  [makeinfo]
995
996TOOL_MAKEWHATIS		Create a whatis.db database.  [makewhatis]
997
998TOOL_MDSETIMAGE		Set kernel RAM disk image.  [mdsetimage]
999
1000TOOL_MENUC		Menu compiler.  [menuc]
1001
1002TOOL_MKCSMAPPER		Make charset mapping table.  [mkcsmapper]
1003
1004TOOL_MKESDB		Make encoding scheme database.  [mkesdb]
1005
1006TOOL_MKLOCALE		Make LC_CTYPE locale files.  [mklocale]
1007
1008TOOL_MKMAGIC		Create database for file(1).  [file]
1009
1010TOOL_MKTEMP		Make (unique) temporary file name.  [mktemp]
1011
1012TOOL_MSGC		Simple message list compiler.  [msgc]
1013
1014TOOL_MTREE		Map a directory hierarchy.  [mtree]
1015
1016TOOL_PAX		Manipulate file archives and copy directories.  [pax]
1017
1018TOOL_PIC		Compile pictures for groff.  [pic]
1019
1020TOOL_PREPMKBOOTIMAGE	prep-mkbootimage (XXXBUILDSH).  [prep-mkbootimage]
1021
1022TOOL_PWD_MKDB		Generate the password databases.  [pwd_mkdb]
1023
1024TOOL_REFER		Preprocess bibliographic references for groff.  [refer]
1025
1026TOOL_ROFF_ASCII		Generate ASCII groff output.  [nroff]
1027
1028TOOL_ROFF_DVI		Generate DVI groff output.  [${TOOL_GROFF} -Tdvi]
1029
1030TOOL_ROFF_HTML		Generate HTML groff output.
1031			[${TOOL_GROFF} -Tlatin1 -mdoc2html]
1032
1033TOOL_ROFF_PS		Generate PS groff output.  [${TOOL_GROFF} -Tps]
1034
1035TOOL_ROFF_RAW		Generate "raw" groff output.  [${TOOL_GROFF} -Z]
1036
1037TOOL_RPCGEN		Remote Procedure Call (RPC) protocol compiler.  [rpcgen]
1038
1039TOOL_SOELIM		Eliminate .so's from groff input.  [soelim]
1040
1041TOOL_STAT		Display file status.  [stat]
1042
1043TOOL_SUNLABEL		Read or modify a SunOS disk label.  [sunlabel]
1044
1045TOOL_TBL		Format tables for groff.  [tbl]
1046
1047TOOL_UUDECODE		Uudecode a binary file.  [uudecode]
1048
1049TOOL_VGRIND		Grind nice listings of programs.  [vgrind -f]
1050
1051TOOL_ZIC		Time zone compiler.  [zic]
1052
1053
1054Other variables of note (incomplete list):
1055
1056WARNS		Crank up gcc warning options; the distinct levels are:
1057			WARNS=1
1058			WARNS=2
1059			WARNS=3
1060
1061FORMAT_AUDIT	If FORMAT_AUDIT is set, and WFORMAT is set and > 1, turn on
1062WFORMAT 	-Wnetbsd-format-audit for extra-stringent format checking.
1063		WFORMAT belongs in individual makefiles and/or
1064		Makefile.inc files.  (set WFORMAT=1 in individual
1065		makefiles if a program is not security critical and is
1066		doing bizarre things with format strings which would
1067		be even uglier if rewritten) FORMAT_AUDIT should go in
1068		mk.conf if you're doing format-string auditing.
1069		FORMAT_AUDIT may go away in time.
1070
1071=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1072