bsd.README revision 112145
1#	@(#)bsd.README	8.2 (Berkeley) 4/2/94
2# $FreeBSD: head/share/mk/bsd.README 112145 2003-03-12 14:31:36Z ru $
3
4XXX This document is seriously out of date, it is currenly being revised.
5
6This is the README file for the new make "include" files for the BSD
7source tree.  The files are installed in /usr/share/mk, and are, by
8convention, named with the suffix ".mk".
9
10bsd.dep.mk		- handle Makefile dependencies
11bsd.doc.mk		- building troff system documents
12bsd.info.mk		- building GNU Info hypertext system
13bsd.kmod.mk		- building loadable kernel modules
14bsd.lib.mk		- support for building libraries
15bsd.libnames.mk		- define library names
16bsd.man.mk		- installing manual pages and their links
17bsd.obj.mk		- creating 'obj' directories and cleaning up
18bsd.own.mk		- define common variables
19bsd.port.mk		- building ports
20bsd.port.subdir.mk	- targets for building subdirectories for ports
21bsd.prog.mk		- building programs from source files
22bsd.subdir.mk		- targets for building subdirectories
23
24
25Note, this file is not intended to replace reading through the .mk
26files for anything tricky.
27
28See also make(1), mkdep(1) and `PMake - A Tutorial', 
29located in /usr/share/doc/psd/12.make.
30
31=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
32
33RANDOM THINGS WORTH KNOWING:
34
35The files are simply C-style #include files, and pretty much behave like
36you'd expect.  The syntax is slightly different in that a single '.' is
37used instead of the hash mark, i.e. ".include <bsd.prog.mk>".
38
39One difference that will save you lots of debugging time is that inclusion
40of the file is normally done at the *end* of the Makefile.  The reason for
41this is because .mk files often modify variables and behavior based on the
42values of variables set in the Makefile.  To make this work, remember that
43the FIRST target found is the target that is used, i.e. if the Makefile has:
44
45	a:
46		echo a
47	a:
48		echo a number two
49
50the command "make a" will echo "a".  To make things confusing, the SECOND
51variable assignment is the overriding one, i.e. if the Makefile has:
52
53	a=	foo
54	a=	bar
55
56	b:
57		echo ${a}
58
59the command "make b" will echo "bar".  This is for compatibility with the
60way the V7 make behaved.
61
62It's fairly difficult to make the BSD .mk files work when you're building
63multiple programs in a single directory.  It's a lot easier split up the
64programs than to deal with the problem.  Most of the agony comes from making
65the "obj" directory stuff work right, not because we switch to a new version
66of make.  So, don't get mad at us, figure out a better way to handle multiple
67architectures so we can quit using the symbolic link stuff.  (Imake doesn't
68count.)
69
70The file .depend in the source directory is expected to contain dependencies
71for the source files.  This file is read automatically by make after reading
72the Makefile.
73
74The variable DESTDIR works as before.  It's not set anywhere but will change
75the tree where the file gets installed.
76
77The profiled libraries are no longer built in a different directory than
78the regular libraries.  A new suffix, ".po", is used to denote a profiled
79object.
80
81=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
82
83The include file <sys.mk> has the default rules for all makes, in the BSD
84environment or otherwise.  You probably don't want to touch this file.
85
86=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
87
88The include file <bsd.man.mk> handles installing manual pages and their
89links.
90
91It has three targets:
92
93	all-man:
94		build manual pages.
95	maninstall:
96		install the manual pages and their links.
97	manlint:
98		verify the validity of manual pages.
99
100It sets/uses the following variables:
101
102MANDIR		Base path for manual installation.
103
104MANGRP		Manual group.
105
106MANOWN		Manual owner.
107
108MANMODE		Manual mode.
109
110MANSUBDIR	Subdirectory under the manual page section, i.e. "/vax"
111		or "/tahoe" for machine specific manual pages.
112
113MAN		The manual pages to be installed (use a .1 - .9 suffix).
114
115MLINKS		List of manual page links (using a .1 - .9 suffix).  The
116		linked-to file must come first, the linked file second,
117		and there may be multiple pairs.  The files are soft-linked.
118
119The include file <bsd.man.mk> includes a file named "../Makefile.inc" if
120it exists.
121
122=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
123
124The include file <bsd.own.mk> contains the owners, groups, etc. for both
125manual pages and binaries.
126
127It has no targets.
128
129It sets/uses the following variables:
130
131BINGRP		Binary group.
132
133BINOWN		Binary owner.
134
135BINMODE		Binary mode.
136
137STRIP		The flag passed to the install program to cause the binary
138		to be stripped.  This is to be used when building your
139		own install script so that the entire system can be made
140		stripped/not-stripped using a single nob.
141
142MANDIR		Base path for manual installation.
143
144MANGRP		Manual group.
145
146MANOWN		Manual owner.
147
148MANMODE		Manual mode.
149
150This file is generally useful when building your own Makefiles so that
151they use the same default owners etc. as the rest of the tree.
152
153=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
154
155The include file <bsd.prog.mk> handles building programs from one or
156more source files, along with their manual pages.  It has a limited number
157of suffixes, consistent with the current needs of the BSD tree.
158
159It has seven targets:
160
161	all:
162		build the program and its manual page
163	clean:
164		remove the program, any object files and the files a.out,
165		Errs, errs, mklog, and ${PROG}.core.
166	cleandir:
167		remove all of the files removed by the target clean, as
168		well as .depend, tags, and any manual pages.
169	depend:
170		make the dependencies for the source files, and store
171		them in the file .depend.
172	install:
173		install the program and its manual pages; if the Makefile
174		does not itself define the target install, the targets
175		beforeinstall and afterinstall may also be used to cause
176		actions immediately before and after the install target
177		is executed.
178	lint:
179		run lint on the source files
180	tags:
181		create a tags file for the source files.
182
183It sets/uses the following variables:
184
185BINGRP		Binary group.
186
187BINOWN		Binary owner.
188
189BINMODE		Binary mode.
190
191CLEANFILES	Additional files to remove and
192CLEANDIRS	additional directories to remove during clean and cleandir
193		targets.  "rm -f" and "rm -rf" used respectively.
194
195COPTS		Additional flags to the compiler when creating C objects.
196
197FILES		A list of non-executable files.
198		The installation is controlled by the FILESNAME, FILESOWN,
199		FILESGRP, FILESMODE, FILESDIR variables that can be
200		further specialized by FILES<VAR>_<file>.
201
202HIDEGAME	If HIDEGAME is defined, the binary is installed in
203		/usr/games/hide, and a symbolic link is created to
204		/usr/games/dm.
205
206LDADD		Additional loader objects.  Usually used for libraries.
207		For example, to load with the compatibility and utility
208		libraries, use:
209
210			LDFILES=-lutil -lcompat
211
212LDFLAGS		Additional loader flags.
213
214LINKS		The list of binary links; should be full pathnames, the
215		linked-to file coming first, followed by the linked
216		file.  The files are hard-linked.  For example, to link
217		/bin/test and /bin/[, use:
218
219			LINKS=	${DESTDIR}/bin/test ${DESTDIR}/bin/[
220
221MAN		Manual pages (should end in .1 - .9).  If no MAN variable
222		is defined, "MAN=${PROG}.1" is assumed.
223
224PROG		The name of the program to build.  If not supplied, nothing
225		is built.
226
227PROG_CXX	If defined, the name of the program to build.  Also
228		causes <bsd.prog.mk> to link the program with the
229		standard C++ library.  PROG_CXX overrides the value
230		of PROG if PROG is also set.
231
232PROGNAME	The name that the above program will be installed as, if
233		different from ${PROG}.
234
235SRCS		List of source files to build the program.  If SRCS is not
236		defined, it's assumed to be ${PROG}.c or, if PROG_CXX is
237		defined, ${PROG_CXX}.cc.
238
239DPADD		Additional dependencies for the program.  Usually used for
240		libraries.  For example, to depend on the compatibility and
241		utility libraries use:
242
243			SRCLIB=${LIBCOMPAT} ${LIBUTIL}
244
245		There is a predefined identifier for each (non-profiled,
246		non-shared) library and object.  Library file names are
247		transformed to identifiers by removing the extension and
248		converting to upper case.
249
250		There are no special identifiers for profiled or shared
251		libraries or objects.  The identifiers for the standard
252		libraries are used in DPADD.  This works correctly iff all
253		the libraries are built at the same time.  Unfortunately,
254		it causes unnecessary relinks to shared libraries when
255		only the static libraries have changed.  Dependencies on
256		shared libraries should be only on the library version
257		numbers.
258
259STRIP		The flag passed to the install program to cause the binary
260		to be stripped.
261
262SUBDIR		A list of subdirectories that should be built as well.
263		Each of the targets will execute the same target in the
264		subdirectories.
265
266SCRIPTS		A list of interpreter scripts [file.{sh,csh,pl,awk,...}].
267		The installation is controlled by the SCRIPTSNAME, SCRIPTSOWN,
268		SCRIPTSGRP, SCRIPTSMODE, SCRIPTSDIR variables that can be
269		further specialized by SCRIPTS<VAR>_<script>.
270
271The include file <bsd.prog.mk> includes the file named "../Makefile.inc"
272if it exists, as well as the include file <bsd.man.mk>.
273
274Some simple examples:
275
276To build foo from foo.c with a manual page foo.1, use:
277
278	PROG=	foo
279
280	.include <bsd.prog.mk>
281
282To build foo from foo.c with a manual page foo.2, add the line:
283
284	MAN2=	foo.2
285
286If foo does not have a manual page at all, add the line:
287
288	NOMAN=	noman
289
290If foo has multiple source files, add the line:
291
292	SRCS=	a.c b.c c.c d.c
293
294=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
295
296The include file <bsd.subdir.mk> contains the default targets for building
297subdirectories.  It has the same seven targets as <bsd.prog.mk>: all, clean,
298cleandir, depend, install, lint, and tags.  For all of the directories
299listed in the variable SUBDIRS, the specified directory will be visited
300and the target made.  There is also a default target which allows the
301command "make subdir" where subdir is any directory listed in the variable
302SUBDIRS.
303
304=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
305
306The include file <bsd.lib.mk> has support for building libraries.  It has
307the same seven targets as <bsd.prog.mk>: all, clean, cleandir, depend,
308install, lint, and tags.  It has a limited number of suffixes, consistent
309with the current needs of the BSD tree.
310
311It sets/uses the following variables:
312
313LIBDIR		Target directory for libraries.
314
315LINTLIBDIR	Target directory for lint libraries.
316
317LIBGRP		Library group.
318
319LIBOWN		Library owner.
320
321LIBMODE		Library mode.
322
323LDADD		Additional loader objects.
324
325MAN		The manual pages to be installed (use a .1 - .9 suffix).
326
327SRCS		List of source files to build the library.  Suffix types
328		.s, .c, and .f are supported.  Note, .s files are preferred
329		to .c files of the same name.  (This is not the default for
330		versions of make.)
331
332The include file <bsd.lib.mk> includes the file named "../Makefile.inc"
333if it exists, as well as the include file <bsd.man.mk>.
334
335It has rules for building profiled objects; profiled libraries are
336built by default.
337
338Libraries are ranlib'd before installation.
339