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