2 # $FreeBSD: src/etc/mail/Makefile,v 1.9.2.23 2003/02/12 03:57:52 gshapiro Exp $
4 # This Makefile provides an easy way to generate the configuration
5 # file and database maps for the sendmail(8) daemon.
7 # The user-driven targets are:
9 # all - Build cf, maps and aliases
10 # cf - Build the .cf file from .mc file
11 # maps - Build the feature maps
12 # aliases - Build the sendmail aliases
13 # install - Install the .cf file as /etc/mail/sendmail.cf
15 # For acting on both the MTA daemon and MSP queue running daemon:
16 # start - Start both the sendmail MTA daemon and MSP queue running
17 # daemon with the flags defined in /etc/defaults/rc.conf or
19 # stop - Stop both the sendmail MTA daemon and MSP queue running
21 # restart - Restart both the sendmail MTA daemon and MSP queue running
24 # For acting on just the MTA daemon:
25 # start-mta - Start the sendmail MTA daemon with the flags defined in
26 # /etc/defaults/rc.conf or /etc/rc.conf
27 # stop-mta - Stop the sendmail MTA daemon
28 # restart-mta - Restart the sendmail MTA daemon
30 # For acting on just the MSP queue running daemon:
31 # start-mspq - Start the sendmail MSP queue running daemon with the
32 # flags defined in /etc/defaults/rc.conf or /etc/rc.conf
33 # stop-mspq - Stop the sendmail MSP queue running daemon
34 # restart-mspq - Restart the sendmail MSP queue running daemon
36 # Calling `make' will generate the updated versions when either the
37 # aliases or one of the map files were changed.
39 # A `make install` is only necessary after modifying the .mc file. In
40 # this case one would normally also call `make restart' to allow the
41 # running sendmail to pick up the changes as well.
43 # ------------------------------------------------------------------------
44 # This Makefile uses `<HOSTNAME>.mc' as the default MTA .mc file. This
45 # can be changed by defining SENDMAIL_MC in /etc/make.conf, e.g.:
47 # SENDMAIL_MC=/etc/mail/myconfig.mc
49 # If '<HOSTNAME>.mc' does not exist, it is created using 'freebsd.mc'
52 # It also uses 'freebsd.submit.mc' as the default mail submission .mc file.
53 # This can be changed by defining SENDMAIL_SUBMIT_MC in /etc/make.conf,
56 # SENDMAIL_SUBMIT_MC=/etc/mail/mysubmit.mc
57 # ------------------------------------------------------------------------
59 # The Makefile knows about the following maps:
60 # access, bitdomain, domaintable, genericstable, mailertable, userdb,
61 # uucpdomain, virtusertable
65 SENDMAIL_MC!= hostname
66 SENDMAIL_MC:= ${SENDMAIL_MC}.mc
69 cp freebsd.mc ${SENDMAIL_MC}
72 SENDMAIL_SUBMIT_MC?= freebsd.submit.mc
74 INSTALL_CF= ${SENDMAIL_MC:R}.cf
76 .ifndef SENDMAIL_SET_USER_ID
77 INSTALL_SUBMIT_CF= ${SENDMAIL_SUBMIT_MC:R}.cf
80 SENDMAIL_ALIASES?= /etc/mail/aliases
83 # This is the directory where the sendmail configuration files are
86 .if exists(/usr/share/sendmail/cf)
87 SENDMAIL_CF_DIR?= /usr/share/sendmail/cf
88 .elif exists(/usr/src/contrib/sendmail/cf)
89 SENDMAIL_CF_DIR?= /usr/src/contrib/sendmail/cf
93 # The sendmail startup script
95 SENDMAIL_START_SCRIPT?= /etc/rc.sendmail
98 # Some useful programs we need.
100 SENDMAIL?= /usr/sbin/sendmail
101 MAKEMAP?= /usr/sbin/makemap
104 # Permissions for generated maps
105 SENDMAIL_MAP_PERMS?= 0640
107 # Set a reasonable default
111 # ------------------------------------------------------------------------
113 # The Makefile picks up the list of files from SENDMAIL_MAP_SRC and
114 # stores the matching .db filenames in SENDMAIL_MAP_OBJ if the file
115 # exists in the current directory. SENDMAIL_MAP_TYPE is the database
116 # type to use when calling makemap.
118 SENDMAIL_MAP_SRC+= mailertable domaintable bitdomain uucpdomain \
119 genericstable virtusertable access
121 SENDMAIL_MAP_TYPE?= hash
123 .for _f in ${SENDMAIL_MAP_SRC} userdb
125 SENDMAIL_MAP_OBJ+= ${_f}.db
130 # The makemap command is used to generate a hashed map from the textfile.
132 .for _f in ${SENDMAIL_MAP_SRC}
133 .if (exists(${_f}.sample) && !exists(${_f}))
135 sed -e 's/^/#/' < ${.OODATE} > ${.TARGET}
139 ${MAKEMAP} ${SENDMAIL_MAP_TYPE} ${.TARGET} < ${.OODATE}
140 chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
144 ${MAKEMAP} btree ${.TARGET} < ${.OODATE}
145 chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
149 # The .cf file needs to be recreated if the templates were modified.
151 M4FILES!= find ${SENDMAIL_CF_DIR} -type f -name '*.m4' -print
154 # M4(1) is used to generate the .cf file from the .mc file.
159 ${M4} -D_CF_DIR_=${SENDMAIL_CF_DIR}/ ${SENDMAIL_M4_FLAGS} \
160 ${SENDMAIL_CF_DIR}/m4/cf.m4 ${@:R}.mc > ${.TARGET}
163 # Aliases are handled separately since they normally reside in /etc
164 # and can be rebuild without the help of makemap.
166 .for _f in ${SENDMAIL_ALIASES}
168 ${SENDMAIL} -bi -OAliasFile=${.ALLSRC}
169 chmod ${SENDMAIL_MAP_PERMS} ${.TARGET}
173 # ------------------------------------------------------------------------
182 cf: ${INSTALL_CF} ${INSTALL_SUBMIT_CF}
184 .ifdef SENDMAIL_SET_USER_ID
187 install: install-cf install-submit-cf
190 install-cf: ${INSTALL_CF}
191 .if ${INSTALL_CF} != /etc/mail/sendmail.cf
192 ${INSTALL} -m ${SHAREMODE} ${INSTALL_CF} /etc/mail/sendmail.cf
196 install-submit-cf: ${INSTALL_SUBMIT_CF}
197 .ifdef SENDMAIL_SET_USER_ID
198 @echo ">>> ERROR: You should not create a submit.cf file if you are using a"
199 @echo " set-user-ID sendmail binary (SENDMAIL_SET_USER_ID is set"
200 @echo " in make.conf)."
203 .if ${INSTALL_SUBMIT_CF} != /etc/mail/submit.cf
204 ${INSTALL} -m ${SHAREMODE} ${INSTALL_SUBMIT_CF} /etc/mail/submit.cf
208 aliases: ${SENDMAIL_ALIASES:%=%.db}
210 maps: ${SENDMAIL_MAP_OBJ}
212 start start-mta start-mspq:
213 @if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
214 echo -n 'Starting:'; \
215 sh ${SENDMAIL_START_SCRIPT} $@; \
219 stop stop-mta stop-mspq:
220 @if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
221 echo -n 'Stopping:'; \
222 sh ${SENDMAIL_START_SCRIPT} $@; \
226 restart restart-mta restart-mspq:
227 @if [ -r ${SENDMAIL_START_SCRIPT} ]; then \
228 echo -n 'Restarting:'; \
229 sh ${SENDMAIL_START_SCRIPT} $@; \
233 # User defined targets
234 .if exists(Makefile.local)
235 .include "Makefile.local"
238 # For the definition of $SHAREMODE
239 .include <bsd.own.mk>