Commit | Line | Data |
---|---|---|
4968147e | 1 | # @(#)bsd.README 5.2 (Berkeley) %G% |
d81b6f64 KB |
2 | |
3 | This is the README file for the new make "include" files for the BSD | |
4 | source tree. The files are installed in /usr/share/mk, and are, by | |
5 | convention, named with the suffix ".mk". Each ".mk" file has a | |
6 | corresponding ".rd" file which is an explanation of the ".mk" file. | |
7 | ||
8 | Note, this file is not intended to replace reading through the .mk | |
9 | files for anything tricky. | |
10 | ||
11 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
12 | ||
13 | RANDOM THINGS WORTH KNOWING: | |
14 | ||
15 | The files are simply C-style #include files, and pretty much behave like | |
16 | you'd expect. The syntax is slightly different in that a single '.' is | |
17 | used instead of the hash mark, i.e. ".include <bsd.prog.mk>". | |
18 | ||
19 | One difference that will save you lots of debugging time is that inclusion | |
20 | of the file is normally done at the *end* of the Makefile. The reason for | |
21 | this is because .mk files often modify variables and behavior based on the | |
22 | values of variables set in the Makefile. To make this work, remember that | |
23 | the 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 | ||
30 | the command "make a" will echo "a". To make things confusing, the SECOND | |
31 | variable 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 | ||
39 | the command "make b" will echo "bar". This is for compatibility with the | |
40 | way the V7 make behaved. | |
41 | ||
42 | It's fairly difficult to make the BSD .mk files work when you're building | |
43 | multiple programs in a single directory. It's a lot easier split up the | |
44 | programs than to deal with the problem. Most of the agony comes from making | |
45 | the "obj" directory stuff work right, not because we switch to a new version | |
46 | of make. So, don't get mad at us, figure out a better way to handle multiple | |
47 | architectures so we can quit using the symbolic link stuff. (Imake doesn't | |
48 | count.) | |
49 | ||
50 | The file .depend in the source directory is expected to contain dependencies | |
51 | for the source files. This file is read automatically by make after reading | |
52 | the Makefile. | |
53 | ||
54 | The variable DESTDIR works as before. It's not set anywhere but will change | |
55 | the tree where the file gets installed. | |
56 | ||
57 | The profiled libraries are no longer built in a different directory than | |
58 | the regular libraries. A new suffix, ".po", is used to denote a profiled | |
59 | object. | |
60 | ||
61 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
62 | ||
63 | The include file <sys.mk> has the default rules for all makes, in the BSD | |
64 | environment or otherwise. You probably don't want to touch this file. | |
65 | ||
66 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
67 | ||
68 | The include file <bsd.man.mk> handles installing manual pages and their | |
69 | links. | |
70 | ||
71 | It has a single target: | |
72 | ||
73 | maninstall: | |
74 | Install the manual pages and their links. | |
75 | ||
76 | It sets/uses the following variables: | |
77 | ||
78 | MANDIR Base path for manual installation. | |
79 | ||
80 | MANGRP Manual group. | |
81 | ||
82 | MANOWN Manual owner. | |
83 | ||
84 | MANMODE Manual mode. | |
85 | ||
86 | MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" | |
87 | or "/tahoe" for machine specific manual pages. | |
88 | ||
89 | MAN1 ... MAN8 The manual pages to be installed (use a .0 suffix). | |
90 | ||
91 | MLINKS List of manual page links (using a .1 - .8 suffix). The | |
92 | linked-to file must come first, the linked file second, | |
93 | and there may be multiple pairs. The files are soft-linked. | |
94 | ||
95 | The include file <bsd.man.mk> includes a file named "../Makefile.inc" if | |
96 | it exists. | |
97 | ||
98 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
99 | ||
100 | The include file <bsd.own.mk> contains the owners, groups, etc. for both | |
101 | manual pages and binaries. | |
102 | ||
103 | It has no targets. | |
104 | ||
105 | It sets/uses the following variables: | |
106 | ||
107 | BINGRP Binary group. | |
108 | ||
109 | BINOWN Binary owner. | |
110 | ||
111 | BINMODE Binary mode. | |
112 | ||
113 | STRIP The flag passed to the install program to cause the binary | |
114 | to be stripped. This is to be used when building your | |
115 | own install script so that the entire system can be made | |
116 | stripped/not-stripped using a single nob. | |
117 | ||
118 | MANDIR Base path for manual installation. | |
119 | ||
120 | MANGRP Manual group. | |
121 | ||
122 | MANOWN Manual owner. | |
123 | ||
124 | MANMODE Manual mode. | |
125 | ||
126 | This file is generally useful when building your own Makefiles so that | |
127 | they use the same default owners etc. as the rest of the tree. | |
128 | ||
129 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
130 | ||
131 | The include file <bsd.prog.mk> handles building programs from one or | |
132 | more source files, along with their manual pages. It has a limited number | |
133 | of suffixes, consistent with the current needs of the BSD tree. | |
134 | ||
135 | It has seven targets: | |
136 | ||
137 | all: | |
138 | build the program and its manual page | |
139 | clean: | |
140 | remove the program, any object files and the files a.out, | |
4968147e | 141 | Errs, errs, mklog, and core.${PROG}. |
d81b6f64 KB |
142 | cleandir: |
143 | remove all of the files removed by the target clean, as | |
144 | well as .depend, tags, and any manual pages. | |
145 | depend: | |
146 | make the dependencies for the source files, and store | |
147 | them in the file .depend. | |
148 | install: | |
149 | install the program and its manual pages; if the Makefile | |
150 | does not itself define the target install, the targets | |
151 | beforeinstall and afterinstall may also be used to cause | |
152 | actions immediately before and after the install target | |
153 | is executed. | |
154 | lint: | |
155 | run lint on the source files | |
156 | tags: | |
157 | create a tags file for the source files. | |
158 | ||
159 | It sets/uses the following variables: | |
160 | ||
161 | BINGRP Binary group. | |
162 | ||
163 | BINOWN Binary owner. | |
164 | ||
165 | BINMODE Binary mode. | |
166 | ||
167 | CLEANFILES Additional files to remove for the clean and cleandir targets. | |
168 | ||
169 | COPTS Additional flags to the compiler when creating C objects. | |
170 | ||
171 | HIDEGAME If HIDEGAME is defined, the binary is installed in | |
172 | /usr/games/hide, and a symbolic link is created to | |
173 | /usr/games/dm. | |
174 | ||
175 | LDADD Additional loader objects. Usually used for libraries. | |
176 | For example, to load with the compatibility and utility | |
177 | libraries, use: | |
178 | ||
179 | LDFILES=-lutil -lcompat | |
180 | ||
181 | LDFLAGS Additional loader flags. | |
182 | ||
183 | LINKS The list of binary links; should be full pathnames, the | |
184 | linked-to file coming first, followed by the linked | |
185 | file. The files are hard-linked. For example, to link | |
186 | /bin/test and /bin/[, use: | |
187 | ||
188 | LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[ | |
189 | ||
190 | MAN1...MAN8 Manual pages (should end in .0). If no MAN variable is | |
191 | defined, "MAN1=${PROG}.0" is assumed. | |
192 | ||
193 | PROG The name of the program to build. If not supplied, nothing | |
194 | is built. | |
195 | ||
196 | SRCS List of source files to build the program. If PROG is not | |
197 | defined, it's assumed to be ${PROG}.c. | |
198 | ||
199 | DPADD Additional dependencies for the program. Usually used for | |
200 | libraries. For example, to depend on the compatibility and | |
201 | utility libraries use: | |
202 | ||
203 | SRCLIB=${LIBCOMPAT} ${LIBUTIL} | |
204 | ||
205 | The following libraries are predefined for DPADD: | |
206 | ||
207 | LIBC /lib/libc.a | |
208 | LIBCOMPAT /usr/lib/libcompat.a | |
209 | LIBCURSES /usr/lib/libcurses.a | |
210 | LIBDBM /usr/lib/libdbm.a | |
211 | LIBDES /usr/lib/libdes.a | |
212 | LIBL /usr/lib/libl.a | |
213 | LIBKDB /usr/lib/libkdb.a | |
214 | LIBKRB /usr/lib/libkrb.a | |
215 | LIBM /usr/lib/libm.a | |
216 | LIBMP /usr/lib/libmp.a | |
217 | LIBPC /usr/lib/libpc.a | |
218 | LIBPLOT /usr/lib/libplot.a | |
219 | LIBRPC /usr/lib/sunrpc.a | |
220 | LIBTERM /usr/lib/libterm.a | |
221 | LIBUTIL /usr/lib/libutil.a | |
222 | ||
223 | SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared | |
224 | strings, using xstr(1). | |
225 | ||
226 | STRIP The flag passed to the install program to cause the binary | |
227 | to be stripped. | |
228 | ||
229 | SUBDIR A list of subdirectories that should be built as well. | |
230 | Each of the targets will execute the same target in the | |
231 | subdirectories. | |
232 | ||
233 | The include file <bsd.prog.mk> includes the file named "../Makefile.inc" | |
234 | if it exists, as well as the include file <bsd.man.mk>. | |
235 | ||
236 | Some simple examples: | |
237 | ||
238 | To build foo from foo.c with a manual page foo.1, use: | |
239 | ||
240 | PROG= foo | |
241 | ||
242 | .include <bsd.prog.mk> | |
243 | ||
244 | To build foo from foo.c with a manual page foo.2, add the line: | |
245 | ||
246 | MAN2= foo.0 | |
247 | ||
248 | If foo does not have a manual page at all, add the line: | |
249 | ||
250 | NOMAN= noman | |
251 | ||
252 | If foo has multiple source files, add the line: | |
253 | ||
254 | SRCS= a.c b.c c.c d.c | |
255 | ||
256 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
257 | ||
258 | The include file <bsd.subdir.mk> contains the default targets for building | |
259 | subdirectories. It has the same seven targets as <bsd.prog.mk>: all, clean, | |
260 | cleandir, depend, install, lint, and tags. For all of the directories | |
261 | listed in the variable SUBDIRS, the specified directory will be visited | |
262 | and the target made. There is also a default target which allows the | |
263 | command "make subdir" where subdir is any directory listed in the variable | |
264 | SUBDIRS. | |
265 | ||
266 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
267 | ||
268 | The include file <bsd.lib.mk> has support for building libraries. It has | |
269 | the same seven targets as <bsd.prog.mk>: all, clean, cleandir, depend, | |
270 | install, lint, and tags. It has a limited number of suffixes, consistent | |
271 | with the current needs of the BSD tree. | |
272 | ||
273 | It sets/uses the following variables: | |
274 | ||
275 | LIBDIR Target directory for libraries. | |
276 | ||
277 | LINTLIBDIR Target directory for lint libraries. | |
278 | ||
279 | LIBGRP Library group. | |
280 | ||
281 | LIBOWN Library owner. | |
282 | ||
283 | LIBMODE Library mode. | |
284 | ||
285 | LDADD Additional loader objects. | |
286 | ||
287 | MAN1 ... MAN8 The manual pages to be installed (use a .0 suffix). | |
288 | ||
289 | SRCS List of source files to build the library. Suffix types | |
290 | .s, .c, and .f are supported. Note, .s files are preferred | |
291 | to .c files of the same name. (This is not the default for | |
292 | versions of make.) | |
293 | ||
294 | The include file <bsd.lib.mk> includes the file named "../Makefile.inc" | |
295 | if it exists, as well as the include file <bsd.man.mk>. | |
296 | ||
297 | It has rules for building profiled objects; profiled libraries are | |
298 | built by default. | |
299 | ||
300 | Libraries are ranlib'd before installation. |