1 #@ make.rc can be used adjust the set of features, paths, etc.
2 #@ You should have read "INSTALL" first.
4 #@ . Specifying settings on the command line will take precedence over
5 #@ the variables in here (correctly triggering build updates as
7 #@ . Choosing one of the predefined CONFIG= sets overwrites a lot of
8 #@ items that can be set in here / from the command line.
9 #@ . This file is parsed by the shell: it is in sh(1), not in make(1)
10 #@ syntax. Evaluation occurs *after* it has been read, so command
11 #@ line overwrites take effect. To use multiline values, escape the
12 #@ newlines on any but the last line with a backslash, as in "LINE \".
13 #@ The parsing is sequential top-to-bottom (nonetheless) so that shell
14 #@ snippets in a value can refer only to stuff yet defined.
15 #@ . Boolean values can be set via 1/0, true/false, yes/no and on/off
16 #@ (case doesn't matter), other values result in an error.
17 #@ . However, the value "require" is also a true boolean, but will in
18 #@ addition cause configuration to fail if the requested feature is
19 #@ missing. This special behaviour is only tested by a logical subset
21 #@ . You may NOT comment out anything in here -- if you want to disable
22 #@ a feature, set it to a false boolean.
24 ## PATHS AND PROGRAMS ##
26 # General prefix where S-nail should be installed.
29 # Fine tune individual locations, normally under $PREFIX.
30 # . the place of the S-nail program.
31 BINDIR="${PREFIX}/bin"
32 # Only if WANT_DOTLOCK is enabled:
33 # . the place of the privilege-separated helper program.
34 LIBEXECDIR="${PREFIX}/libexec"
36 MANDIR="${PREFIX}/share/man"
37 # . of the exemplary resource file.
38 SYSCONFDIR="${PREFIX}/etc"
40 # This variable is prepended to all the paths from above at installation
41 # time; this feature can be used for, e.g., package building: if $PREFIX
42 # is "/usr/local", but $DESTDIR is set to "here", then S-nail will still
43 # think its $PREFIX is "/usr/local" whereis the build system will
44 # instead use "here/usr/local".
47 # Where the local mail system stores user mail (mbox) files.
49 if [ -d /var/spool/mail ]; then \
50 echo /var/spool/mail;\
55 ## TODO In v15 we will have a clean separation in between options (OPT_) and
56 ## TODO values (VAL_). This is better than the current WANT_ and XYZ mess.
57 ## TODO Start today with a few
59 # Path to the local MTA (Mail Transport Agent).
61 if [ -x /usr/bin/sendmail ]; then \
62 echo /usr/bin/sendmail;\
63 elif [ -x /usr/lib/sendmail ]; then \
64 echo /usr/lib/sendmail;\
66 echo /usr/sbin/sendmail;\
69 # Today a lot of systems no longer use sendmail(1), but a different MTA.
70 # To ensure compatibility with sendmail(1), a system called
71 # mailwrapper(8) is often used, which selects the required service by
72 # looking at the name by which the program actually has been invoked.
73 # This variable can be used to adjust this name as necessary.
74 VAL_SENDMAIL_PROGNAME=sendmail
76 # Default *SHELL* (sh(1) path).
77 # Sometimes we simply invoke a command directly via execlp(2) instead of
78 # indirectly through *SHELL* -- in these cases execlp(2) may fallback to
79 # it's own builtin sh(1) path
82 # Some more default fallback values, some of which are standardized
83 # and (thus)/or documented in the manual (changes not reflected there!)
84 VAL_DEAD=~/dead.letter
94 # The following tools may be provided a.k.a. overwritten,
95 # `command -v NAME` is used to query the utility otherwise:
96 # MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=, cksum=,
97 # grep=, mkdir=, mv=, rm=, sed=, sort=, tee=, tr=
98 # Usually in administrator paths:
99 # chown= [WANT_DOTLOCK]
100 # Note that awk(1), rm(1) and tr(1) are needed before this file is read,
101 # all other utilities will be checked afterwards only. For
102 # cross-compilation setting MAKE= and STRIP= may be necessary. Due to
103 # the evaluation order of the build system all those programs are
104 # usually needed, but by setting any of the variables to true(1), as in
105 # chown=/usr/bin/true, availability of unneeded programs can be faked.
106 # We require uname(1) -s, command(1) -v, echo(1), etc.
107 # uname(1) can be circumvented by setting $OS.
111 # Shall S-nail try to automatically detect a compiler and provide a set
112 # of known-good compiler flags? If so additions may still be provided
113 # by setting $ADDCFLAGS and $ADDLDFLAGS to whatever is desired.
114 # Thus: set this to false and use your normal $CC / $CFLAGS / $LDFLAGS,
115 # set this to true and pass additional flags via ADDCFLAGS / ADDLDFLAGS:
116 # $ make ADDCFLAGS=-std=c99 install
117 # Whatever you do, the configuration is fixated and updates will force
118 # rebuilds. And far below in this file there is WANT_FORCED_STACKPROT,
119 # too, which can be used to cause injection of stack protectors.
122 # It is possible to compile S-nail as a "single-source", meaning that
123 # all source files are injected into a single compilation unit, which is
124 # then compiled. This allows the compiler to perform much more
125 # optimizations, and also reduces the management overhead that is used
126 # for / needed by the linker.
129 # Character set conversion enables reading and sending of mails in
130 # multiple character sets through usage of the iconv(3) library. Please
131 # read the manual section "Character sets" for the complete picture.
132 # This should usually be enabled; it can be "require"d.
135 # Major switch to toggle *all* network related protocols
136 # (POP3,SMTP) and related/dependent stuff (GSS-API,SSL);
140 # If $WANT_SOCKETS: support for Secure Socket Layer (Transport Layer
141 # Security, TLS), i.e., encrypted socket connections; can be "require"d.
142 # This needs the OpenSSL libraries (<http://www.openssl.org>).
145 # If $WANT_SSL: shall S-nail (try to) use mechanisms to support more
146 # digest and cipher algorithms than the few that are documented? For
147 # S/MIME *smime-cipher* for example this will cause
148 # EVP_get_cipherbyname(3) to be tried shall the (S-nail-) builtin
149 # knowledge not suffice to understand the user request. Will create
150 # a large statically linked binary; dynamically linked the costs only
151 # arise once the extended lookup is actually needed (the first time).
152 # This can be "require"d.
153 WANT_SSL_ALL_ALGORITHMS=yes
155 # If $WANT_SOCKETS: support for SMTP protocol?
156 # (Directly sending mails over the network) Can be "require"d.
159 # If $WANT_SOCKETS: support for POP3 protocol?
160 # (Download of mails via POP protocol) Can be "require"d.
163 # If $WANT_SOCKETS: support for GSS-API (Generic Security Services
164 # Application Programming Interface) based authentication, e.g.,
165 # Kerberos v5? Available for SMTP; can be "require"d.
168 # Enabling the MD5 message digest adds support for several
169 # authentication possibilities: POP3 (APOP), SMTP (CRAM-MD5).
170 # If you don't need those, you may turn them off by excluding MD5.
173 # If $WANT_SOCKETS: support for parsing of user and password credentials
174 # from the ~/.netrc file ($NETRC; see *netrc-lookup* manual entry).
177 # If $WANT_SOCKETS: passwords can also be looked up through an external
178 # "agent" in order to allow for encrypted password storage (see
179 # *agent-shell-lookup*).
182 # IDNA (internationalized domain names for applications) offers users
183 # the possibility to use domain names in their native language, i.e., to
184 # use non-US-ASCII content, as in, e.g., <www.räksmörgåsa.example>,
185 # which the IDNA algorithm would convert to
186 # <www.xn--rksmrgsa-0zap8p.example>. :) This either needs idnkit
187 # (<https://www.nic.ad.jp/ja/idn/idnkit/download/>) or the GNU Libidn
188 # library (<https://www.gnu.org/software/libidn/>). It can be
192 # IMAP-style SEARCH expressions can be supported. This addressing mode
193 # is available with all types of folders; for folders not located on
194 # IMAP servers, or for servers unable to execute the SEARCH command, the
195 # search is performed locally.
198 # Regular expression (re_format(7)) support for searches, conditional
199 # expressions etc., we use the extended ones, then; can be "require"d.
202 # Line editing and -history (manual "On terminal and line editor").
203 # One may choose in between different line editors. Note that (1) only
204 # the builtin MLE (may) map(s) 1:1 to the behaviour as is documented in
205 # the manual and (2) these are tested in the shown order:
207 # The GNU readline(3) compatible interface; can be "require"d.
209 # If ISO C (ISO/IEC 9899:1990/Amendment 1:1995) is supported on the
210 # system then our builtin MLE (Mailx-Line-Editor) version can be used.
211 # An enabled & available WANT_TERMCAP may affect and improve the MLE.
215 # All line editors optionally support history management.
217 # The MLE optionally supports `(un)?bind'ing of key sequences
218 WANT_KEY_BINDINGS=yes
220 # Use termcap(5) for terminal control; can be "require"d.
221 # Today most environments ship a termcap(5) that in fact is part of
222 # terminfo(5), and acts as a converting wrapper for this library.
223 # To avoid this redundancy we also support terminfo(5), and use it
224 # instead if we find it (assuming that termcap(5) is a stub, then).
225 # Note that terminfo(5) offers access to more key sequences, e.g.,
226 # kLFT5, for which no termcap(5) entry exists.
227 # terminfo(5) support can (thus) be "require"d.
229 WANT_TERMCAP_PREFER_TERMINFO=yes
231 # Enable the `errors' command; S-nail is a console-based application and
232 # thus errors may fly by pretty fast as other operations are in
233 # progress; or $PAGERs are started and clear errors off the screen. If
234 # enabled errors are duplicated as they happen and the `errors' command
235 # will show them when asked to.
238 # Interaction with a spam email filter is possible.
239 # Refer to all commands and variables with a "spam" prefix, and
240 # see the manual example section "Handling spam".
242 # Support for interaction with spamassassin(1)s spamc(1).
244 # Direct communication with spamassassin(1)s spamd(1).
245 # Needs unix(4) domain sockets (checked). Can be "require"d.
246 # . WANT_SPAM_FILTER:
247 # Generic filter hook which can be used with e.g. bogofilter(1)
248 # and sylfilter(1): see documentation for the *spam-filter-**
249 # variables for expected application behaviour.
254 # If given an optional argument the `help' command will print a help
255 # string only for the mentioned command; those strings take up space and
256 # so one may disable this feature.
259 # A simple line-based quoting mechanism can be made available via the
260 # *quote-fold* mechanism. This will be turned off automatically if the
261 # required character classification is not available on the host.
262 # TODO shouldn't wrap lines when only WS or a NL-escaping \ follows
265 # We do have a very primitive HTML tagsoup filter which can be used to
266 # convert HTML to plain text for display purposes. If enabled it'll be
267 # used for all MIME types which have the @h@ or @H@ type markers (more
268 # on this in the manual section "THE mime.types FILES"). And which
269 # don't have any user defined MIME type handler, of course.
270 WANT_FILTER_HTML_TAGSOUP=yes
272 # A simple form of coloured output can optionally be produced.
275 # File dotlocking is performed for "system mailbox" (%[USER] and
276 # %:ANYFILE) MBOX files: when synchronizing any such FILE a FILE.lock
277 # file will be created in the directory of FILE, for the duration of the
279 # Set WANT_DOTLOCK to support this traditional mail spool file locking.
280 # MAILSPOOL(s) where normal system mailboxes reside are usually not
281 # writable by normal users, except that a user may read and write his
282 # own mailbox. But this means that a program run by the user cannot
283 # create a .lock file! The solution is to install a privilege-separated
284 # mini-program that has the sole purpose and functionality of managing
285 # the dotlock file in such situations -- and only then, as a last
286 # ressort. Our small helper will be installed in LIBEXECDIR, SETUID to
287 # the PRIVSEP_USER (usually root). With it dotlock files can be created
288 # for any mailbox for which the invoking user has read (or read-write)
289 # permissions, and under the UID and GID of the mailbox itself!
290 # The actual installation make targets will require the chown(1) program
291 # (as above) and require sufficient privileges to SETUID to PRIVSEP_USER.
292 # WANT_DOTLOCK can be "require"d.
297 ## Normal users should not need to read any further
299 ## PATHS AND PROGRAMS, DEVELOPMENT ##
301 # To ease the life of forkers and packagers "our" name can be changed.
302 # The name is build by concatenating $SID and $NAIL, i.e.,
303 # $(SID)$(NAIL). Note that the final string must be longer than two
304 # characters and may not contain any whitespace.
308 # The name of the exemplary resource template.
309 # Note 1: it's not overwritten by "make install" if it yet exists!
310 SYSCONFRC="${SID}${NAIL}.rc"
312 ## FEATURE SET, DEVELOPMENT ##
314 # Use debug compiler flags, enable some additional commands and code
315 # assertions. Note that setting this also enables our own memory
316 # canaries, which require a rather large amount of runtime memory, and
317 # forcefully disables alloca(3) stack memory usage (see $WANT_NOALLOCA
318 # below), so as to be able to track usage of "stack memory" via our
322 # Experimental code etc.
323 # Note: this will be forcefully set (again) if $WANT_DEBUG=yes.
326 # We use the crypto libraries' MD5 implementation if possible, unless..
329 # The codebase makes a lot of use of alloca(3), and this will remain
330 # since S-nail will continue to be compliant to ISO C89, which has no
331 # variable ("flexible", sigh) arrays, etc. For testing purposes it is
332 # however nice to use the much slower normal S-nail heap memory
334 # Note: this will be forcefully set (again) if $WANT_DEBUG=yes.
335 WANT_NOALLOCA="${WANT_DEBUG}"
337 # If $WANT_DEBUG is true we'll use a simple memory wrapper with
338 # canaries. This interferes with memory debuggers like valgrind(1) or
339 # the LLVM -fsanitize stuff. Enable this to not use our wrapper.
342 # Our functions are instrumented with Not-Yet-Dead chirps, which print
343 # a function call trace when the program crashes. Whereas NYD will be
344 # used automatically when either of WANT_DEBUG and WANT_DEVEL is
345 # defined, an extended level of NYD is compiled in only on explicit
347 # TODO Separation in between NYD and NYD2 not yet fully done.
350 # With $WANT_AUTOCC we will use stack protector guards shall the
351 # detected compiler support them; this goes in line with our own (heap)
352 # memory canaries and will detect buffer overflows. It is usually only
353 # useful during development, i.e., in a debug environment that tests all
354 # aspects of a program.
355 WANT_FORCED_STACKPROT=`\
356 if feat_yes DEVEL || feat_yes DEBUG; then \
362 # vim:set tw=72: s-it-mode