]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/mk/bsd.README
Merge llvm-project release/17.x llvmorg-17.0.3-0-g888437e1b600
[FreeBSD/FreeBSD.git] / share / mk / bsd.README
1
2 This is the README file for the "include" files for the FreeBSD
3 source tree.  The files are installed in /usr/share/mk, and are by
4 convention, named with the suffix ".mk".  These files store several
5 build options and should be handled with caution.
6
7 Note, this file is not intended to replace reading through the .mk
8 files for anything tricky.
9
10 There are two main types of make include files.  One type is the generally
11 usable make include files, such as bsd.prog.mk and bsd.lib.mk.  The other is
12 the internal make include files, such as bsd.files.mk and bsd.man.mk, which
13 can not/should not be used directly but are used by the other make include
14 files.  In most cases it is only interesting to include bsd.prog.mk or
15 bsd.lib.mk.
16
17 bsd.arch.inc.mk         - includes arch-specific Makefile.$arch
18 bsd.compat.mk           - definitions for building programs against compat ABIs
19 bsd.compiler.mk         - defined based on current compiler
20 bsd.confs.mk            - install of configuration files
21 bsd.cpu.mk              - sets CPU/arch-related variables (included from sys.mk)
22 bsd.crunchgen.mk        - building crunched binaries using crunchgen(1)
23 bsd.dep.mk              - handle Makefile dependencies
24 bsd.dirs.mk             - handle directory creation
25 bsd.doc.mk              - building troff system documents
26 bsd.endian.mk           - TARGET_ENDIAN=1234(little) or 4321 (big) for target
27 bsd.files.mk            - install of general purpose files
28 bsd.incs.mk             - install of include files
29 bsd.info.mk             - building GNU Info hypertext system (deprecated)
30 bsd.init.mk             - initialization for the make include files
31 bsd.kmod.mk             - building loadable kernel modules
32 bsd.lib.mk              - support for building libraries
33 bsd.libnames.mk         - define library names
34 bsd.links.mk            - install of links (sym/hard)
35 bsd.man.mk              - install of manual pages and their links
36 bsd.nls.mk              - build and install of NLS catalogs
37 bsd.obj.mk              - creating 'obj' directories and cleaning up
38 bsd.own.mk              - define common variables
39 bsd.port.mk             - building ports
40 bsd.port.post.mk        - building ports
41 bsd.port.pre.mk         - building ports
42 bsd.port.subdir.mk      - targets for building subdirectories for ports
43 bsd.prog.mk             - building programs from source files
44 bsd.progs.mk            - build multiple programs from sources
45 bsd.snmpmod.mk          - building modules for the SNMP daemon bsnmpd
46 bsd.subdir.mk           - targets for building subdirectories
47 bsd.sys.mk              - common settings used for building FreeBSD sources
48 bsd.test.mk             - building test programs from source files
49 sys.mk                  - default rules for all makes
50
51 This file does not document bsd.port*.mk.  They are documented in ports(7).
52
53 See also make(1), mkdep(1), style.Makefile(5) and `PMake - A
54 Tutorial', located in /usr/share/doc/psd/12.make.
55
56 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
57
58 Random things worth knowing about this document:
59
60 If appropriate when documenting the variables the default value is
61 indicated using square brackets e.g. [gzip].
62 In some cases the default value depend on other values (e.g. system
63 architecture).  In these cases the most common value is indicated.
64
65 This document contains some simple examples of the usage of the BSD make
66 include files.  For more examples look at the makefiles in the FreeBSD
67 source tree.
68
69 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
70
71 RANDOM THINGS WORTH KNOWING:
72
73 The files are like C-style #include files, and pretty much behave like
74 you'd expect.  The syntax is slightly different in that a single '.' is
75 used instead of the hash mark, i.e. ".include <bsd.prog.mk>".
76
77 One difference that will save you lots of debugging time is that inclusion
78 of the file is normally done at the *end* of the Makefile.  The reason for
79 this is because .mk files often modify variables and behavior based on the
80 values of variables set in the Makefile.  To make this work, remember that
81 the FIRST target found is the target that is used, i.e. if the Makefile has:
82
83         a:
84                 echo a
85         a:
86                 echo a number two
87
88 the command "make a" will echo "a".  To make things confusing, the SECOND
89 variable assignment is the overriding one, i.e. if the Makefile has:
90
91         a=      foo
92         a=      bar
93
94         b:
95                 echo ${a}
96
97 the command "make b" will echo "bar".  This is for compatibility with the
98 way the V7 make behaved.
99
100 It's fairly difficult to make the BSD .mk files work when you're building
101 multiple programs in a single directory.  It's a lot easier to split up
102 the programs than to deal with the problem.  Most of the agony comes from
103 making the "obj" directory stuff work right, not because we switch to a new
104 version of make.  So, don't get mad at us, figure out a better way to handle
105 multiple architectures so we can quit using the symbolic link stuff.
106 (Imake doesn't count.)
107
108 The file .depend in the source directory is expected to contain dependencies
109 for the source files.  This file is read automatically by make after reading
110 the Makefile.
111
112 The variable DESTDIR works as before.  It's not set anywhere but will change
113 the tree where the file gets installed.
114
115 The profiled libraries are no longer built in a different directory than
116 the regular libraries.  A new suffix, ".po", is used to denote a profiled
117 object, and ".pico" denotes a position-independent relocatable object.
118 ".nossppico" denotes a position-independent relocatable object without
119 stack smashing protection and without sanitizer instrumentation.
120
121 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
122
123 The following variables are common:
124
125 AFLAGS.${SRC}
126                 Flags dependent on source file name.
127 AFLAGS.${.TARGET:T}
128                 Flags dependent on output file name.
129 ACFLAGS.${SRC}
130                 Flags dependent on source file name.
131 ACFLAGS.${.TARGET:T}
132                 Flags dependent on output file name.
133 CFLAGS.${SRC}
134                 Flags dependent on source file name.
135 CFLAGS.${.TARGET:T}
136                 Flags dependent on output file name.
137 CFLAGS.${COMPILER_TYPE}
138                 Flags dependent on compiler added to CFLAGS.
139 CFLAGS.${MACHINE_ARCH}
140                 Architectural flags added to CFLAGS.
141 CFLAGS_NO_SIMD  Add this to CFLAGS for programs that don't want any SIMD
142                 instructions generated. It is setup in bsd.cpu.mk to an
143                 appropriate value for the compiler and target.
144 CXXFLAGS.${COMPILER_TYPE}
145                 Flags dependent on compiler added to CXXFLAGS.
146 CXXFLAGS.${MACHINE_ARCH}
147                 Architectural flags added to CXXFLAGS.
148 CXXFLAGS.${SRC}
149                 Flags dependent on source file name.
150 CXXFLAGS.${.TARGET:T}
151                 Flags dependent on output file name.
152 COMPILER_FEATURES
153                 A list of features that the compiler supports. Zero or
154                 more of:
155                         c++11   Supports full C++ 11 standard.
156
157 COMPILER_TYPE   Type of compiler, either clang or gcc, though other
158                 values are possible. Don't assume != clang == gcc.
159
160 COMPILER_VERSION
161                 A numeric constant equal to:
162                      major * 10000 + minor * 100 + tiny
163                 for the compiler's self-reported version.
164
165 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
166
167 The include file <sys.mk> has the default rules for all makes, in the BSD
168 environment or otherwise.  You probably don't want to touch this file.
169
170 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
171
172 The include file <bsd.arch.inc.mk> includes other Makefiles for specific
173 architectures, if they exist. It will include the first of the following
174 files that it finds: Makefile.${MACHINE}, Makefile.${MACHINE_ARCH},
175 Makefile.${MACHINE_CPUARCH}
176
177 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
178
179 The include file <bsd.man.mk> handles installing manual pages and their
180 links.
181
182 It has three targets:
183
184         all-man:
185                 build manual pages.
186         maninstall:
187                 install the manual pages and their links.
188         manlint:
189                 verify the validity of manual pages.
190
191 It sets/uses the following variables:
192
193 MAN             The manual pages to be installed (use a .1 - .9 suffix).
194
195 MANDIR          Base path for manual installation.
196
197 MANGRP          Manual group.
198
199 MANMODE         Manual mode.
200
201 MANOWN          Manual owner.
202
203 MANSUBDIR       Subdirectory under the manual page section, i.e. "/vax"
204                 or "/tahoe" for machine specific manual pages.
205
206 MLINKS          List of manual page links (using a .1 - .9 suffix).  The
207                 linked-to file must come first, the linked file second,
208                 and there may be multiple pairs.  The files are hard-linked.
209
210 The include file <bsd.man.mk> includes a file named "../Makefile.inc" if
211 it exists.
212
213 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
214
215 The include file <bsd.own.mk> contains the owners, groups, etc. for both
216 manual pages and binaries.
217
218 It has no targets.
219
220 It sets/uses the following variables:
221
222 BINGRP          Binary group.
223
224 BINMODE         Binary mode.
225
226 BINOWN          Binary owner.
227
228 MANDIR          Base path for manual installation.
229
230 MANGRP          Manual group.
231
232 MANMODE         Manual mode.
233
234 MANOWN          Manual owner.
235
236 INSTALL_LINK    Command to install a hard link.
237
238 INSTALL_SYMLINK Command to install a symbolic link.
239
240 INSTALL_RSYMLINK        Command to install a relative symbolic link.
241
242 LINKOWN         Owner of hard links created by INSTALL_LINK.
243
244 LINKGRP         Group of hard links created by INSTALL_LINK.
245
246 LINKMODE        Mode of hard links created by INSTALL_LINK.
247
248 SYMLINKOWN      Owner of hard links created by INSTALL_[R]SYMLINK.
249
250 SYMLINKGRP      Group of hard links created by INSTALL_[R]SYMLINK.
251
252 SYMLINKMODE     Mode of hard links created by INSTALL_[R]SYMLINK.
253
254 This file is generally useful when building your own Makefiles so that
255 they use the same default owners etc. as the rest of the tree.
256
257 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
258
259 The include file <bsd.prog.mk> handles building programs from one or
260 more source files, along with their manual pages.  It has a limited number
261 of suffixes, consistent with the current needs of the BSD tree.
262
263 It has seven targets:
264
265         all:
266                 build the program and its manual page
267         clean:
268                 remove the program and any object files.
269         cleandir:
270                 remove all of the files removed by the target clean, as
271                 well as .depend, tags, and any manual pages.
272         depend:
273                 make the dependencies for the source files, and store
274                 them in the file .depend.
275         install:
276                 install the program and its manual pages; if the Makefile
277                 does not itself define the target install, the targets
278                 beforeinstall and afterinstall may also be used to cause
279                 actions immediately before and after the install target
280                 is executed.
281         tags:
282                 create a tags file for the source files.
283
284 It sets/uses the following variables:
285
286 ACFLAGS         Flags to the compiler when preprocessing and
287                 assembling .S files.
288
289 AFLAGS          Flags to the assembler when assembling .s files.
290
291 BINGRP          Binary group.
292
293 BINMODE         Binary mode.
294
295 BINOWN          Binary owner.
296
297 CFLAGS          Flags to the compiler when creating C objects.
298
299 CLEANDIRS       Additional files (CLEANFILES) and directories (CLEANDIRS) to
300 CLEANFILES      remove during clean and cleandir targets.  "rm -rf" and
301                 "rm -f" are used, respectively.
302
303 DIRS            A list of variables referring to directories.  For example:
304
305                         DIRS+=  FOO
306                         FOO=    /usr/share/foo
307
308                 Owner, Group, Mode and Flags are handled by FOO_OWN,
309                 FOO_GRP, FOO_MODE and FOO_FLAGS, respectively.
310
311                 This allows FILESDIR to be set to FOO, and the directory
312                 will be created before the files are installed and the
313                 dependencies will be set correctly.
314
315 DPADD           Additional dependencies for the program.  Usually used for
316                 libraries.  For example, to depend on the compatibility and
317                 utility libraries use:
318
319                         DPADD=${LIBCOMPAT} ${LIBUTIL}
320
321                 There is a predefined identifier for each (non-profiled,
322                 non-shared) library and object.  Library file names are
323                 transformed to identifiers by removing the extension and
324                 converting to upper case.
325
326                 There are no special identifiers for profiled or shared
327                 libraries or objects.  The identifiers for the standard
328                 libraries are used in DPADD.  This works correctly iff all
329                 the libraries are built at the same time.  Unfortunately,
330                 it causes unnecessary relinks to shared libraries when
331                 only the static libraries have changed.  Dependencies on
332                 shared libraries should be only on the library version
333                 numbers.
334
335 FILES           A list of non-executable files.
336                 The installation is controlled by the FILESNAME, FILESOWN,
337                 FILESGRP, FILESMODE, FILESDIR variables that can be
338                 further specialized by FILES<VAR>_<file>.
339
340 LDADD           Additional loader objects.  Usually used for libraries.
341                 For example, to load with the compatibility and utility
342                 libraries, use:
343
344                         LDADD=-lutil -lcompat
345
346 LDADD.${.TARGET:T}
347                 Loader objects dependent on output file name.
348
349 LDFLAGS         Additional loader flags. Passed to the loader via CC,
350                 since that's used to link programs as well, so loader
351                 specific flags need to be prefixed with -Wl, to work.
352
353 LDFLAGS.${.TARGET:T}
354                 Flags dependent on output file name.
355
356 LIBADD          Additional libraries.  This is for base system libraries
357                 and is only valid inside of the /usr/src tree.
358                 Use LIBADD=name instead of LDADD=-lname.
359
360 LIBADD.${.TARGET:T}
361                 Libraries dependent on output file name.
362
363 LINKS           The list of binary links; should be full pathnames, the
364                 linked-to file coming first, followed by the linked
365                 file.  The files are hard-linked.  For example, to link
366                 /bin/test and /bin/[, use:
367
368                         LINKS=  /bin/test /bin/[
369
370 LINKOWN         Owner of links created with LINKS [${BINOWN}].
371
372 LINKGRP         Group of links created with LINKS [${BINGRP}].
373
374 LINKMODE        Mode of links created with LINKS [${BINMODE}].
375
376
377 MAN             Manual pages.  If no MAN variable is defined,
378                 "MAN=${PROG}.1" is assumed. See bsd.man.mk for more details.
379
380 PROG            The name of the program to build.  If not supplied, nothing
381                 is built.
382
383 PROGNAME        The name that the above program will be installed as, if
384                 different from ${PROG}.
385
386 PROG_CXX        If defined, the name of the program to build.  Also
387                 causes <bsd.prog.mk> to link the program with the
388                 standard C++ library.  PROG_CXX overrides the value
389                 of PROG if PROG is also set.
390
391 PROGS           When used with <bsd.progs.mk>, allow building multiple
392 PROGS_CXX       PROG and PROG_CXX in one Makefile.  To define
393                 individual variables for each program the VAR.prog
394                 syntax should be used.  For example:
395
396                 PROGS=          foo bar
397                 SRCS.foo=       foo_src.c
398                 LDADD.foo=      -lutil
399                 SRCS.bar=       bar_src.c
400
401                 The supported variables are:
402                 - BINDIR
403                 - BINGRP
404                 - BINMODE
405                 - BINOWN
406                 - CFLAGS
407                 - CXXFLAGS
408                 - DEBUG_FLAGS
409                 - DPADD
410                 - DPSRCS
411                 - INTERNALPROG (no installation)
412                 - LDADD
413                 - LDFLAGS
414                 - LIBADD
415                 - LINKS
416                 - MAN
417                 - MLINKS
418                 - MK_WERROR=no
419                 - PROGNAME
420                 - SRCS
421                 - STRIP
422                 - WARNS
423
424 SCRIPTS         A list of interpreter scripts [file.{sh,csh,pl,awk,...}].
425                 The installation is controlled by the SCRIPTSNAME, SCRIPTSOWN,
426                 SCRIPTSGRP, SCRIPTSMODE, SCRIPTSDIR variables that can be
427                 further specialized by SCRIPTS<VAR>_<script>.
428
429 SRCS            List of source files to build the program.  If SRCS is not
430                 defined, it's assumed to be ${PROG}.c or, if PROG_CXX is
431                 defined, ${PROG_CXX}.cc.
432
433 STRIP           The flag passed to the install program to cause the binary
434                 to be stripped.  This is to be used when building your
435                 own install script so that the entire system can be made
436                 stripped/not-stripped using a single nob.
437
438 SUBDIR          A list of subdirectories that should be built as well.
439                 Each of the targets will execute the same target in the
440                 subdirectories.
441
442 The include file <bsd.prog.mk> includes the file named "../Makefile.inc"
443 if it exists, as well as the include file <bsd.man.mk>.
444
445 Some simple examples:
446
447 To build foo from foo.c with a manual page foo.1, use:
448
449         PROG=   foo
450
451         .include <bsd.prog.mk>
452
453 To build foo from foo.c with a manual page foo.2, add the line:
454
455         MAN=    foo.2
456
457 If foo does not have a manual page at all, add the line:
458
459         MAN=
460
461 If foo has multiple source files, add the line:
462
463         SRCS=   a.c b.c c.c d.c
464
465 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
466
467 The include file, <bsd.compat.mk>, allows programs (built with
468 <bsd.prog.mk>) to be built for one the ABI(s) supported by the
469 top-level Makefile.libcompat.  It requires that <bsd.prog.mk> also be
470 included.
471
472 NEED_COMPAT     Build and link targeting a compatibility ABI or fail if it
473                 is not available.  Supported values are "32", "soft", and
474                 "any" being a wildcard.
475
476 WANT_COMPAT     Similar to NEED_COMPAT, but build with the base ABI if
477                 the specified ABI is not available.
478
479 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
480
481 The include file, <bsd.snmpmod.mk>, handles building MIB modules for bsnmpd
482 from one or more source files, along with their manual pages.  It has a
483 limited number of suffixes, consistent with the current needs of the BSD
484 tree.
485
486 bsd.snmpmod.mk leverages bsd.lib.mk for building MIB modules and
487 bsd.files.mk for installing MIB description and definition files.
488
489 It implements the following additional targets:
490
491         smilint:
492                 execute smilint on the MIBs defined by BMIBS.
493
494                 The net-mgmt/libsmi package must be installed before
495                 executing this target. The net-mgmt/net-snmp package
496                 should be installed as well to reduce false positives
497                 from smilint.
498
499 It sets/uses the following variables:
500
501 BMIBS           The MIB definitions to install.
502
503 BMIBSDIR        The directory where the MIB definitions are installed.
504                 This defaults to `${SHAREDIR}/snmp/mibs`.
505
506 DEFS            The MIB description files to install.
507
508 DEFSDIR         The directory where MIB description files are installed.
509                 This defaults to `${SHAREDIR}/snmp/defs`.
510
511 EXTRAMIBDEFS    Extra MIB description files to use as input when
512                 generating ${MOD}_oid.h and ${MOD}_tree.[ch].
513
514 EXTRAMIBSYMS    Extra MIB definition files used only for extracting
515                 symbols.
516
517                 EXTRAMIBSYMS are useful when resolving inter-module
518                 dependencies and are useful with files containing only
519                 enum-definitions.
520
521                 See ${MOD}_oid.h for more details.
522
523 LOCALBASE       The package root where smilint and the net-snmp
524                 definitions can be found
525
526 MOD             The bsnmpd module name.
527
528 SMILINT         smilint binary to use with the smilint make target.
529
530 SMILINT_FLAGS   flags to pass to smilint.
531
532 SMIPATH         A colon-separated directory path where MIBs definitions
533                 can be found. See "SMIPATH" in smi_config for more
534                 details.
535
536 XSYM            MIB names to extract symbols for. See ${MOD}_oid.h for
537                 more details.
538
539 It generates the following files:
540
541 ${MOD}_tree.c   A source file and header which programmatically describes
542 ${MOD}_tree.h   the MIB (type, OID name, ACCESS attributes, etc).
543
544                 The files are generated via "gensnmptree -p".
545
546                 See gensnmptree(1) for more details.
547
548 ${MOD}_oid.h    A header which programmatically describes the MIB root and
549                 MIB tables.
550
551                 The files are generated via "gensnmptree -e".
552
553                 See gensnmptree(1) for more details.
554
555 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
556
557 The include file <bsd.subdir.mk> contains the default targets for building
558 subdirectories.  It has the same seven targets as <bsd.prog.mk>: all, clean,
559 cleandir, depend, install, and tags.  For all of the directories listed in the
560 variable SUBDIRS, the specified directory will be visited and the target made.
561 There is also a default target which allows the command "make subdir" where
562 subdir is any directory listed in the variable SUBDIRS.
563
564 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
565
566 The include file <bsd.lib.mk> has support for building libraries.  It has the
567 same seven targets as <bsd.prog.mk>: all, clean, cleandir, depend, install, and
568 tags.  It has a limited number of suffixes, consistent with the current needs of
569 the BSD tree.
570
571 It sets/uses the following variables:
572
573 LDADD           Additional loader objects.
574
575 LIB             The name of the library to build.  Both a shared and static
576                 library will be built.  NO_PIC can be set to only build a
577                 static library.
578
579 LIBADD          Additional libraries.  This is for base system libraries
580                 and is only valid inside of the /usr/src tree.
581                 Use LIBADD=name instead of LDADD=-lname.
582
583 LIBDIR          Target directory for libraries.
584
585 LIBGRP          Library group.
586
587 LIBMODE         Library mode.
588
589 LIBOWN          Library owner.
590
591 LIBRARIES_ONLY  Do not build or install files other than the library.
592
593 LIB_CXX         The name of the library to build. It also causes
594                 <bsd.lib.mk> to link the library with the
595                 standard C++ library.  LIB_CXX overrides the value
596                 of LIB if LIB is also set.  Both a shared and static library
597                 will be built.  NO_PIC can be set to only build a static
598                 library.
599
600 LINKS           The list of binary links; should be full pathnames, the
601                 linked-to file coming first, followed by the linked
602                 file.  The files are hard-linked.  For example, to link
603                 /bin/test and /bin/[, use:
604
605                         LINKS=  /bin/test /bin/[
606
607 LINKOWN         Owner of links created with LINKS [${LIBOWN}].
608
609 LINKGRP         Group of links created with LINKS [${LIBGRP}].
610
611 LINKMODE        Mode of links created with LINKS [${LIBMODE}].
612
613 MAN             The manual pages to be installed. See bsd.man.mk for more
614                 details.
615
616 SHLIB           Like LIB but only builds a shared library.
617
618 SHLIB_CXX       Like LIB_CXX but only builds a shared library.
619
620 SHLIB_LDSCRIPT  Template file to generate shared library linker script.
621                 If not defined, a simple symlink is created to the real
622                 shared object.
623
624 SRCS            List of source files to build the library.  Suffix types
625                 .s, .c, and .f are supported.  Note, .s files are preferred
626                 to .c files of the same name.  (This is not the default for
627                 versions of make.)
628
629 The include file <bsd.lib.mk> includes the file named "../Makefile.inc"
630 if it exists, as well as the include file <bsd.man.mk>.
631
632 It has rules for building profiled objects; profiled libraries are
633 built by default.
634
635 Libraries are ranlib'd before installation.
636
637 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
638
639 The include file <bsd.test.mk> handles building one or more test programs
640 intended to be used in the FreeBSD Test Suite under /usr/tests/.
641
642 It has seven targets:
643
644         all:
645                 build the test programs.
646         check:
647                 runs the test programs with kyua test.
648
649                 The beforecheck and aftercheck targets will be invoked, if
650                 defined, to execute commands before and after the realcheck
651                 target has been executed, respectively.
652
653                 The devel/kyua package must be installed before invoking this
654                 target.
655         clean:
656                 remove the test programs and any object files.
657         cleandir:
658                 remove all of the files removed by the target clean, as
659                 well as .depend and tags.
660         depend:
661                 make the dependencies for the source files, and store
662                 them in the file .depend.
663         install:
664                 install the test programs and their data files; if the
665                 Makefile does not itself define the target install, the
666                 targets beforeinstall and afterinstall may also be used
667                 to cause actions immediately before and after the
668                 install target is executed.
669         tags:
670                 create a tags file for the source files.
671
672 It sets/uses the following variables, among many others:
673
674 ATF_TESTS_C     The names of the ATF C test programs to build.
675
676 ATF_TESTS_CXX   The names of the ATF C++ test programs to build.
677
678 ATF_TESTS_SH    The names of the ATF sh test programs to build.
679
680 GTESTS          The names of the GoogleTest test programs to build.
681
682 KYUAFILE        If 'auto' (the default), generate a Kyuafile out of the
683                 test programs defined in the Makefile.  If 'yes', then a
684                 manually-crafted Kyuafile must be supplied with the
685                 sources.  If 'no', no Kyuafile is installed (useful for
686                 subdirectories providing helper programs or data files
687                 only).
688
689 LOCALBASE       The --prefix for the kyua package.
690
691                 The value of LOCALBASE defaults to /usr/local .
692
693 NOT_FOR_TEST_SUITE
694                 If defined, none of the built test programs get
695                 installed under /usr/tests/ and no Kyuafile is
696                 automatically generated.  Should not be used within the
697                 FreeBSD source tree but is provided for the benefit of
698                 third-parties.
699
700 PLAIN_TESTS_C   The names of the plain (legacy) programs to build.
701
702 PLAIN_TESTS_CXX The names of the plain (legacy) test programs to build.
703
704 PLAIN_TESTS_SH  The names of the plain (legacy) test programs to build.
705
706 TAP_PERL_INTERPRETER
707                 Path to the Perl interpreter to be used for
708                 TAP-compliant test programs that are written in Perl.
709                 Refer to TAP_TESTS_PERL for details.
710
711 TAP_TESTS_C     The names of the TAP-compliant C test programs to build.
712
713 TAP_TESTS_CXX   The names of the TAP-compliant C++ test programs to
714                 build.
715
716 TAP_TESTS_PERL  The names of the TAP-compliant Perl test programs to
717                 build.  The corresponding source files should end with
718                 the .pl extension; the test program is marked as
719                 requiring Perl; and TAP_PERL_INTERPRETER is used in the
720                 built scripts as the interpreter of choice.
721
722 TAP_TESTS_SH    The names of the TAP-compliant sh test programs to
723                 build.
724
725 TESTSBASE       Installation prefix for tests. Defaults to /usr/tests
726
727 TESTSDIR        Path to the installed tests.  Must be a subdirectory of
728                 TESTSBASE and the subpath should match the relative
729                 location of the tests within the src tree.
730
731                 The value of TESTSDIR defaults to
732                 ${TESTSBASE}/${RELDIR:H} , e.g. /usr/tests/bin/ls when
733                 included from bin/ls/tests .
734
735 TESTS_SUBDIRS   List of subdirectories containing tests into which to
736                 recurse.  Differs from SUBDIR in that these directories
737                 get registered into the automatically-generated
738                 Kyuafile (if any).
739
740 The actual building of the test programs is performed by <bsd.prog.mk>.
741 Please see the documentation above for this other file for additional
742 details on the behavior of <bsd.test.mk>.