362 lines
14 KiB
Plaintext
362 lines
14 KiB
Plaintext
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.
|
|
confCCOPTS [empty] Additional options to pass to confCC.
|
|
*confCCOPTS_SO -fPIC Additional options for compiling
|
|
shared object libraries.
|
|
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.
|
|
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.
|
|
confLDOPTS [empty] Linker options passed to ld.
|
|
*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.
|
|
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 (sendmail)
|
|
binary.
|
|
*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.
|
|
confSBINDIR /usr/sbin The location of root-oriented
|
|
commands, such as makemap.
|
|
confSBINGRP bin The group for setuid binaries.
|
|
confSBINMODE 4555 The mode for setuid binaries.
|
|
confSBINOWN root The owner for setuid binaries.
|
|
confSHAREDLIB_EXT .so Shared library file extenion name.
|
|
confSHAREDLIB_SUFFIX [empty] Shared object version suffix.
|
|
confSHAREDLIBDIR /usr/lib Directory for installing shared
|
|
library.
|
|
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.
|
|
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.
|
|
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 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_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 `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.
|
|
|
|
|
|
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.65.4.9, Last updated Date: 2001/05/30 19:50:37
|