
Dependencies
============

This program is intended for old Unix machines. It should run on any Unix like
system that provide the things listed below.
Note: The following requirements are sufficient for all bundled libraries too.

Mandatory:
- Operating system that provide the following interfaces:
  - POSIX.1-1990
  - POSIX.1b-1993 Realtime extention, Timers (TMR) option
  - POSIX.1c-1996 Threads (THR) extension and Thread-Safe Functions (TSF) option
  - 4.3BSD socket API (with a 'select()' implementation that supports sockets)
  - POSIX.2-1992 compliant shell and utilities
  - POSIX.2a-1992 User Portability Utilities (UP) extension
- getconf
  Utility from X/Open Portability Guide Issue 4 (XPG4) to query system variables
- C/C++ compiler
  Should be a matching pair that is at least C90/C++98 compliant.
  Older compilers may work too (a workaround is included for egcs).
  If the compilers are capable of building the FLTK library, they should be
  sufficient to compile the program too.
- FLTK 1.3 or 1.4 (compiled with multithreading support enabled)
  Glyph substitution using multiple fonts is available if FLTK 1.4 is compiled
  with the Cocoa backend on macOS or with Pango otherwise.
  Sourcecode can be downloaded from <https://www.fltk.org/>

Optional:
- POSIX.2-1992 C language binding (CLB)
  Required if the filter (scoring) subsystem should handle regular expressions
  Required if the filter (scoring) subsystem should handle group wildmats
- POSIX.1b-1993 realtime extention, File Synchronization (FSC) option
  If available, 'fsync()' is executed on config, group and database files after
  changes
- POSIX.1-2001
  If available, the timestamp in the "Date" headerfield is created in local time
  as recommended by RFC 5322 (can be disabled via "Edit->Configuration" in GUI)
  Sufficient for automatic TLS certificate CRL maintenance
- Operating system with X/Open System Interface (XSI) extension
  (with a 'poll()' implementation that supports sockets)
  Required for National Language Support (NLS)
  Sufficient for automatic TLS certificate CRL maintenance
- OpenSSL 1.x or 3.x (a compatibility mode for LibreSSL is available)
  Sourcecode for OpenSSL can be downloaded from <https://www.openssl.org/>
  Sourcecode for LibreSSL can be downloaded from <https://www.libressl.org/>
  Required for Transport Layer Security (TLS) support
  Required for generation of Cancel-Lock and Cancel-Key header fields
- zlib
  Sourcecode for zlib can be downloaded from <https://zlib.net/>
  Required for NNTP compression extension (DEFLATE algorithm)
- xdg-utils
  Required for sending e-mail and clicking on hyperlinks that cannot be
  handled internally
- makedepend
  Required if the compilers preprocessor can't create dependencies
- nroff
  Required to build the HTML version of the man page
- man2html (from the schilytools package)
  Required to build the HTML version of the man page
- doxygen 1.12.0 (compiled with LaTeX support)
  Required to build the documentation (except the manual page)
- LaTeX (TeX Live)
  Required to build the documentation (except the manual page)


Building from source
====================

This package is customized with the config file 'CONFIG'.
If the listed utilities are not POSIX.2 compliant on your operating system:
Install and specify compliant versions (e.g. nawk if your awk is broken).
If you have multiple versions of an utility with the same name and want to
override the search order, add an absolute path (e.g. /usr/xpg6/bin/sed).

You can override the compilers and flags with environment variables (Type
'./mkconfig --help' for a list). Use this only to modify compiler and linker
flags. Never override the compilers until you know what you are doing (in
general C++ code generated with different compilers cannot be linked together).
Compile FLTK with the desired compilers instead and the build system of this
package will adopt them from there automatically (via 'fltk-config' tool).

The commands to create dependencies can be customized in the config file
'CONFIG'. Examples are provided for '$(CC) -M' and 'makedepend' style.

Note for TLS:
The header files for OpenSSL (or LibreSSL respectively) must be installed!
If you have multiple versions installed, ensure that $PATH is configured
correctly so that executing the command line utility "openssl" uses the
utility from the same version as the libraries you link to.

To build anything but the documentation:

Type 'make'.

Debug information for the configuration step is written to file 'config.log'.
If you can't build the package on your machine, please send a problem report
to the package maintainer listed in variable 'CFG_MAINTAINER' in the config file
'CONFIG'.


Test
====

To run some tests:

Type 'make test'.

Note: This will execute the test suites of the bundled libraries too.


Installation
============

The installation prefix 'CFG_PREFIX' can be configured in the file 'CONFIG'. The
value specified there can be overridden with the environment variable 'PREFIX'.
If the environment variable 'DESTDIR' is present, its value will be prepended
to 'CFG_PREFIX'.

Note: To install, you need permissions to write into the hierarchy specified by
'CFG_PREFIX' or 'DESTDIR' respectively.
Before installing a different version of the package to the same location, the
old version must be uninstalled as described below.

To install the program, license file, manual page and NLS catalogs:

Type 'make install'.

To strip unnecessary symbols from binaries:

Type 'make install-strip' (instead of 'make install').


Uninstallation
==============

For every source tree the build system creates a list with the files that were
installed. This list of installed files is preserved until you run
'make install' again, even if you do a 'make distclean' in the meanwhile.
To remove the installed files from the system using this list:

Type 'make uninstall'.

The directory hierarchy is not changed, even if some directories are empty
after uninstallation.

Note: The configuration and article header cache is stored in the home directory
of the users in a hidden directory and are preserved.


Documentation
=============

A manual page is always prepared for installation out of the box.
To build full documentation:

Type 'make documentation'.

You should not have to do this because you can download the compiled
documentation from the project homepage.


Clean up source tree
====================
There are the following clean up rules available:

Type 'make config' to build only the configuration (after 'make distclean').
Type 'make clean' to delete all binary files (and potential documentation).
Type 'make distclean' to additionally delete the configuration.
Type 'make allclean' to delete anything including the list of installed files.


EOF
