bsd.README revision 1.50
1# $NetBSD: bsd.README,v 1.50 1999/07/13 17:58:42 thorpej Exp $ 2# @(#)bsd.README 8.2 (Berkeley) 4/2/94 3 4This is the README file for the new make "include" files for the BSD 5source tree. The files are installed in /usr/share/mk, and are, by 6convention, named with the suffix ".mk". 7 8Note, this file is not intended to replace reading through the .mk 9files for anything tricky. 10 11=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 12 13RANDOM THINGS WORTH KNOWING: 14 15The files are simply C-style #include files, and pretty much behave like 16you'd expect. The syntax is slightly different in that a single '.' is 17used instead of the hash mark, i.e. ".include <bsd.prog.mk>". 18 19One difference that will save you lots of debugging time is that inclusion 20of the file is normally done at the *end* of the Makefile. The reason for 21this is because .mk files often modify variables and behavior based on the 22values of variables set in the Makefile. To make this work, remember that 23the 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 30the command "make a" will echo "a". To make things confusing, the SECOND 31variable 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 39the command "make b" will echo "bar". This is for compatibility with the 40way the V7 make behaved. 41 42It's fairly difficult to make the BSD .mk files work when you're building 43multiple programs in a single directory. It's a lot easier split up the 44programs than to deal with the problem. Most of the agony comes from making 45the "obj" directory stuff work right, not because we switched to a new version 46of make. So, don't get mad at us, figure out a better way to handle multiple 47architectures so we can quit using the symbolic link stuff. (Imake doesn't 48count.) 49 50The file .depend in the source directory is expected to contain dependencies 51for the source files. This file is read automatically by make after reading 52the Makefile. 53 54The variable DESTDIR works as before. It's not set anywhere but will change 55the tree where the file gets installed. 56 57The profiled libraries are no longer built in a different directory than 58the regular libraries. A new suffix, ".po", is used to denote a profiled 59object, and ".so" denotes a shared (position-independent) object. 60 61The following variables that control how things are made/installed that 62are not set by default. These should not be set by Makefiles; they're for 63the user to define in MAKECONF (see bsd.own.mk, below) or on the make(1) 64command line: 65 66BUILD If defined, 'make install' checks that the targets in the 67 source directories are up-to-date and remakes them if they 68 are out of date, instead of blindly trying to install 69 out of date or non-existant targets. 70 71UPDATE If defined, 'make install' only installs targets that are 72 more recently modified in the source directories that their 73 installed counterparts. 74 75MKCATPAGES If "no", don't build or install the catman pages. 76 77MKDOC If "no", don't build or install the documentation. 78 79MKINFO If "no", don't build or install Info documentation from 80 Texinfo source files. 81 82MKLINT If "no", don't build or install the lint libraries. 83 84MKMAN If "no", don't build or install the man or catman pages. 85 Also acts as "MKCATPAGES=no" 86 87MKNLS If "no", don't build or install the NLS files. 88 89MKOBJ If "no", don't create objdirs. 90 91MKPIC If "no", don't build or install shared libraries. 92 93MKPICINSTALL If "no", don't install the *_pic.a libraries. 94 95MKPROFILE If "no", don't build or install the profiling libraries. 96 97MKSHARE If "no", act as "MKCATPAGES=no MKDOC=no MKINFO=no MKMAN=no 98 MKNLS=no". I.e, don't build catman pages, documentation, 99 Info documentation, man pages, NLS files, ... 100 101=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 102 103The include file <sys.mk> has the default rules for all makes, in the BSD 104environment or otherwise. You probably don't want to touch this file. 105 106=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 107 108The include file <bsd.man.mk> handles installing manual pages and their 109links. 110 111It has a two targets: 112 113 maninstall: 114 Install the manual page sources and their links. 115 catinstall: 116 Install the preformatted manual pages and their links. 117 118It sets/uses the following variables: 119 120MANDIR Base path for manual installation. 121 122MANGRP Manual group. 123 124MANOWN Manual owner. 125 126MANMODE Manual mode. 127 128MANSUBDIR Subdirectory under the manual page section, i.e. "/vax" 129 or "/tahoe" for machine specific manual pages. 130 131MAN The manual pages to be installed (use a .1 - .9 suffix). 132 133MLINKS List of manual page links (using a .1 - .9 suffix). The 134 linked-to file must come first, the linked file second, 135 and there may be multiple pairs. The files are soft-linked. 136 137The include file <bsd.man.mk> includes a file named "../Makefile.inc" if 138it exists. 139 140=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 141 142The include file <bsd.own.mk> contains source tree configuration parameters, 143such as the owners, groups, etc. for both manual pages and binaries, and 144a few global "feature configuration" parameters. 145 146It has no targets. 147 148To get system-specific configuration parameters, bsd.own.mk will try to 149include the file specified by the "MAKECONF" variable. If MAKECONF is not 150set, or no such file exists, the system make configuration file, /etc/mk.conf 151is included. These files may define any of the variables described below. 152 153bsd.own.mk sets the following variables, if they are not already defined 154(defaults are in brackets): 155 156BSDSRCDIR The real path to the system sources, so that 'make obj' 157 will work correctly. [/usr/src] 158 159BSDOBJDIR The real path to the system 'obj' tree, so that 'make obj' 160 will work correctly. [/usr/obj] 161 162BINGRP Binary group. [wheel] 163 164BINOWN Binary owner. [root] 165 166BINMODE Binary mode. [555] 167 168NONBINMODE Mode for non-executable files. [444] 169 170MANDIR Base path for manual installation. [/usr/share/man/cat] 171 172MANGRP Manual group. [wheel] 173 174MANOWN Manual owner. [root] 175 176MANMODE Manual mode. [${NONBINMODE}] 177 178MANINSTALL Manual installation type: maninstall, catinstall, or both 179 180LIBDIR Base path for library installation. [/usr/lib] 181 182LINTLIBDIR Base path for lint(1) library installation. [/usr/libdata/lint] 183 184LIBGRP Library group. [${BINGRP}] 185 186LIBOWN Library owner. [${BINOWN}] 187 188LIBMODE Library mode. [${NONBINMODE}] 189 190DOCDIR Base path for system documentation (e.g. PSD, USD, etc.) 191 installation. [/usr/share/doc] 192 193DOCGRP Documentation group. [wheel] 194 195DOCOWN Documentation owner. [root] 196 197DOCMODE Documentation mode. [${NONBINMODE}] 198 199NLSDIR Base path for National Language Support files installation. 200 [/usr/share/nls] 201 202NLSGRP National Language Support files group. [wheel] 203 204NLSOWN National Language Support files owner. [root] 205 206NLSMODE National Language Support files mode. [${NONBINMODE}] 207 208STRIPFLAG The flag passed to the install program to cause the binary 209 to be stripped. This is to be used when building your 210 own install script so that the entire system can be made 211 stripped/not-stripped using a single knob. [-s] 212 213COPY The flag passed to the install program to cause the binary 214 to be copied rather than moved. This is to be used when 215 building our own install script so that the entire system 216 can either be installed with copies, or with moves using 217 a single knob. [-c] 218 219Additionally, the following variables may be set by bsd.own.mk or in a 220make configuration file to modify the behaviour of the system build 221process (default values are in brackets along with comments, if set by 222bsd.own.mk): 223 224CRYPTOBASE Select which cryptography code base to use when building 225 cryptography support into the system. See the 226 bsd.crypto.mk section for more information. 227 228EXPORTABLE_SYSTEM 229 Forces CRYPTOBASE to the value "none" for compatibility 230 with older NetBSD build environments. See the bsd.crypto.mk 231 section for more information. 232 233SKEY Compile in support for S/key authentication. [yes, set 234 unconditionally] 235 236KERBEROS Compile in support for Kerberos 4 authentication. 237 238KERBEROS5 Compile in support for Kerberos 5 authentication. 239 240MANZ Compress manual pages at installation time. 241 242SYS_INCLUDE Copy or symlink kernel include files into /usr/include. 243 Possible values are "symlinks" or "copies" (which is 244 the same as the variable being unset). 245 246NOPROFILE Do not build profiled versions of system libraries 247 248NOPIC Do not build PIC versions of system libraries, and 249 do not build shared libraries. [set if ${MACHINE_ARCH} 250 is "sparc64", unset otherwise.] 251 252NOLINT Do not build lint libraries. 253 254OBJECT_FMT Object file format. [set to "ELF" on architectures that 255 use ELF -- currently if ${MACHINE_ARCH} is "alpha", 256 "mipsel", "mipseb", "powerpc", "sparc", "sparc64", 257 and "i386", or set to "a.out" on other architectures]. 258 259 260bsd.own.mk is generally useful when building your own Makefiles so that 261they use the same default owners etc. as the rest of the tree. 262 263=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 264 265The include file <bsd.prog.mk> handles building programs from one or 266more source files, along with their manual pages. It has a limited number 267of suffixes, consistent with the current needs of the BSD tree. 268 269It has eight targets: 270 271 all: 272 build the program and its manual page 273 clean: 274 remove the program, any object files and the files a.out, 275 Errs, errs, mklog, and ${PROG}.core. 276 cleandir: 277 remove all of the files removed by the target clean, as 278 well as .depend, tags, and any manual pages. 279 `distclean' is a synonym for `cleandir'. 280 depend: 281 make the dependencies for the source files, and store 282 them in the file .depend. 283 includes: 284 install any header files. 285 install: 286 install the program and its manual pages; if the Makefile 287 does not itself define the target install, the targets 288 beforeinstall and afterinstall may also be used to cause 289 actions immediately before and after the install target 290 is executed. 291 lint: 292 run lint on the source files 293 tags: 294 create a tags file for the source files. 295 296It sets/uses the following variables: 297 298BINGRP Binary group. 299 300BINOWN Binary owner. 301 302BINMODE Binary mode. 303 304CLEANFILES Additional files to remove for the clean and cleandir targets. 305 306COPTS Additional flags to the compiler when creating C objects. 307 308CPPFLAGS Additional flags to the C pre-processor 309 310LDADD Additional loader objects. Usually used for libraries. 311 For example, to load with the compatibility and utility 312 libraries, use: 313 314 LDADD+=-lutil -lcompat 315 316LDFLAGS Additional loader flags. 317 318LINKS The list of binary links; should be full pathnames, the 319 linked-to file coming first, followed by the linked 320 file. The files are hard-linked. For example, to link 321 /bin/test and /bin/[, use: 322 323 LINKS= ${DESTDIR}/bin/test ${DESTDIR}/bin/[ 324 325SYMLINKS The list of symbolic links; should be full pathnames. 326 Syntax is identical to LINKS. Note that DESTDIR is not 327 automatically included in the link. 328 329MAN Manual pages (should end in .1 - .9). If no MAN variable is 330 defined, "MAN=${PROG}.1" is assumed. 331 332PROG The name of the program to build. If not supplied, nothing 333 is built. 334 335PROGNAME The name that the above program will be installed as, if 336 different from ${PROG}. 337 338SRCS List of source files to build the program. If SRCS is not 339 defined, it's assumed to be ${PROG}.c. 340 341DPADD Additional dependencies for the program. Usually used for 342 libraries. For example, to depend on the compatibility and 343 utility libraries use: 344 345 DPADD+=${LIBCOMPAT} ${LIBUTIL} 346 347 The following libraries are predefined for DPADD: 348 349 LIBCRT0?= ${DESTDIR}/usr/lib/crt0.o 350 LIBC?= ${DESTDIR}/usr/lib/libc.a 351 LIBC_PIC?= ${DESTDIR}/usr/lib/libc_pic.a 352 LIBCOMPAT?= ${DESTDIR}/usr/lib/libcompat.a 353 LIBCRYPT?= ${DESTDIR}/usr/lib/libcrypt.a 354 LIBCURSES?= ${DESTDIR}/usr/lib/libcurses.a 355 LIBDBM?= ${DESTDIR}/usr/lib/libdbm.a 356 LIBDES?= ${DESTDIR}/usr/lib/libdes.a 357 LIBEDIT?= ${DESTDIR}/usr/lib/libedit.a 358 LIBGCC?= ${DESTDIR}/usr/lib/libgcc.a 359 LIBGNUMALLOC?= ${DESTDIR}/usr/lib/libgnumalloc.a 360 LIBIPSEC?= ${DESTDIR}/usr/lib/libipsec.a 361 LIBKDB?= ${DESTDIR}/usr/lib/libkdb.a 362 LIBKRB?= ${DESTDIR}/usr/lib/libkrb.a 363 LIBKVM?= ${DESTDIR}/usr/lib/libkvm.a 364 LIBL?= ${DESTDIR}/usr/lib/libl.a 365 LIBM?= ${DESTDIR}/usr/lib/libm.a 366 LIBMP?= ${DESTDIR}/usr/lib/libmp.a 367 LIBNTP?= ${DESTDIR}/usr/lib/libntp.a 368 LIBPC?= ${DESTDIR}/usr/lib/libpc.a 369 LIBPCAP?= ${DESTDIR}/usr/lib/libpcap.a 370 LIBPLOT?= ${DESTDIR}/usr/lib/libplot.a 371 LIBPOSIX?= ${DESTDIR}/usr/lib/libposix.a 372 LIBRESOLV?= ${DESTDIR}/usr/lib/libresolv.a 373 LIBRPCSVC?= ${DESTDIR}/usr/lib/librpcsvc.a 374 LIBSKEY?= ${DESTDIR}/usr/lib/libskey.a 375 LIBTERMCAP?= ${DESTDIR}/usr/lib/libtermcap.a 376 LIBTELNET?= ${DESTDIR}/usr/lib/libtelnet.a 377 LIBUTIL?= ${DESTDIR}/usr/lib/libutil.a 378 LIBWRAP?= ${DESTDIR}/usr/lib/libwrap.a 379 LIBY?= ${DESTDIR}/usr/lib/liby.a 380 LIBZ?= ${DESTDIR}/usr/lib/libz.a 381 382 383SHAREDSTRINGS If defined, a new .c.o rule is used that results in shared 384 strings, using xstr(1). Note that this will not work with 385 parallel makes. 386 387STRIP The flag passed to the install program to cause the binary 388 to be stripped. 389 390SUBDIR A list of subdirectories that should be built as well. 391 Each of the targets will execute the same target in the 392 subdirectories. 393 394SCRIPTS A list of interpreter scripts [file.{sh,csh,pl,awk,...}]. 395 These are installed exactly like programs. 396 397SCRIPTSNAME The name that the above program will be installed as, if 398 different from ${SCRIPTS}. These can be further specialized 399 by setting SCRIPTSNAME_<script>. 400 401FILES A list of files to install. The installation is controlled 402 by the FILESNAME, FILESOWN, FILESGRP, FILESMODE, FILESDIR 403 variables that can be further specialized by FILES<VAR>_<file> 404 405The include file <bsd.prog.mk> includes the file named "../Makefile.inc" 406if it exists, as well as the include file <bsd.man.mk>. 407 408Some simple examples: 409 410To build foo from foo.c with a manual page foo.1, use: 411 412 PROG= foo 413 414 .include <bsd.prog.mk> 415 416To build foo from foo.c with a manual page foo.2, add the line: 417 418 MAN= foo.2 419 420If foo does not have a manual page at all, add the line: 421 422 NOMAN= noman 423 424If foo has multiple source files, add the line: 425 426 SRCS= a.c b.c c.c d.c 427 428=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 429 430The include file <bsd.subdir.mk> contains the default targets for building 431subdirectories. It has the same eight targets as <bsd.prog.mk>: all, 432clean, cleandir, depend, includes, install, lint, and tags. For all of 433the directories listed in the variable SUBDIRS, the specified directory 434will be visited and the target made. There is also a default target which 435allows the command "make subdir" where subdir is any directory listed in 436the variable SUBDIRS. 437 438=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 439 440The include file <bsd.links.mk> handles the LINKS and SYMLINKS variables 441and is included from from bsd.lib.mk and bsd.prog.mk. 442 443=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 444 445The include file <bsd.files.mk> handles the FILES variables and is included 446from bsd.lib.mk and bsd.prog.mk. 447 448=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 449 450The include file <bsd.inc.mk> defines the includes target and uses two 451variables: 452 453INCS The list of include files 454 455INCSDIR The location to install the include files. 456 457=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 458 459The include file <bsd.kinc.mk> defines the many targets (includes, 460subdirectories, etc.), and is used by kernel makefiles to handle 461include file installation. It is intended to be included alone, by 462kernel Makefiles. Please see bsd.kinc.mk for more details, and keep 463the documentation in that file up to date. 464 465=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 466 467The include file <bsd.info.mk> is used to generate and install GNU Info 468documentation from respective Texinfo source files. It defines three 469implicit targets (.txi.info, .texi.info, and .texinfo.info), and uses the 470following variables: 471 472TEXINFO List of Texinfo source files. Info documentation will 473 consist of single files with the extension replaced by 474 .info. 475 476INFOFLAGS Flags to pass to makeinfo. [] 477 478INSTALL_INFO Name of install-info program. [install-info] 479 480MAKEINFO Name of makeinfo program. [makeinfo] 481 482=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 483 484The include file <bsd.sys.mk> is used by <bsd.prog.mk> and 485<bsd.lib.mk>. It contains overrides that are used when building 486the NetBSD source tree. For instance, if "PARALLEL" is defined by 487the program/library Makefile, it includes a set of rules for lex and 488yacc that allow multiple lex and yacc targets to be built in parallel. 489 490=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 491 492The include file <bsd.lib.mk> has support for building libraries. It has 493the same eight targets as <bsd.prog.mk>: all, clean, cleandir, depend, 494includes, install, lint, and tags. Additionally, it has a checkver target 495which checks for installed shared object libraries whose version is greater 496that the version of the source. It has a limited number of suffixes, 497consistent with the current needs of the BSD tree. 498 499It sets/uses the following variables: 500 501LIB The name of the library to build. 502 503LIBDIR Target directory for libraries. 504 505LINTLIBDIR Target directory for lint libraries. 506 507LIBGRP Library group. 508 509LIBOWN Library owner. 510 511LIBMODE Library mode. 512 513LDADD Additional loader objects. 514 515MAN The manual pages to be installed (use a .1 - .9 suffix). 516 517MKLINKLIB If "no", act as "MKPICINSTALL=no MKPROFILE=no". 518 Also: 519 - don't install the .a libraries 520 - don't install _pic.a libraries on PIC systems 521 - don't build .a libraries on PIC systems 522 - don't install the .so symlink on ELF systems 523 I.e, only install the shared library (and the .so.major 524 symlink on ELF). 525 526NOCHECKVER_<library> 527NOCHECKVER If set, disables checking for installed shared object 528 libraries with versions greater than the source. A 529 particular library name, without the "lib" prefix, may 530 be appended to the variable name to disable the check for 531 only that library. 532 533SRCS List of source files to build the library. Suffix types 534 .s, .c, and .f are supported. Note, .s files are preferred 535 to .c files of the same name. (This is not the default for 536 versions of make.) 537 538The include file <bsd.lib.mk> includes the file named "../Makefile.inc" 539if it exists, as well as the include file <bsd.man.mk>. 540 541It has rules for building profiled objects; profiled libraries are 542built by default. 543 544Libraries are ranlib'd when made. 545 546=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 547 548The include file <bsd.crypto.mk> contains variables related to building 549cryptography support into the system. 550 551It has no targets. 552 553In order to get system-specific crypto configuration parameters, 554bsd.crypto.mk will include <bsd.own.mk>, which in turn will include 555the configuration file specified by the "MAKECONF" variable. See 556the <bsd.own.mk> section for more information. 557 558bsd.crypto.mk requires the "SRCTOP" variable to be defined before 559inclusion. This variable contains the relative path to the top of 560the source tree, with no trailing '/'. 561 562The variable "CRYPTOBASE" may be set by the user to select which 563cryptography code base will be used when building the system. If 564CRYPTOBASE is set to "none", no cryptography support will be built 565into the system. CRYPTOBASE should be set to the name of the crypto 566sub-tree in the SRCTOP directory. If CRYPTOBASE is not set, 567bsd.crypto.mk will use the following algorithm to set the variable: 568 569 .if exists(${SRCTOP}/crypto-us) 570 CRYPTOBASE=crypto-us 571 .elif exists(${SRCTOP}/crypto-intl) 572 CRYPTOBASE=crypto-intl 573 .else 574 undef CRYPTOBASE 575 .endif 576 577Note that it is legal for the user to set CRYPTOBASE to a relative 578path outside of the source directory. For example: 579 580 CRYPTOPATH= ../cryptosrc-intl/crypto-intl 581 582If CRYPTOBASE is set and not set to "none", bsd.crypto.mk will use 583CRYPTOBASE to set the "CRYPTOPATH" variable. CRYPTOPATH is set to 584the value "${SRCTOP}/${CRYPTOBASE}". 585 586Once CRYPTOPATH is set by bsd.crypto.mk, it checks to see if the 587path actually exists. If it does not exist, the variable is undefined. 588Program and library Makefiles may key off the definition of CRYPTOPATH 589to determine if cryptography support is to be included in that program. 590For example, a typical program Makefile should do the following: 591 592 SRCTOP= ../.. 593 .include <bsd.crypto.mk> 594 595 PROG= login 596 SRCS= login.c 597 . 598 . 599 . 600 .if defined(CRYPTOPATH) 601 .include "${CRYPTOPATH}/usr.bin/login/Makefile.frag" 602 .endif 603 604The Makefile.frag included will now influence the build of the login(1) 605program, specifying additional source files, libraries, and CPP flags. 606 607The "EXPORTABLE_SYSTEM" variable, if set, causes CRYPTOBASE to be set 608to "none". This is for compatibilty with older NetBSD build environments. 609 610=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 611