Annotation of src/share/mk/bsd.README, Revision 1.66
1.66 ! espie 1: # $OpenBSD: bsd.README,v 1.65 2016/07/04 18:01:44 guenther Exp $
1.8 deraadt 2: # $NetBSD: bsd.README,v 1.17 1996/04/13 02:08:08 thorpej Exp $
1.1 deraadt 3: # @(#)bsd.README 5.1 (Berkeley) 5/11/90
4:
5: This is the README file for the new make "include" files for the BSD
6: source tree. The files are installed in /usr/share/mk, and are, by
7: convention, named with the suffix ".mk".
1.17 espie 8:
9: bsd.dep.mk - handle Makefile dependencies
10: bsd.lib.mk - support for building libraries
11: bsd.man.mk - installing manual pages and their links
12: bsd.obj.mk - creating 'obj' directories and cleaning up
13: bsd.own.mk - define common variables
14: bsd.port.mk - building ports
1.46 espie 15: bsd.port.arch.mk - glue for building ports with MD stuff
1.17 espie 16: bsd.port.subdir.mk - targets for building subdirectories for ports
17: bsd.prog.mk - building programs from source files
1.30 provos 18: bsd.regress.mk - regression tests
19: bsd.subdir.mk - targets for building subdirectories
1.17 espie 20: bsd.sys.mk - building bsd from the source tree
1.1 deraadt 21:
22: Note, this file is not intended to replace reading through the .mk
23: files for anything tricky.
24:
25: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
26:
27: RANDOM THINGS WORTH KNOWING:
28:
29: The files are simply C-style #include files, and pretty much behave like
30: you'd expect. The syntax is slightly different in that a single '.' is
31: used instead of the hash mark, i.e. ".include <bsd.prog.mk>".
32:
33: One difference that will save you lots of debugging time is that inclusion
34: of the file is normally done at the *end* of the Makefile. The reason for
35: this is because .mk files often modify variables and behavior based on the
36: values of variables set in the Makefile. To make this work, remember that
37: the FIRST target found is the target that is used, i.e. if the Makefile has:
38:
39: a:
40: echo a
41: a:
42: echo a number two
43:
44: the command "make a" will echo "a". To make things confusing, the SECOND
45: variable assignment is the overriding one, i.e. if the Makefile has:
46:
47: a= foo
48: a= bar
49:
50: b:
51: echo ${a}
52:
53: the command "make b" will echo "bar". This is for compatibility with the
54: way the V7 make behaved.
55:
1.23 espie 56: To make things even more confusing, make uses lazy evaluation. All
57: variables are expanded only when needed. Which means that, in
58:
59: a= foo
60:
61: b: $(a)
62: echo $(.ALLSRC)
63: echo $(a)
64:
65: foo:
66: touch foo
67:
68: a= bar
69:
70: the command "make b" will echo "foo"; echo "bar". The first $(a) means
71: "foo", because it's needed to generate the dependency rule when it's read,
72: but the second $(a) is only expanded when needed, at which point a contains
73: bar.
74:
1.1 deraadt 75: It's fairly difficult to make the BSD .mk files work when you're building
1.16 espie 76: multiple programs in a single directory. It's a lot easier to split up the
1.1 deraadt 77: programs than to deal with the problem. Most of the agony comes from making
1.16 espie 78: the "obj" directory stuff work right, not because we switched to a new version
1.1 deraadt 79: of make. So, don't get mad at us, figure out a better way to handle multiple
80: architectures so we can quit using the symbolic link stuff. (Imake doesn't
81: count.)
82:
1.66 ! espie 83: Dependencies are handled using the compiler's -M* options, resulting in
! 84: lots of .d files. These are manually included through bsd.dep.mk.
1.1 deraadt 85:
86: The variable DESTDIR works as before. It's not set anywhere but will change
87: the tree where the file gets installed.
88:
89: The profiled libraries are no longer built in a different directory than
90: the regular libraries. A new suffix, ".po", is used to denote a profiled
91: object.
92:
93: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
94:
95: The include file <sys.mk> has the default rules for all makes, in the BSD
96: environment or otherwise. You probably don't want to touch this file.
97:
98: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
99:
100: The include file <bsd.man.mk> handles installing manual pages and their
101: links.
102:
103: It has a single target:
104:
105: maninstall:
106: Install the manual pages and their links.
107:
108: It sets/uses the following variables:
109:
110: MANDIR Base path for manual installation.
111:
112: MANGRP Manual group.
113:
114: MANOWN Manual owner.
115:
116: MANMODE Manual mode.
117:
1.64 deraadt 118: MANSUBDIR Subdirectory under the manual page section, i.e. "amd64"
119: or "sparc64" for machine specific manual pages.
1.1 deraadt 120:
1.4 niklas 121: MAN The manual pages to be installed (use a .1 - .9 suffix).
1.1 deraadt 122:
1.4 niklas 123: MLINKS List of manual page links (using a .1 - .9 suffix). The
1.1 deraadt 124: linked-to file must come first, the linked file second,
125: and there may be multiple pairs. The files are soft-linked.
1.40 espie 126:
127: BEFOREMAN List of extra targets that must be already built before the
128: man target can be run. Those targets must be real files (and
129: not .PHONY targets).
1.1 deraadt 130:
131: The include file <bsd.man.mk> includes a file named "../Makefile.inc" if
132: it exists.
133:
134: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
135:
1.8 deraadt 136: The include file <bsd.own.mk> contains source tree configuration parameters,
137: such as the owners, groups, etc. for both manual pages and binaries, and
138: a few global "feature configuration" parameters.
1.1 deraadt 139:
140: It has no targets.
141:
1.8 deraadt 142: To get system-specific configuration parameters, bsd.own.mk will try to
143: include the file specified by the "MAKECONF" variable. If MAKECONF is not
144: set, or no such file exists, the system make configuration file, /etc/mk.conf
145: is included. These files may define any of the variables described below.
146:
147: bsd.own.mk sets the following variables, if they are not already defined
148: (defaults are in brackets):
1.4 niklas 149:
150: BSDSRCDIR The real path to the system sources, so that 'make obj'
151: will work correctly. [/usr/src]
152:
153: BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj'
154: will work correctly. [/usr/obj]
155:
156: BINGRP Binary group. [bin]
157:
1.10 deraadt 158: BINOWN Binary owner. [root]
1.4 niklas 159:
160: BINMODE Binary mode. [555]
161:
162: NONBINMODE Mode for non-executable files. [444]
163:
1.23 espie 164: DIRMODE Mode for new directories. [755]
165:
1.45 schwarze 166: MANDIR Base path for manual installation. [/usr/share/man/man]
1.4 niklas 167:
168: MANGRP Manual group. [bin]
169:
1.18 millert 170: MANOWN Manual owner. [root]
1.4 niklas 171:
172: MANMODE Manual mode. [${NONBINMODE}]
173:
174: LIBDIR Base path for library installation. [/usr/lib]
175:
176: LIBGRP Library group. [${BINGRP}]
177:
178: LIBOWN Library owner. [${BINOWN}]
179:
180: LIBMODE Library mode. [${NONBINMODE}]
181:
1.44 jmc 182: DOCDIR Base path for system documentation
1.4 niklas 183: installation. [/usr/share/doc]
184:
185: DOCGRP Documentation group. [bin]
186:
1.18 millert 187: DOCOWN Documentation owner. [root]
1.4 niklas 188:
189: DOCMODE Documentation mode. [${NONBINMODE}]
1.1 deraadt 190:
1.15 millert 191: INSTALL_STRIP The flag passed to the install program to cause the binary
1.1 deraadt 192: to be stripped. This is to be used when building your
193: own install script so that the entire system can be made
1.15 millert 194: stripped/not-stripped using a single knob. Note that
195: INSTALL_STRIP is not set if ${DEBUG} is defined. [-s]
1.1 deraadt 196:
1.15 millert 197: INSTALL_COPY The old usage of this flag is obsolescent since install(1)
198: now copies by default. However, it can also be used to
199: specify that a file not be copied unless it is different
200: (via the -p option). See install(1) for details. This
201: is to be used when building our own install script so
202: that the entire system can either be installed with copies,
203: or copy-if-different using a single knob. [-c]
1.4 niklas 204:
1.8 deraadt 205: Additionally, the following variables may be set by bsd.own.mk or in a
206: make configuration file to modify the behaviour of the system build
207: process (default values are in brackets along with comments, if set by
208: bsd.own.mk):
1.23 espie 209:
1.4 niklas 210: SKEY Compile in support for S/key authentication. [yes, set
211: unconditionally]
212:
213: SYS_INCLUDE Copy or symlink kernel include files into /usr/include.
214: Possible values are "symlinks" or "copies" (which is
215: the same as the variable being unset).
1.1 deraadt 216:
1.28 brad 217: NOPROFILE Do not build profiled versions of system libraries.
1.1 deraadt 218:
1.4 niklas 219: NOPIC Do not build PIC versions of system libraries, and
1.28 brad 220: do not build shared libraries.
1.48 pascal 221:
222: NOPIE Do not build PIE objects or executables.
1.1 deraadt 223:
1.22 niklas 224: DEBUG Add -g to assembly, C compiler and linking passes. Also
225: doesn't set STRIP to -s per default if defined.
1.27 espie 226:
227: WARNINGS Adds appropriate warning flags (defined in CDIAGFLAGS,
228: e.g., -Wall...) to compiles. [no]
1.19 millert 229:
230: SUDO Command to run when doing "make install" portion of
1.63 gsoares 231: "make build". If set to /usr/bin/doas, this allows one
232: to run "make build" as a user other than root (assuming
233: doas is setup for that user).
1.19 millert 234:
235: PIPE If set to "-pipe" gcc will be given the -pipe option
236: which can speed up compiles on machines with memory
237: to spare. Instead of using temp files, gcc uses pipes
238: for the temporary data.
1.20 kstailey 239:
240: GLOBAL_AUTOCONF_CACHE
241: Set to the name of a file that all cached GNU autoconf
242: test results will be saved in. Reduces redundant tests.
1.23 espie 243: Be careful! Redundant tests may not be redundant if you
244: are installing substantially updated gnu programs.
1.1 deraadt 245:
1.8 deraadt 246: bsd.own.mk is generally useful when building your own Makefiles so that
1.1 deraadt 247: they use the same default owners etc. as the rest of the tree.
248:
249: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
250:
251: The include file <bsd.prog.mk> handles building programs from one or
252: more source files, along with their manual pages. It has a limited number
253: of suffixes, consistent with the current needs of the BSD tree.
254:
1.58 schwarze 255: It has seven targets:
1.1 deraadt 256:
257: all:
258: build the program and its manual page
259: clean:
260: remove the program, any object files and the files a.out,
261: Errs, errs, mklog, and core.
262: cleandir:
263: remove all of the files removed by the target clean, as
264: well as .depend, tags, and any manual pages.
265: depend:
1.66 ! espie 266: Misnomer as dependencies are built on-the-fly during make all.
! 267: Still used by a few directories needing some configuration
! 268: before make all.
1.8 deraadt 269: includes:
270: install any header files.
1.1 deraadt 271: install:
272: install the program and its manual pages; if the Makefile
273: does not itself define the target install, the targets
274: beforeinstall and afterinstall may also be used to cause
275: actions immediately before and after the install target
276: is executed.
277: tags:
278: create a tags file for the source files.
279:
280: It sets/uses the following variables:
281:
282: BINGRP Binary group.
283:
284: BINOWN Binary owner.
285:
286: BINMODE Binary mode.
287:
1.66 ! espie 288: BUILDFIRST Stuff that needs to be built before anything else, in
! 289: terms of dependencies.
! 290:
! 291: BUILDLATER Stuff that comes later (usually don't touch, defined correctly
! 292: by <bsd.prog.mk> and <bsd.lib.mk>)
! 293:
1.1 deraadt 294: CLEANFILES Additional files to remove for the clean and cleandir targets.
295:
296: COPTS Additional flags to the compiler when creating C objects.
297:
298: LDADD Additional loader objects. Usually used for libraries.
1.53 deraadt 299: For example, to load with the crypto and utility
1.1 deraadt 300: libraries, use:
301:
1.53 deraadt 302: LDADD+=-lutil -lcrypto
1.1 deraadt 303:
304: LDFLAGS Additional loader flags.
305:
306: LINKS The list of binary links; should be full pathnames, the
307: linked-to file coming first, followed by the linked
308: file. The files are hard-linked. For example, to link
309: /bin/test and /bin/[, use:
310:
311: LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[
312:
1.4 niklas 313: MAN Manual pages (should end in .1 - .9). If no MAN variable is
1.1 deraadt 314: defined, "MAN=${PROG}.1" is assumed.
315:
316: PROG The name of the program to build. If not supplied, nothing
317: is built.
318:
1.6 mickey 319: SRCS List of source files to build the program. If it's not
1.1 deraadt 320: defined, it's assumed to be ${PROG}.c.
321:
322: DPADD Additional dependencies for the program. Usually used for
1.53 deraadt 323: libraries. For example, to depend on the crypto and
1.1 deraadt 324: utility libraries use:
325:
1.53 deraadt 326: DPADD+=${LIBCRYPTO} ${LIBUTIL}
1.1 deraadt 327:
328: The following libraries are predefined for DPADD:
329:
1.31 espie 330: LIBC /usr/lib/libc.a
331: LIBCRYPTO /usr/lib/libcrypto.a
1.1 deraadt 332: LIBCURSES /usr/lib/libcurses.a
1.26 millert 333: LIBEDIT /usr/lib/libedit.a
1.32 millert 334: LIBEVENT /usr/lib/libevent.a
1.42 miod 335: LIBEXPAT /usr/lib/libexpat.a
336: LIBFORM /usr/lib/libform.a
337: LIBFORMW /usr/lib/libformw.a
1.26 millert 338: LIBKEYNOTE /usr/lib/libkeynote.a
1.1 deraadt 339: LIBKVM /usr/lib/libkvm.a
1.26 millert 340: LIBL /usr/lib/libl.a
1.1 deraadt 341: LIBM /usr/lib/libm.a
1.42 miod 342: LIBMENU /usr/lib/libmenu.a
343: LIBMENUW /usr/lib/libmenuw.a
1.60 yasuoka 344: LIBRADIUS /usr/lib/libradius.a
1.42 miod 345: LIBOSSAUDIO /usr/lib/libossaudio.a
346: LIBPANEL /usr/lib/libpanel.a
347: LIBPANELW /usr/lib/libpanelw.a
1.31 espie 348: LIBPCAP /usr/lib/libpcap.a
1.21 millert 349: LIBPERL /usr/lib/libperl.a
1.42 miod 350: LIBPTHREAD /usr/lib/libpthread.a
1.26 millert 351: LIBRPCSVC /usr/lib/librpcsvc.a
352: LIBSKEY /usr/lib/libskey.a
1.42 miod 353: LIBSNDIO /usr/lib/libsndio.a
1.26 millert 354: LIBSSL /usr/lib/libssl.a
1.9 tholo 355: LIBTERMCAP /usr/lib/libtermcap.a
356: LIBTERMLIB /usr/lib/libtermlib.a
1.59 jsing 357: LIBTLS /usr/lib/libtls.a
1.31 espie 358: LIBUSB /usr/lib/libusbhid.a
1.1 deraadt 359: LIBUTIL /usr/lib/libutil.a
1.31 espie 360: LIBY /usr/lib/liby.a
1.13 deraadt 361: LIBZ /usr/lib/libz.a
1.31 espie 362: LIBARCH arch-dependent stuff
1.1 deraadt 363:
364: STRIP The flag passed to the install program to cause the binary
365: to be stripped.
366:
367: SUBDIR A list of subdirectories that should be built as well.
368: Each of the targets will execute the same target in the
369: subdirectories.
370:
371: The include file <bsd.prog.mk> includes the file named "../Makefile.inc"
372: if it exists, as well as the include file <bsd.man.mk>.
373:
374: Some simple examples:
375:
376: To build foo from foo.c with a manual page foo.1, use:
377:
378: PROG= foo
379:
380: .include <bsd.prog.mk>
381:
382: To build foo from foo.c with a manual page foo.2, add the line:
383:
384: MAN= foo.2
385:
386: If foo does not have a manual page at all, add the line:
387:
388: NOMAN= noman
389:
390: If foo has multiple source files, add the line:
391:
392: SRCS= a.c b.c c.c d.c
393:
394: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
395:
396: The include file <bsd.subdir.mk> contains the default targets for building
1.58 schwarze 397: subdirectories. It has the same seven targets as <bsd.prog.mk>: all,
1.47 jsg 398: clean, cleandir, depend, includes, install, and tags. For all of
1.41 jmc 399: the directories listed in the variable SUBDIR, the specified directory
1.8 deraadt 400: will be visited and the target made. There is also a default target which
401: allows the command "make subdir" where subdir is any directory listed in
1.41 jmc 402: the variable SUBDIR.
1.2 deraadt 403:
404: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
405:
406: The include file <bsd.sys.mk> is used by <bsd.prog.mk> and
1.3 deraadt 407: <bsd.lib.mk>. It contains overrides that are used when building
1.14 millert 408: the OpenBSD source tree. For instance, if "PARALLEL" is defined by
1.3 deraadt 409: the program/library Makefile, it includes a set of rules for lex and
410: yacc that allow multiple lex and yacc targets to be built in parallel.
1.1 deraadt 411:
412: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
413:
414: The include file <bsd.lib.mk> has support for building libraries. It has
1.58 schwarze 415: the same seven targets as <bsd.prog.mk>: all, clean, cleandir, depend,
1.47 jsg 416: includes, install, and tags. It has a limited number of suffixes,
1.8 deraadt 417: consistent with the current needs of the BSD tree.
1.1 deraadt 418:
419: It sets/uses the following variables:
1.66 ! espie 420:
! 421: BUILDFIRST/BUILDLATER
! 422: See <bsd.prog.mk>
1.1 deraadt 423:
424: LIB The name of the library to build.
425:
426: LIBDIR Target directory for libraries.
427:
428: LIBGRP Library group.
429:
430: LIBOWN Library owner.
431:
432: LIBMODE Library mode.
433:
434: LDADD Additional loader objects.
435:
1.4 niklas 436: MAN The manual pages to be installed (use a .1 - .9 suffix).
1.1 deraadt 437:
438: SRCS List of source files to build the library. Suffix types
439: .s, .c, and .f are supported. Note, .s files are preferred
440: to .c files of the same name. (This is not the default for
441: versions of make.)
442:
443: The include file <bsd.lib.mk> includes the file named "../Makefile.inc"
444: if it exists, as well as the include file <bsd.man.mk>.
445:
446: It has rules for building profiled objects; profiled libraries are
447: built by default.
448:
449: Libraries are ranlib'd when made.
1.52 guenther 450:
451: In addition, a reduced version of a library, including just specific
452: objects that are compiled with additional options to reduce their
453: size may be built. This is used by the distrib/ tree and crunchgen
454: when building ramdisks. This sets/uses the following variables:
455:
456: DIST_LIB The path of the library to build. [lib${LIB}_d.a]
457:
458: DIST_OBJS The (sub)set of .o files to include in ${DIST_LIB}. [${OBJS}]
459:
460: DIST_CFLAGS Additional flags for the C compiler and assembler.
461: [-Os]
1.6 mickey 462: