.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SA-COMPILE 1p" .TH SA-COMPILE 1p "2022-09-10" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" sa\-compile \- compile SpamAssassin ruleset into native code .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBsa-compile\fR [options] .PP Options: .PP .Vb 10 \& \-\-list Output base string list to STDOUT \& \-\-sudo Use \*(Aqsudo\*(Aq for privilege escalation \& \-\-keep\-tmps Keep temporary files instead of deleting \& \-C path, \-\-configpath=path, \-\-config\-file=path \& Path to standard configuration dir \& \-p prefs, \-\-prefspath=file, \-\-prefs\-file=file \& Set user preferences file \& \-\-siteconfigpath=path Path for site configs \& (default: /usr/etc/spamassassin) \& \-\-updatedir=path Directory to place updates \& (default: /var/lib/spamassassin/compiled//4.000000) \& \-\-cf=\*(Aqconfig line\*(Aq Additional line of configuration \& \-D, \-\-debug [area=n,...] Print debugging messages \& \-V, \-\-version Print version \& \-h, \-\-help Print usage message .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" sa-compile uses \f(CW\*(C`re2c\*(C'\fR to compile the site-wide parts of the SpamAssassin ruleset. No part of user_prefs or any files included from user_prefs can be built into the compiled set. .PP This compiled set is then used by the \&\f(CW\*(C`Mail::SpamAssassin::Plugin::Rule2XSBody\*(C'\fR plugin to speed up SpamAssassin's operation, where possible, and when that plugin is loaded. .PP \&\f(CW\*(C`re2c\*(C'\fR can match strings much faster than perl code, by constructing a \s-1DFA\s0 to match many simple strings in parallel, and compiling that to native object code. Not all SpamAssassin rules are amenable to this conversion, however. .PP This requires \f(CW\*(C`re2c\*(C'\fR (see \f(CW\*(C`https://re2c.org/\*(C'\fR), and the C compiler used to build Perl \s-1XS\s0 modules, be installed. .PP Note that running this, and creating a compiled ruleset, will have no effect on SpamAssassin scanning speeds unless you also edit your \f(CW\*(C`v320.pre\*(C'\fR file and ensure this line is uncommented: .PP .Vb 1 \& loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody .Ve .PP Additionally, \*(L"sa-compile\*(R" will not restart \*(L"spamd\*(R" or otherwise cause a scanner to reload the now-compiled ruleset automatically. .SH "OPTIONS" .IX Header "OPTIONS" .IP "\fB\-\-list\fR" 4 .IX Item "--list" Output the extracted base strings to \s-1STDOUT,\s0 instead of generating the C extension code. .IP "\fB\-\-sudo\fR" 4 .IX Item "--sudo" Use \f(CWsudo(8)\fR to run code as 'root' when writing files to the compiled-rules storage area (which is \f(CW\*(C`/var/lib/spamassassin/compiled/5.034/4.000000\*(C'\fR by default). .IP "\fB\-\-quiet\fR" 4 .IX Item "--quiet" Produce less diagnostic output. Errors will still be displayed. .IP "\fB\-\-keep\-tmps\fR" 4 .IX Item "--keep-tmps" Keep temporary files after the script completes, instead of deleting them. .IP "\fB\-C\fR \fIpath\fR, \fB\-\-configpath\fR=\fIpath\fR, \fB\-\-config\-file\fR=\fIpath\fR" 4 .IX Item "-C path, --configpath=path, --config-file=path" Use the specified path for locating the distributed configuration files. Ignore the default directories (usually \f(CW\*(C`/usr/share/spamassassin\*(C'\fR or similar). .IP "\fB\-\-siteconfigpath\fR=\fIpath\fR" 4 .IX Item "--siteconfigpath=path" Use the specified path for locating site-specific configuration files. Ignore the default directories (usually \f(CW\*(C`/etc/spamassassin\*(C'\fR or similar). .IP "\fB\-\-updatedir\fR" 4 .IX Item "--updatedir" By default, \f(CW\*(C`sa\-compile\*(C'\fR will use the system-wide rules update directory: .Sp .Vb 1 \& /var/lib/spamassassin/compiled/5.034/4.000000 .Ve .Sp If the updates should be stored in another location, specify it here. .Sp Note that use of this option is not recommended; if sa-compile is placing the compiled rules the wrong directory, you probably need to rebuild SpamAssassin with different \f(CW\*(C`Makefile.PL\*(C'\fR arguments, instead of overriding sa-compile's runtime behaviour. .IP "\fB\-\-cf='config line'\fR" 4 .IX Item "--cf='config line'" Add additional lines of configuration directly from the command-line, parsed after the configuration files are read. Multiple \fB\-\-cf\fR arguments can be used, and each will be considered a separate line of configuration. .IP "\fB\-p\fR \fIprefs\fR, \fB\-\-prefspath\fR=\fIprefs\fR, \fB\-\-prefs\-file\fR=\fIprefs\fR" 4 .IX Item "-p prefs, --prefspath=prefs, --prefs-file=prefs" Read user score preferences from \fIprefs\fR (usually \&\f(CW\*(C`$HOME/.spamassassin/user_prefs\*(C'\fR) . .IP "\fB\-D\fR [\fIarea,...\fR], \fB\-\-debug\fR [\fIarea,...\fR]" 4 .IX Item "-D [area,...], --debug [area,...]" Produce debugging output. If no areas are listed, all debugging information is printed. Diagnostic output can also be enabled for each area individually; \&\fIarea\fR is the area of the code to instrument. .Sp For more information about which areas (also known as channels) are available, please see the documentation at . .IP "\fB\-h\fR, \fB\-\-help\fR" 4 .IX Item "-h, --help" Print help message and exit. .IP "\fB\-V\fR, \fB\-\-version\fR" 4 .IX Item "-V, --version" Print sa-compile version and exit. .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBMail::SpamAssassin\fR\|(3) \&\fBspamassassin\fR\|(1) \&\fBspamd\fR\|(1) .SH "PREREQUISITES" .IX Header "PREREQUISITES" \&\f(CW\*(C`Mail::SpamAssassin\*(C'\fR \&\f(CW\*(C`re2c\*(C'\fR \&\f(CW\*(C`Mail::SpamAssassin::Plugin::Rule2XSBody\*(C'\fR .SH "BUGS" .IX Header "BUGS" See .SH "AUTHORS" .IX Header "AUTHORS" The Apache SpamAssassin(tm) Project .SH "LICENSE AND COPYRIGHT" .IX Header "LICENSE AND COPYRIGHT" SpamAssassin is distributed under the Apache License, Version 2.0, as described in the file \f(CW\*(C`LICENSE\*(C'\fR included with the distribution. .PP Copyright (C) 2015 The Apache Software Foundation