1 #@ make.rc can be used adjust the set of features, paths, etc.
2 #@ You should have read INSTALL first.
4 #@ . Choosing a predefined CONFIG= disallows further option fine-tuning.
5 #@ (With some exceptions, e.g., OPT_DEBUG.)
6 #@ . Features / options have an OPT_ prefix and need to be assigned
7 #@ a boolean value, as in OPT_SSL=yes. Booleans are 1/0, y/n,
8 #@ true/false, yes/no and on/off (case doesn't matter).
9 #@ The value "require" is also a true boolean, but will in addition
10 #@ cause configuration to fail if the requested condition cannot be
11 #@ satisfied. This value is only available for a subset of options.
12 #@ . Values use VAL_ instead, and are assigned strings.
13 #@ E.g., VAL_PREFIX=/usr/local.
14 #@ Variables which are only used during configuration, building,
15 #@ and / or installation have no prefix, e.g., DESTDIR, VERBOSE, awk.
16 #@ . Specifying settings on the command line will take precedence over
17 #@ the variables in here (correctly triggering build updates as
19 #@ . This file is parsed by the shell: it is in sh(1), not in make(1)
20 #@ syntax. Evaluation occurs *after* it has been read, so command
21 #@ line overwrites take effect. To use multiline values, escape the
22 #@ newlines on all lines but the last with a reverse solidus (back-
23 #@ slash), as in "LINE \".
24 #@ To embed a shell variable unexpanded, use two: "XY=\\${HOME}".
25 #@ The parsing is sequential top-to-bottom (nonetheless), so that
26 #@ shell snippets in a value can refer only to stuff yet defined.
27 #@ . You may NOT comment out anything in here -- if you want to disable
28 #@ a feature, set it to a false boolean.
30 ## IDENTITIES, PATHS AND PROGRAMS ##
32 # The user ID our small privilege-separated helper program will be
33 # SETUID to, shall it be included ($OPT_DOTLOCK).
34 # Installation will then require the chown(1) program (as below) and
35 # sufficient privileges to perform a SETUID to this user ID.
38 # General prefix where S-nail should be installed.
41 # Fine tune individual locations, normally under $VAL_PREFIX.
42 # . the place of the S-nail program.
43 VAL_BINDIR="${VAL_PREFIX}/bin"
44 # . the place of the privilege-separated helper program, the name
45 # of which is [$VAL_SID$VAL_NAIL]-privsep (see below for $VAL_SID &
47 # (Only with $OPT_DOTLOCK.)
48 VAL_LIBEXECDIR="${VAL_PREFIX}/libexec"
50 VAL_MANDIR="${VAL_PREFIX}/share/man"
51 # . of the exemplary resource file.
52 VAL_SYSCONFDIR="${VAL_PREFIX}/etc"
54 # The variable $DESTDIR is prepended to all the paths from above at
55 # installation time; this feature can be used for, e.g., package
56 # building: if $VAL_PREFIX is "/usr/local", but $DESTDIR is set to "here",
57 # then S-nail will still think its $VAL_PREFIX is "/usr/local" whereis the
58 # build system will instead use "here/usr/local".
59 # NOTE: it cannot be set in here, but must be given on the command line
60 # when invoking the "install" make(1) (directly or indirectly).
61 # (That is, if you uncomment it, it'll be update-tracked...)
64 # Where the local mail system stores user $MAIL files.
66 if [ -d /var/spool/mail ]; then \
67 echo /var/spool/mail;\
72 # Path to the local MTA (Mail-Transfer-Agent).
74 if [ -x /usr/bin/sendmail ]; then \
75 echo /usr/bin/sendmail;\
76 elif [ -x /usr/lib/sendmail ]; then \
77 echo /usr/lib/sendmail;\
79 echo /usr/sbin/sendmail;\
82 # Today a lot of systems no longer use sendmail(1), but a different MTA.
83 # To ensure compatibility with sendmail(1), a system called
84 # mailwrapper(8) is often used, which selects the required service by
85 # looking at the name by which the program actually has been invoked.
86 # This variable can be used to adjust this name as necessary.
87 VAL_MTA_ARGV0=sendmail
89 # Default *SHELL* (sh(1) path).
90 # Sometimes we simply invoke a command directly via execlp(2) instead of
91 # indirectly through *SHELL* -- in these cases execlp(2) may fallback to
92 # it's own builtin sh(1) path
95 # Some more default fallback values, some of which are standardized
96 # and (thus)/or documented in the manual (changes not reflected there!).
97 # Note that default paths are often not (shell) quoted when displayed
98 VAL_DEAD_BASENAME=dead.letter
99 VAL_DEAD="~/${VAL_DEAD_BASENAME}"
109 # The following tools may be provided a.k.a. overwritten,
110 # `command -v NAME` is used to query the utility otherwise:
111 # MAKE=, STRIP=, awk=, cat=, chmod=, cp=, cmp=, cksum=,
112 # grep=, mkdir=, mv=, rm=, sed=, sort=, tee=, tr=
113 # Usually in administrator paths:
114 # chown= [$OPT_DOTLOCK]
115 # Note that awk(1), rm(1) and tr(1) are needed before this file is read,
116 # all other utilities will be checked afterwards only. For
117 # cross-compilation setting $MAKE and $STRIP may be necessary. Due to
118 # the evaluation order of the build system all those programs are
119 # usually needed, but by setting any of the variables to true(1), as in
120 # chown=/usr/bin/true, availability of unneeded programs can be faked.
121 # We require uname(1) -s, command(1) -v, echo(1), etc.
122 # uname(1) can be circumvented by setting $OS.
126 # Some operating systems only support the C/POSIX (7-bit, but eight bit
127 # bytes are passed through unchanged) and UTF-8 based locales, e.g.,
128 # Plan9, Musl based Linux variants and newer OpenBSD. For such
129 # environments we can avoid a lot of tests and may enable support for
130 # features which would otherwise not be available.
131 # Note that $OS is available as normalized all-lowercase upon evaluation
132 OPT_ALWAYS_UNICODE_LOCALE=`\
133 if [ "${OS}" = openbsd ]; then \
139 # For cross-compilation purposes it may be useful to not actually run
140 # systemcall etc. tests (link and run the executable) but only to
141 # perform the link tests necessary to detect host environment.
144 # Shall S-nail try to automatically detect a compiler and provide a set
145 # of known-good compiler flags? If so additions may still be provided
146 # by setting $EXTRA_CFLAGS and $EXTRA_LDFLAGS to whatever is desired.
147 # Thus: set this to false and use your normal $CC / $CFLAGS / $LDFLAGS,
148 # otherwise pass additional flags via $EXTRA_CFLAGS / $EXTRA_LDFLAGS:
149 # $ make EXTRA_CFLAGS=-std=c99 tangerine
150 # Whatever you do, the configuration is fixated and updates will force
151 # rebuilds. And far below in this file there is $OPT_FORCED_STACKPROT,
152 # too, which can be used to cause injection of stack protectors.
155 # It is possible to compile S-nail as a "single-source", meaning that
156 # all source files are injected into a single compilation unit, which is
157 # then compiled. This allows the compiler to perform much more
158 # optimizations, and also reduces the management overhead that is used
159 # for / needed by the linker.
162 # Character set conversion enables reading and sending of mails in
163 # multiple character sets through usage of the iconv(3) library. Please
164 # read the manual section "Character sets" for the complete picture.
165 # This should usually be enabled; it can be "require"d.
168 # Major switch to toggle *all* network related protocols
169 # (POP3,SMTP) and related/dependent stuff (GSS-API,SSL);
173 # If $OPT_SOCKETS: support for Secure Socket Layer (Transport Layer
174 # Security, TLS), i.e., encrypted socket connections; can be "require"d.
175 # This needs the OpenSSL libraries (<http://www.openssl.org>).
176 # This needs the OpenSSL (https://www.openssl.org) or LibreSSL
177 # (http://www.libressl.org) libraries.
180 # If $OPT_SSL: shall S-nail (try to) use mechanisms to support more
181 # digest and cipher algorithms than the few that are documented? For
182 # S/MIME *smime-cipher* for example this will cause
183 # EVP_get_cipherbyname(3) to be tried shall the (S-nail-) builtin
184 # knowledge not suffice to understand the user request. Will create
185 # a large statically linked binary; dynamically linked the costs only
186 # arise once the extended lookup is actually needed (the first time).
187 # This can be "require"d.
188 OPT_SSL_ALL_ALGORITHMS=yes
190 # If $OPT_SOCKETS: support for SMTP protocol?
191 # (Directly sending mails over the network) Can be "require"d.
194 # If $OPT_SOCKETS: support for POP3 protocol?
195 # (Download of mails via POP protocol) Can be "require"d.
198 # If $OPT_SOCKETS: support for GSS-API (Generic Security Services
199 # Application Programming Interface) based authentication, e.g.,
200 # Kerberos v5? Available for SMTP; can be "require"d.
203 # Enabling the MD5 message digest adds support for several
204 # authentication possibilities: POP3 (APOP), SMTP (CRAM-MD5).
205 # If you don't need those, you may turn them off by excluding MD5.
208 # If $OPT_SOCKETS: support for parsing of user and password credentials
209 # from the ~/.netrc file ($NETRC; see *netrc-lookup* manual entry).
212 # If $OPT_SOCKETS: passwords can also be looked up through an external
213 # "agent" in order to allow for encrypted password storage (see
214 # *agent-shell-lookup*).
215 # [Obsolete] Even though marked *v15-compat* this feature has been
216 # obsoleted; please use an encrypted .netrc file (via *netrc-pipe*) or
217 # encrypt a complete resource file and load this like, e.g.,
218 # source "gpg -qd ~/.mailprivate.gpg | "
221 # IDNA (internationalized domain names for applications) offers users
222 # the possibility to use domain names in their native language, i.e., to
223 # use non-US-ASCII content, as in, e.g., <www.räksmörgåsa.example>,
224 # which the IDNA algorithm would convert to
225 # <www.xn--rksmrgsa-0zap8p.example>. :) This either needs idnkit
226 # (https://www.nic.ad.jp/ja/idn/idnkit/download/) or the GNU Libidn
227 # library (https://www.gnu.org/software/libidn/). It can be
231 # IMAP-style SEARCH expressions can be supported. This addressing mode
232 # is available with all types of folders; for folders not located on
233 # IMAP servers, or for servers unable to execute the SEARCH command, the
234 # search is performed locally.
237 # Regular expression (re_format(7)) support for searches, conditional
238 # expressions etc., we use the extended ones, then; can be "require"d.
241 # Line editing and -history (manual "On terminal and line editor").
243 # If ISO C (ISO/IEC 9899:1990/Amendment 1:1995) is supported on the
244 # system then our builtin MLE (Mailx-Line-Editor) version can be used.
245 # An enabled & available OPT_TERMCAP may affect and improve the MLE.
248 # Add support for history management.
250 # Add support for `(un)?bind'ing of key sequences
253 # Use termcap(5) for terminal control; can be "require"d.
254 # Today most environments ship a termcap(5) that in fact is part of
255 # terminfo(5), and acts as a converting wrapper for this library.
256 # To avoid this redundancy we also support terminfo(5), and use it
257 # instead if we find it (assuming that termcap(5) is a stub, then).
258 # Note that terminfo(5) offers access to more key sequences, e.g.,
259 # kLFT5, for which no termcap(5) entry exists.
260 # terminfo(5) support can (thus) be "require"d.
262 OPT_TERMCAP_VIA_TERMINFO=yes
264 # Enable the `errors' command; S-nail is a console-based application and
265 # thus errors may fly by pretty fast as other operations are in
266 # progress; or $PAGERs are started and clear errors off the screen. If
267 # enabled errors are duplicated as they happen and the `errors' command
268 # will show them when asked to.
271 # Interaction with a spam email filter is possible.
272 # Refer to all commands and variables with a "spam" prefix, and
273 # see the manual example section "Handling spam".
275 # Support for interaction with spamassassin(1)s spamc(1).
276 # . [Obsolete] OPT_SPAM_SPAMD:
277 # Direct communication with spamassassin(1)s spamd(1).
278 # Needs unix(4) domain sockets (checked). Can be "require"d.
280 # Generic filter hook which can be used with e.g. bogofilter(1)
281 # and sylfilter(1): see documentation for the *spam-filter-**
282 # variables for expected application behaviour.
287 # If given an optional argument the `help' command will print a help
288 # string only for the mentioned command; those strings take up space and
289 # so one may disable this feature.
292 # A simple line-based quoting mechanism can be made available via the
293 # *quote-fold* mechanism. This will be turned off automatically if the
294 # required character classification is not available on the host.
296 # TODO shouldn't wrap lines when only WS or a NL-escaping \ follows
299 # We do have a very primitive HTML tagsoup filter which can be used to
300 # convert HTML to plain text for display purposes. If enabled it'll be
301 # used for all MIME types which have the @h@ or @H@ type markers (more
302 # on this in the manual section "The mime.types FILES"). And which
303 # don't have any user defined MIME type handler, of course.
304 OPT_FILTER_HTML_TAGSOUP=yes
306 # A simple form of coloured output can optionally be produced.
309 # File dotlocking is performed for "system mailbox" (%[USER] and
310 # %:ANYFILE) MBOX files: when synchronizing any such FILE a FILE.lock
311 # file will be created in the directory of FILE, for the duration of the
313 # Set $OPT_DOTLOCK to support this traditional mail spool file locking.
314 # $VAL_MAIL(s) where normal system mailboxes reside are usually not
315 # writable by normal users, except that a user may read and write his
316 # own mailbox. But this means that a program run by the user cannot
317 # create a .lock file! The solution is to install a privilege-separated
318 # mini-program that has the sole purpose and functionality of managing
319 # the dotlock file in such situations -- and only then, as a last
320 # ressort. With it dotlock files can be created for any mailbox for
321 # which the invoking user has read (or read-write) permissions, and
322 # under the UID and GID of the mailbox itself! We call it -privsep.
323 # $OPT_DOTLOCK can be "require"d.
327 ## Normal users should not need to read any further
329 ## PATHS AND PROGRAMS, DEVELOPMENT ##
331 # To ease the life of forkers and packagers "our" name can be changed.
332 # The name is build by concatenating $VAL_SID and $VAL_NAIL, i.e.,
333 # $(VAL_SID)$(VAL_NAIL). Note that the final string must be longer than
334 # tww characters and may not contain any whitespace.
338 # The name of the exemplary resource template.
339 # Note 1: not overwritten by "make install" if yet existent!
340 VAL_SYSCONFRC="${VAL_SID}${VAL_NAIL}.rc"
342 ## FEATURE SET, DEVELOPMENT ##
344 # Use debug compiler flags, enable some additional commands and code
345 # assertions. Note that setting this also enables our own memory
346 # canaries, which require a rather large amount of runtime memory.
349 # Experimental code etc.
350 # Note: this forcefully enables OPT_DEBUG
353 # We use the crypto libraries' MD5 implementation if possible, unless..
356 # If $OPT_DEBUG is true we'll use a simple memory wrapper with
357 # canaries. This interferes with memory debuggers like valgrind(1) or
358 # the LLVM -fsanitize stuff. Enable this to not use our wrapper.
361 # Our functions are instrumented with Not-Yet-Dead chirps, which print
362 # a function call trace when the program crashes. Whereas NYD will be
363 # used automatically when either of $OPT_DEBUG and $OPT_DEVEL is
364 # defined, an extended level of NYD is compiled in only on explicit
366 # TODO Separation in between NYD and NYD2 not yet fully done.
369 # With $OPT_AUTOCC we will use stack protector guards shall the
370 # detected compiler support them; this goes in line with our own (heap)
371 # memory canaries and will detect buffer overflows. It is usually only
372 # useful during development, i.e., in a debug environment that tests all
373 # aspects of a program.
374 OPT_FORCED_STACKPROT=`\
375 if feat_yes DEVEL || feat_yes DEBUG; then \
381 # vim:set tw=72: s-it-mode