freebsd-dev/etc/mail/Makefile
Gregory Neil Shapiro 619b80c4e6 Quoting Peter Wemm, "At great personal risk, touch the sendmail startup
again."

As an alternative to sendmail_enable=NONE, solve the boot time problem
for non-sendmail users completely by moving all of the sendmail startup
code from /etc/rc to /etc/rc.sendmail.  The source for that script will
be kept in src/etc/sendmail/rc.sendmail so make.conf's NO_SENDMAIL will
prevent it from being installed.  A new rc.conf variable,
mta_start_script specifies the script to run to start the user's
preferred MTA.  For backward compatibility, it will default to
/etc/rc.sendmail.  The specified script is called out of /etc/rc after
checking to make sure it exists.  A new rc.sendmail.8 man page has also
been added which now houses the sendmail_* variable descriptions
formerly in rc.conf.5.

Use /etc/rc.sendmail in /etc/mail/Makefile to reduce code duplication.

Reviewed by:	-current, -stable, obrien, peter, ru
MFC after:	1 week
2002-04-05 02:30:49 +00:00

207 lines
5.5 KiB
Makefile

#
# $FreeBSD$
#
# This Makefile provides an easy way to generate the configuration
# file and database maps for the sendmail(8) daemon.
#
# The user-driven targets are:
#
# all - Build cf, maps and aliases
# cf - Build the .cf file from .mc file
# maps - Build the feature maps
# aliases - Build the sendmail aliases
# install - Install the .cf file as /etc/mail/sendmail.cf
#
# For acting on both the MTA daemon and MSP queue running daemon:
# start - Start both the sendmail MTA daemon and MSP queue running
# daemon with the flags defined in /etc/defaults/rc.conf or
# /etc/rc.conf
# stop - Stop both the sendmail MTA daemon and MSP queue running
# daemon
# restart - Restart both the sendmail MTA daemon and MSP queue running
# daemon
#
# For acting on just the MTA daemon:
# start-mta - Start the sendmail MTA daemon with the flags defined in
# /etc/defaults/rc.conf or /etc/rc.conf
# stop-mta - Stop the sendmail MTA daemon
# restart-mta - Restart the sendmail MTA daemon
#
# For acting on just the MSP queue running daemon:
# start-mspq - Start the sendmail MSP queue running daemon with the
# flags defined in /etc/defaults/rc.conf or /etc/rc.conf
# stop-mspq - Stop the sendmail MSP queue running daemon
# restart-mspq - Restart the sendmail MSP queue running daemon
#
# Calling `make' will generate the updated versions when either the
# aliases or one of the map files were changed.
#
# A `make install` is only necessary after modifying the .mc file. In
# this case one would normally also call `make restart' to allow the
# running sendmail to pick up the changes as well.
#
# ------------------------------------------------------------------------
#
# This makefile uses `<HOSTNAME>.mc' as the default .mc file. This can
# be changed by defining SENDMAIL_MC in /etc/make.conf, e.g.:
#
# SENDMAIL_MC=/etc/mail/myconfig.mc
#
# If '<HOSTNAME>.mc' does not exist, it is created using 'freebsd.mc'
# as a template.
# ------------------------------------------------------------------------
#
# The Makefile knows about the following maps:
# access, bitdomain, domaintable, genericstable, mailertable, userdb,
# uucpdomain, virtusertable
#
.ifndef SENDMAIL_MC
SENDMAIL_MC!= hostname
SENDMAIL_MC:= ${SENDMAIL_MC}.mc
${SENDMAIL_MC}:
cp freebsd.mc ${SENDMAIL_MC}
.endif
INSTALL_CF= ${SENDMAIL_MC:R}.cf
SENDMAIL_ALIASES?= /etc/mail/aliases
#
# This is the directory where the sendmail configuration files are
# located.
#
.if exists(/usr/share/sendmail/cf)
SENDMAIL_CF_DIR?= /usr/share/sendmail/cf
.elif exists(/usr/src/contrib/sendmail/cf)
SENDMAIL_CF_DIR?= /usr/src/contrib/sendmail/cf
.endif
#
# The sendmail startup script
#
SENDMAIL_START_SCRIPT?= /etc/rc.sendmail
#
# Some useful programs we need.
#
SENDMAIL?= /usr/sbin/sendmail
MAKEMAP?= /usr/sbin/makemap
M4?= /usr/bin/m4
# Set a reasonable default
.MAIN: all
#
# ------------------------------------------------------------------------
#
# The Makefile picks up the list of files from SENDMAIL_MAP_SRC and
# stores the matching .db filenames in SENDMAIL_MAP_OBJ if the file
# exists in the current directory. SENDMAIL_MAP_TYPE is the database
# type to use when calling makemap.
#
SENDMAIL_MAP_SRC+= mailertable domaintable bitdomain uucpdomain \
genericstable virtusertable access
SENDMAIL_MAP_OBJ=
SENDMAIL_MAP_TYPE?= hash
.for _f in ${SENDMAIL_MAP_SRC} userdb
.if exists(${_f})
SENDMAIL_MAP_OBJ+= ${_f}.db
.endif
.endfor
#
# The makemap command is used to generate a hashed map from the textfile.
#
.for _f in ${SENDMAIL_MAP_SRC}
.if (exists(${_f}.sample) && !exists(${_f}))
${_f}: ${_f}.sample
sed -e 's/^/#/' < ${.OODATE} > ${.TARGET}
.endif
${_f}.db: ${_f}
${MAKEMAP} ${SENDMAIL_MAP_TYPE} ${.TARGET} < ${.OODATE}
.endfor
userdb.db: userdb
${MAKEMAP} btree ${.TARGET} < ${.OODATE}
#
# The .cf file needs to be recreated if the templates were modified.
#
M4FILES!= find ${SENDMAIL_CF_DIR} -type f -name '*.m4' -print
#
# M4(1) is used to generate the .cf file from the .mc file.
#
.SUFFIXES: .cf .mc
.mc.cf: ${M4FILES}
${M4} -D_CF_DIR_=${SENDMAIL_CF_DIR}/ ${SENDMAIL_M4_FLAGS} \
${SENDMAIL_CF_DIR}/m4/cf.m4 ${@:R}.mc > ${.TARGET}
#
# Aliases are handled separately since they normally reside in /etc
# and can be rebuild without the help of makemap.
#
${SENDMAIL_ALIASES}.db: ${SENDMAIL_ALIASES}
${SENDMAIL} -bi
#
# ------------------------------------------------------------------------
#
all: cf maps aliases
clean:
depend:
cf: ${INSTALL_CF}
submit.cf: submit.mc
.ifdef SENDMAIL_SET_USER_ID
@echo ">>> ERROR: You should not create a submit.cf file if you are using a"
@echo " set-user-ID sendmail binary (SENDMAIL_SET_USER_ID is set"
@echo " in make.conf)."
@false
.endif
maps: ${SENDMAIL_MAP_OBJ}
aliases: ${SENDMAIL_ALIASES}.db
install: ${INSTALL_CF}
.if ${INSTALL_CF} != /etc/mail/sendmail.cf
${INSTALL} -c -m ${SHAREMODE} ${INSTALL_CF} /etc/mail/sendmail.cf
.endif
start start-mta start-mspq:
@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
echo -n 'Starting:'; \
sh ${SENDMAIL_START_SCRIPT} $@; \
echo '.'; \
fi
stop stop-mta stop-mspq:
@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
echo -n 'Stopping:'; \
sh ${SENDMAIL_START_SCRIPT} $@; \
echo '.'; \
fi
restart restart-mta restart-mspq:
@if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
echo -n 'Restarting:'; \
sh ${SENDMAIL_START_SCRIPT} $@; \
echo '.'; \
fi
# User defined targets
.if exists(Makefile.local)
.include "Makefile.local"
.endif