c333e7610b
rcs-id rewrites) |
||
---|---|---|
.. | ||
bin | ||
M4 | ||
OS | ||
Site | ||
README |
This directory contains tools. Do not attempt to actually build anything in this directory. The Build script allows you to specify a base location for the object files by using the -O flag: Build -O /tmp will put the object files in /tmp/obj.*/. Also, if the SENDMAIL_SUFFIX environment variable is set, its value will be used in the obj.* directory name. The Build script allows you to specify a site configuration file by using the -f flag: Build -f siteconfig.m4 You can put such site configuration files in the Site sub-directory; see Site/README for details. If you need to support multiple build configurations from the same tree, you can use prefixes to differentiate your configurations. Use the -Q flag to Build: Build -Q prefix Build will select a prefix.*.m4 file instead of the site.*.m4 file according to the conventions in Site/README, and use it to modify the build configuration. The object directory used will be obj.prefix.*/. Your prefix.*.m4 files should reside in the Site directory. You may not use -Q and -f simultaneously. While building a site configuration file, beyond using define() to set variables, you can also add to a definition using the APPENDDEF() and PREPENDDEF() macros. For example: APPENDDEF(`confINCDIRS', `-I/usr/local/bind/include') will add -I/usr/local/bind/include to the already existing confINCDIRS. Note: There must be no trailing spaces after the last quote mark and before the closing parenthesis. Also you may need to properly quote m4 reserved words as specified by your vendor's m4 command. By default, sendmail will search your system for include and library directories as well as certain libraries (libdb.* for Berkeley DB and libbind.a or libresolv.* for name resolution). You can turn off this configuration step by specifying the -S flag with the Build command. The OS subtree contains definitions for variations on a standard model for system installation. The M4 variables that can be defined and their defaults before referencing the appropriate OS definitions are listed below. Note that variables preceded by an asterisk (*) are currently not used in the open source distribution. confBEFORE [empty] Files to create before sendmail is compiled. The methods must be defined in the Makefile using PUSHDIVERT(3). confBLDVARIANT OPTIMIZED This controls which object variant will be built and is controlled with the -v flag to the Build script. Internally, this macro is used to select compiler options in the devtools/OS/*.m4 files. Valid arguments for the Build -v flag are "optimized", "debug", and "purify" which map to confBLDVARIANT values of "OPTIMIZED", "DEBUG", and "PURIFY". This is a work in progress, and as such not all devtools/OS/*.m4 have been updated yet. (See Linux for an example of one that has.) Also, in the future it may be desirable to append a variant identifier to the object directory name to allow different variants to independently co-exist on a given target platform. Note: the PURIFY variant has not been fully implemented on any platforms yet. Other variants can be added as needed in the future. Changing this macro from its default will effect other default values. confBUILDBIN ../../devtools/bin The location of the build support binaries, relative to the obj.* directory. confCC cc The C compiler to use. confOPTIMIZE -O Flags passed to C compiler as ${O}. confCCOPTS [empty] Additional options to pass to confCC. *confCCOPTS_SO -fPIC Additional options for compiling shared object libraries. *confMTCCOPTS [empty] Additional options for compiling multi-threaded object files. confCOPY cp A program that copies files. confDEPEND_TYPE generic How to build dependencies. This should be the name of a file in devtools/M4/depend confDEPLIBS [empty] Dependent libraries when building shared objects. confEBINDIR /usr/libexec The location for binaries executed from other binaries, e.g., mail.local or smrsh. confENVDEF [empty] -D flags passed to C compiler. confFORCE_RMAIL [undefined] If defined, install the rmail program without question. confHFDIR /etc/mail Location of the sendmail helpfile. confHFFILE helpfile Name of the installed helpfile. confINCDIRS [empty] -I flags passed to C compiler. confINSTALL install The BSD-compatible install program. Use ${BUILDBIN}/install.sh if none is available on your system. confINSTALL_RAWMAN [undefined] Install the unformatted manual pages. *confLD confCC Linker to use. confLDOPTS [empty] Linker options passed to ld. *confLDOPTS_SO -shared -Wl Additional linker options for linking shared object libraries. confLN ln The command used to create links. *confMTLDOPTS [empty] Additional linker options for linking multithreaded binaries. confLIBDIRS [empty] -L flags passed to ld. confLIBS [varies] -l flags passed to ld. confLIBSEARCH db bind resolv 44bsd Search for these libraries for linking with programs. confLIBSEARCHPATH /lib /usr/lib /usr/shlib Locations to search for the libraries specified by confLIBSEARCH. confLINKS ${UBINDIR}/newaliases ${UBINDIR}/mailq \ ${UBINDIR}/hoststat ${UBINDIR}/purgestat Names of links to sendmail. confMANROOT /usr/share/man/cat The root of the man subtree. confMANROOTMAN /usr/share/man/man The root of the man subtree, for unformatted manual pages. confMAN1 confMANROOT 1 The location of man1 files. confMAN1EXT 1 The extension on files in confMAN1. confMAN1SRC 0 The source for man pages installed in confMAN1. confMAN3 confMANROOT 3 The location of man3 files. confMAN3EXT 4 The extension on files in confMAN3. confMAN3SRC 0 The source for man pages installed in confMAN3. confMAN4 confMANROOT 4 The location of man4 files. confMAN4EXT 4 The extension on files in confMAN4. confMAN4SRC 0 The source for man pages installed in confMAN4. confMAN5 confMANROOT 5 The location of man5 files. confMAN5EXT 5 The extension on files in confMAN5. confMAN5SRC 0 The source for man pages installed in confMAN5. confMAN8 confMANROOT 8 The location of man8 files. confMAN8EXT 8 The extension on files in confMAN8. confMAN8SRC 0 The source for man pages installed in confMAN8. confMANDOC -man The macros used to format man pages. confMANOWN bin The owner of installed man pages. confMANGRP bin The group of installed man pages. confMANMODE 444 The mode of installed man pages. confMAPDEF [varies] The map definitions, e.g., -DNDBM -DNEWDB. -DNEWDB is always added if libdb.* can be found. confNO_MAN_BUILD [undefined] If defined, don't build the man pages. confNO_HELPFILE_INSTALL [undefined] If defined, don't install the sendmail helpfile by default. confNO_MAN_INSTALL [undefined] If defined, don't install the man pages by default. confNO_STATISTICS_INSTALL [undefined] If defined, don't install the sendmail statistics file by default. confMBINDIR /usr/sbin The location of the MTA (sendmail) binary. confNROFF groff -Tascii The command to format man pages. confOBJADD [empty] Objects that should be included in when linking sendmail and the associated utilities. See also confSRCADD. confRANLIB echo The path to the program to use as ranlib. confRANLIBOPTS [empty] Options to pass to ranlib. confSBINDIR /usr/sbin The location of root-oriented commands, such as makemap. confSBINOWN root The owner for setuid binaries. confSBINGRP sbin The group for setuid binaries. confSBINMODE 4555 The mode for setuid binaries. confSHELL /bin/sh The shell to use inside make. confSMOBJADD [empty] Objects that should be included in when linking sendmail. See also confSMSRCADD. confSMSRCADD [empty] C source files which correspond to objects listed in confSMOBJADD. confSMSRCDIR [varies] The sendmail source directory relative to support program obj.* directories. If not set, the Makefile will use a path set by the Build script. confSRCADD [empty] C source files which correspond to objects listed in confOBJADD. confSRCDIR [varies] The root of the source directories relative to support program obj.* directories. If not set, the Makefile will use a path set by the Build script. confSHAREDLIB_EXT .so Shared library file extenion name. confSHAREDLIBDIR /usr/lib Directory for installing shared library. confSHAREDLIB_SUFFIX [empty] Shared object version suffix. confSONAME [empty] ld flag for recording the shared object name into shared object. confSTDIO_TYPE portable Buffered file implementation (based on stdio library). Either portable or torek. confSTDIR /etc/mail The directory in which to store the sendmail statistics file. confSTFILE statistics Name of the installed statistics file. confSTRIP strip What program to use for stripping executables. confSTRIPOPTS [empty] Options to pass to the strip program. confUBINDIR /usr/bin The directory for user-executable binaries. confUBINOWN bin The owner for user-executable binaries. confUBINGRP bin The group for user-executable binaries. confUBINMODE 555 The mode for user-executable binaries. There are also program specific variables for each of the programs in the sendmail distribution. Each has the form `conf_prog_ENVDEF', for example, `conf_sendmail_ENVDEF'. If the program name consists a '.' it must be replaced by '_' first, e.g., use `conf_mail_local_LIBS' instead of `conf_mail.local_LIBS'. The variables are: conf_prog_ENVDEF [empty] -D flags passed to C compiler when compiling prog. conf_prog_LIBS [varies] -l flags passed to ld when linking prog (before other libraries). conf_prog_LIB_POST [empty] -l flags passed to ld when linking prog (after other libraries). conf_prog_SRCADD [empty] C source files to compile and link for prog. conf_prog_OBJADD [empty] Additional object files given to ld when linking prog. The order of the different conf*LIBS* is as follows: conf_prog_LIBS confLIBS conf_prog_LIB_POST ---------------------------------------------------------------- ---------------- New build system ---------------- Sendmail's build system has undergone some rearrangement to accommodate future development. To the end user building sendmail from a distribution, this should have little effect. All the same configuration files and macros should still behave the same. If you need to make some radical changes to a Makefile.m4 or are adding new libraries or utilities, you may want to read the rest of this document on how to work with the new system. -------- Overview -------- The purpose of the redesign is twofold. First, it cuts down massively on replicated information. Second, the new design should lend itself better to working on platforms with somewhat different build tools than on standard unix. The main idea is to have the Makefile.m4 in each subdirectory contain the minimum amount of information needed to describe the elements needed for the build process and the products produced. Each product has a type and each type has a template that provides a basic makefile for that type. Right now the templates are organized by the broad type of the operating system. The two existing types are UNIX and NT. ------------------ Makefile.m4 basics ------------------ Each Makefile.m4 is split into separate products. For the most part, the products are considered totally separate from other products in the Makefile.m4. Each products is delineated by two macros: bldPRODUCT_START and bldPRODUCT_END. The form for bldPRODUCT_START is: bldPRODUCT_START(<product_type>, <product_name>) where <product_type> is the type of product to be produced (e.g., executable, library, manpage) and <product_name> is a unique identifier within the product_type name space for this Makefile.m4 The form for bldPRODUCT_END is: bldPRODUCT_END This is marks the end of all the information for the current product. There is one other macro required in any Makefile.m4 and that is bldFINISH which takes no arguments and must appear after all the products have been defined. When the actual makefile is generated each product appears in two sections. The first is where makefile variables are set (e.g., CFLAGS=-O). The second is where the targets appear (e.g., foo.o: foo.c). Anything diverted to bldTARGETS_SECTION ends up in the second part of the makefile. Anything else turns up in the header part where variables are defined. As always, any straight text put into Makefile.m4 will just show up as is in the finished makefile. ------------- Product Types ------------- executable ---------- This means an executable created from C sources. The name of the executable is derived from the product_name in the bldPRODUCT_START macro. bldSOURCES - This should be defined to a space separated list of source files that make up the executable. bldBIN_TYPE - This determines where the binaries will be installed and what permissions they will have. Available types are `U', `K', `S', and `E'. See M4/make/executable.m4 for what the different types mean. bldTARGET_LINKS - This determines where additional symbolic links to the executable are placed. These should be full pathnames, separated by spaces. manpage ------- This builds manpages from source using *roff. bldSOURCES - This should be defined to a space separated list of man source files. library ------- This builds a static library from C sources. bldSOURCES - This should be defined to a space separated list of C source files that make up the library. Revision: 8.65.4.2, Last updated Date: 2000/07/19 18:45:39