summaryrefslogtreecommitdiff
path: root/devtools/README
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/README')
-rw-r--r--devtools/README398
1 files changed, 398 insertions, 0 deletions
diff --git a/devtools/README b/devtools/README
new file mode 100644
index 0000000000000..69be72b6a3352
--- /dev/null
+++ b/devtools/README
@@ -0,0 +1,398 @@
+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 affect
+ 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.
+confCCOPTS [empty] Additional options to pass to confCC.
+*confCCOPTS_SO -fPIC Additional options for compiling
+ shared object libraries.
+confCCLINK confCC Linker to use (for executables).
+confCOPY cp A program that copies files.
+confMKDIR [empty] A program that creates directories
+ (mkdir) and takes the -p parameter
+ to create also intermediate directories
+ as required. If this macro is set,
+ then it used by "make install" to
+ create the required installation
+ directories.
+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.
+confDONT_INSTALL_CATMAN [undefined] Don't install the formatted manual
+ pages.
+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.
+confGBINGRP smmsp The group for set-group-ID binaries.
+confGBINMODE 2555 The mode for set-group-ID binaries.
+confGBINOWN root The owner for set-group-ID binaries.
+confMSPQOWN smmsp The owner of the MSP queue.
+confMSP_QUEUE_DIR /var/spool/clientmqueue The MSP queue directory.
+confMSP_STFILE sm-client.st Name of the MSP statistics file.
+confHFDIR /etc/mail Location of the sendmail helpfile.
+confHFFILE helpfile Name of the installed helpfile.
+confINCDIRS [empty] -I flags passed to C compiler.
+confINCGRP bin The group for include files.
+confINCMODE 444 The mode of installed include files.
+confINCOWN root The owner for include files.
+confINCLUDEDIR /usr/include Where to install include files.
+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 (for libraries).
+confLDOPTS [empty] Linker options.
+*confLDOPTS_SO -shared -Wl Additional linker options for
+ linking shared object libraries.
+confLIBDIR /usr/lib Where to install library files.
+confLIBDIRS [empty] -L flags passed to ld.
+confLIBGRP bin The group for libraries.
+confLIBMODE 444 The mode of installed libraries.
+confLIBOWN root The owner for libraries.
+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.
+confLN ln The command used to create links.
+confLNOPTS -f -s The parameters for confLN.
+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 3 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.
+confMANGRP bin The group of installed man pages.
+confMANMODE 444 The mode of installed man pages.
+confMANOWN bin The owner of installed man pages.
+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.
+confMAPDEF [varies] The map definitions, e.g.,
+ -DNDBM -DNEWDB. -DNEWDB is always
+ added if libdb.* can be found.
+confMBINDIR /usr/sbin The location of the MTA (sm-mta,
+ sendmail) binary.
+confMBINGRP bin The group of the MTA binary (sm-mta).
+confMBINMODE 550 The mode of the MTA binary (sm-mta).
+confMBINOWN root The owner of the MTA binary (sm-mta).
+confMTCCOPTS [empty] Additional options for compiling
+ multi-threaded object files.
+confMTLDOPTS [empty] Additional linker options for
+ linking multithreaded binaries.
+confNO_HELPFILE_INSTALL [undefined] If defined, don't install the sendmail
+ helpfile by default.
+confNO_MAN_BUILD [undefined] If defined, don't build the man
+ pages.
+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.
+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.
+confOPTIMIZE -O Flags passed to C compiler as ${O}.
+confRANLIB echo The path to the program to use
+ as ranlib.
+confRANLIBOPTS [empty] Options to pass to ranlib.
+confREQUIRE_LIBSM [empty] Define if libsm is required.
+confSBINDIR /usr/sbin The location of root-oriented
+ commands, such as makemap.
+confSBINGRP bin The group for set-user-ID binaries.
+confSBINMODE 4555 The mode for set-user-ID binaries.
+confSBINOWN root The owner for set-user-ID binaries.
+confSETUSERID_INSTALL [undefined] Needs to be defined to enable the
+ install-set-user-id target for
+ sendmail. See sendmail/SECURITY.
+confSHAREDLIB_EXT .so Shared library file extenion name.
+confSHAREDLIB_SUFFIX [empty] Shared object version suffix.
+confSHAREDLIBDIR /usr/lib/ Directory for installing shared
+ library. Note: if the value is
+ not empty, it must end with a
+ slash ('/') otherwise it will not
+ be taken as a directory (but as
+ the beginning of a path).
+confSHELL /bin/sh The shell to use inside make.
+confSM_OS_HEADER [varies] The name of the platform specific
+ include file. Undefine this if
+ libsm is not used.
+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.
+confSONAME [empty] ld flag for recording the shared object
+ name into shared object.
+confSTDIR /etc/mail The directory in which to store the
+ sendmail statistics file.
+confSTFILE statistics Name of the installed statistics file.
+confSTMODE 0600 Mode 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.
+confUBINGRP bin The group for user-executable binaries.
+confUBINMODE 555 The mode for user-executable binaries.
+confUBINOWN bin The owner 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 contains
+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_LIB_POST [empty] -l flags passed to ld when linking
+ prog (after other libraries).
+conf_prog_LIBS [varies] -l flags passed to ld when linking
+ prog (before other libraries).
+conf_prog_OBJADD [empty] Additional object files given to ld
+ when linking prog.
+conf_prog_SRCADD [empty] C source files to compile and link
+ for 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 `M', `U', `K', `S', and `E'.
+See M4/UNIX/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.
+
+
+test
+----
+
+This is just like 'executable', but is used for test programs.
+The program cannot be installed. Each time it is built, it is executed
+by make with no arguments.
+
+
+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.
+
+bldINSTALLABLE - This should be set if the library should be installed in
+confLIBDIR.
+
+$Revision: 8.102 $, Last updated $Date: 2008/02/12 16:40:05 $