Your company here — click to reach over 10,000 unique daily visitors

sa-compile - Man Page

compile SpamAssassin ruleset into native code


sa-compile [options]


  --list                        Output base string list to STDOUT
  --sudo                        Use 'sudo' 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/mail/spamassassin)
  --updatedir=path              Directory to place updates
          (default: /var/lib/spamassassin/compiled/<perlversion>/4.000001)
  --cf='config line'            Additional line of configuration
  -D, --debug [area=n,...]      Print debugging messages
  -V, --version                 Print version
  -h, --help                    Print usage message


sa-compile uses re2c 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.

This compiled set is then used by the  Mail::SpamAssassin::Plugin::Rule2XSBody plugin to speed up SpamAssassin's operation, where possible, and when that plugin is loaded.

re2c can match strings much faster than perl code, by constructing a DFA to match many simple strings in parallel, and compiling that to native object code.  Not all SpamAssassin rules are amenable to this conversion, however.

This requires re2c (see https://re2c.org/), and the C compiler used to build Perl XS modules, be installed.

Note that running this, and creating a compiled ruleset, will have no effect on SpamAssassin scanning speeds unless you also edit your v320.pre file and ensure this line is uncommented:

  loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody

Additionally, "sa-compile" will not restart "spamd" or otherwise cause a scanner to reload the now-compiled ruleset automatically.



Output the extracted base strings to STDOUT, instead of generating the C extension code.


Use sudo(8) to run code as 'root' when writing files to the compiled-rules storage area (which is /var/lib/spamassassin/compiled/5.040/4.000001 by default).


Produce less diagnostic output.  Errors will still be displayed.


Keep temporary files after the script completes, instead of deleting them.

-C path, --configpath=path, --config-file=path

Use the specified path for locating the distributed configuration files. Ignore the default directories (usually /usr/share/spamassassin or similar).


Use the specified path for locating site-specific configuration files.  Ignore the default directories (usually /etc/mail/spamassassin or similar).


By default, sa-compile will use the system-wide rules update directory:


If the updates should be stored in another location, specify it here.

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 Makefile.PL arguments, instead of overriding sa-compile's runtime behaviour.

--cf='config line'

Add additional lines of configuration directly from the command-line, parsed after the configuration files are read.   Multiple --cf arguments can be used, and each will be considered a separate line of configuration.

-p prefs, --prefspath=prefs, --prefs-file=prefs

Read user score preferences from prefs (usually $HOME/.spamassassin/user_prefs) .

-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; area is the area of the code to instrument.

For more information about which areas (also known as channels) are available, please see the documentation at <https://wiki.apache.org/spamassassin/DebugChannels>.

-h,  --help

Print help message and exit.

-V,  --version

Print sa-compile version and exit.

See Also

Mail::SpamAssassin(3) spamassassin(1) spamd(1)


Mail::SpamAssassin re2c Mail::SpamAssassin::Plugin::Rule2XSBody


See <https://issues.apache.org/SpamAssassin/>


The Apache SpamAssassin(tm) Project <https://spamassassin.apache.org/>


2024-05-27 perl v5.40.0 User Contributed Perl Documentation