.. -*- mode: rst; coding: utf-8 -*-
.. role:: filename(literal)
.. default-role:: filename

============================================
Star Traders: A Game of Interstellar Trading
============================================

Star Traders is written in the C99 programming language and uses Autoconf
and Automake to handle compilation and installation.  Assuming you have
the needed tools, all you should need to do is run the following commands
from the source directory::

    ./configure
    make
    make install

The first two commands may be run as an ordinary user; the last may need
to be done as the system administrator (root).


.. contents::


Prerequisites
=============

Star Traders requires the following components for successful compilation
and installation:

1.  A working C compiler conforming to ISO/IEC 9899:1999 (also known as
    C99) or later.  Any recent version of the GNU Compiler Collection
    (GCC) or the Clang LLVM Compiler is more than adequate.

2.  An operating system ideally conforming to ISO/IEC 9945-1:2008 (POSIX)
    or to the Open Group Single UNIX Specification version 4 or later.
    In short, any modern Unix or Unix-like system like Linux almost
    certainly qualifies.

    In actual fact, Star Traders uses the GNU Portability Library, so
    many older systems may also work without modification.

3.  A working X/Open Curses-compatible library, such as Ncurses.  Ncurses
    is preferred over system-native libraries, if present.  Locales with
    multibyte character sequences (such as UTF-8) require a
    wide-character version of Curses, such as NcursesW, to work
    correctly.

4.  The GNU Gettext library, version 0.22 or later, to allow the game to
    use languages other than English; this is also called Native Language
    Support.  If you do not have this library (and do not wish to install
    it), you may pass ``--disable-nls`` to the configure script.

5.  The GNU ``libiconv`` library for supporting multiple character
    encodings, if required by the GNU Gettext library.  This is not
    needed on systems with the GNU C Library (``glibc``) version 2.2 or
    later, or on macOS 10.3 or newer.

6.  Development libraries and header files for all of the above.  On many
    systems, these files are part of ``XXX-dev`` or ``XXX-devel``
    packages.

7.  The GNU Perfect Hash Function Generator, ``gperf``.  This utility
    program may be required for parts of the GNU Portability Library.


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

The installation of Star Traders can be broken down into three main
steps: configuration, compilation and the installation proper.

The first step is configuring the package for your compiler and operating
system environment.  As Star Traders uses Autoconf and Automake, all you
need to do in most cases is run ``./configure`` from the top-level
directory of the Star Traders source tree.  The configure script
understands all of the usual Autoconf options; these are explained in
detail in the `Autoconf manual`__.

__ https://www.gnu.org/software/autoconf/manual/autoconf.html#Running-configure-Scripts

This version of the configure script understands the following additional
command line options:

    --disable-nls
            Don’t use Native Language Support.  Star Traders will only
            show untranslated US English text and only accept US ASCII
            keyboard input.
    --with-libintl-prefix=DIR
            Find the GNU Gettext library installed in the *DIR*\ `/lib`
            and *DIR*\ `/include` directories.  This option is needed if
            your library is not installed in `/usr/lib` and
            `/usr/include` (or, more precisely, if the C compiler cannot
            find the library “``.so``” or “``.a``” archive file using the
            standard “``-l``” command line parameter or the relevant
            header files using standard :code:`#include` directives).
    --with-libiconv-prefix=DIR
            Find the GNU ``libiconv`` library installed in the *DIR*\
            `/lib` and *DIR*\ `/include` directories.  This option is
            needed if the GNU Gettext library requires ``libiconv`` on
            your system, and that library is not installed in `/usr/lib`
            and `/usr/include`.
    --with-ncurses
            Force the use of Ncurses over the system’s Curses library.
            In other words, do not search for a native Curses library at
            all.
    --with-ncursesw
            Force the use of the NcursesW library with wide-character
            support.  If NcursesW cannot be found, abort the
            ``configure`` script.
    --without-ncursesw
            Don’t use the NcursesW library.  This will prevent non-8-bit
            character encodings like UTF-8 from working correctly and is
            thus not recommended.
    --without-ncurses
            Don’t use the Ncurses library: use either NcursesW (unless
            ``--without-ncursesw`` is also specified) or the system’s
            normal Curses library.  This option is not recommended.
    --disable-assert
            Turn off all debugging :code:`assert()` statements.

By default, ``configure`` uses `/usr/local` as the top-level (prefix)
install directory.  You can change this by specifying ``--prefix=``\
*DIR* to use *DIR* instead.  For example, you can use a directory in your
own home directory by specifying something like::

    ./configure --prefix=$HOME/opt/trader

You may also specify certain configuration and/or compilation variables
on the command line to override choices made by ``configure``.  For
example, you can specify the compiler flags to use by passing the
``CFLAGS`` variable::

    ./configure CFLAGS="-g -O2 -Wall"

The ``configure`` script has many other options.  You may obtain a list
of these by running::

    ./configure --help

You can also run ``configure`` in a separate build-only directory tree.
This feature requires GNU Make and allows you to keep the source code
tree from being modified by the compilation process.  To use this option,
create a separate `build` directory, then run ``configure``.  For
example, if you placed the Star Traders source code tree in
`$HOME/src/trader-7.21`, you could run something like::

    mkdir $HOME/build/trader-build-7.21
    cd $HOME/build/trader-build-7.21
    $HOME/src/trader-7.21/configure

Once again, the `Autoconf manual`__ describes these options (and many
others).

__ https://www.gnu.org/software/autoconf/manual/autoconf.html#Running-configure-Scripts

Once the package has been configured, you can type ``make`` to compile
it, then ``make install`` to install it.  You can specify the following
command lines, amongst others::

    make all
    make install
    make clean
    make distclean
    make uninstall

The command ``make all`` does the same thing as running ``make`` by
itself: compile the package source code into an executable.

Running ``make install`` copies the executable program and all associated
data and documentation files to those directories specified during
configuration.  If any of these directories require system administrator
access privileges for writing, you will need to run ``make install`` as
system administrator (root).

.. compound::

  If you like, you can specify the ``DESTDIR`` variable to copy all
  installation files to a temporary location before installing them
  later.  For example, if the prefix directory is `/usr/local`, typing::

      make install DESTDIR=/tmp/trader-install

  will copy the final program ``trader`` to
  `/tmp/trader-install/usr/local/bin`, the manual page to
  `/tmp/trader-install/usr/local/share/man/man6` and so on.

The ``make clean`` command will remove most build-generated files, such
as object files generated by the compiler, from the source code or build
directory.  Running ``make distclean`` will do the same, but will remove
the Makefiles generated by ``configure`` as well.  In other words, if you
run ``make distclean``, you will need to rerun ``configure`` if you would
like to recompile Star Traders at a later date.

Finally, ``make uninstall`` will remove the executable program ``trader``
and associated data and documentation files from their final installation
location.  This assumes, of course, that you have *not* run ``make
distclean`` to remove the Makefiles that know the path to which those
files were installed!


Tested Systems
==============

The following operating systems and compilers have been successfully
tested with this version of Star Traders:

=====================================  ======  =====  =========================
Linux distribution                     Arch    Glibc  Compiler
=====================================  ======  =====  =========================
Debian GNU/Linux Unstable (Sid)        x86_64  2.42   GNU C Compiler 16.1.0
Debian GNU/Linux Unstable (Sid)        x86_64  2.42   GNU C Compiler 15.2.0
Debian GNU/Linux Unstable (Sid)        x86_64  2.42   Clang (LLVM) 21.1.8
Debian GNU/Linux 13.5 (Trixie)         x86_64  2.41   GNU C Compiler 14.2.0
Debian GNU/Linux 13.5 (Trixie)         x86_64  2.41   Clang (LLVM) 19.1.7
Ubuntu 26.04.0 LTS (Resolute Raccoon)  x86_64  2.43   GNU C Compiler 15.2.0
Ubuntu 26.04.0 LTS (Resolute Raccoon)  x86_64  2.43   Clang (LLVM) 21.1.8
Ubuntu 25.10 (Questing Quokka)         x86_64  2.42   GNU C Compiler 15.2.0
Ubuntu 25.10 (Questing Quokka)         x86_64  2.42   Clang (LLVM) 20.1.8
Ubuntu 24.04.4 LTS (Noble Numbat)      x86_64  2.39   GNU C Compiler 13.3.0
Ubuntu 24.04.4 LTS (Noble Numbat)      x86_64  2.39   Clang (LLVM) 18.1.3
Ubuntu 22.04.5 LTS (Jammy Jellyfish)   x86_64  2.35   GNU C Compiler 11.4.0
Ubuntu 22.04.5 LTS (Jammy Jellyfish)   x86_64  2.35   Clang (LLVM) 14.0.0
Fedora Linux 44                        x86_64  2.43   GNU C Compiler 16.1.1
Red Hat Enterprise Linux 10.1          x86_64  2.39   GNU C Compiler 14.3.1
Red Hat Enterprise Linux 9.7           x86_64  2.34   GNU C Compiler 11.5.0
Red Hat Enterprise Linux 8.10          x86_64  2.28   GNU C Compiler 8.5.0
Red Hat Enterprise Linux 7.9           x86_64  2.17   GNU C Compiler 4.8.5
Red Hat Enterprise Linux 6.10          x86_64  2.12   GNU C Compiler 4.4.7
CentOS Stream 10                       x86_64  2.39   GNU C Compiler 14.3.1
CentOS Stream 9                        x86_64  2.34   GNU C Compiler 11.5.0
Rocky Linux 8.10                       x86_64  2.28   GNU C Compiler 8.5.0
Rocky Linux 8.10                       x86_64  2.28   Intel oneAPI C 2025.3.2
Rocky Linux 8.10                       x86_64  2.28   Intel C Classic 2021.10.0
openSUSE Leap 16.0                     x86_64  2.40   GNU C Compiler 15.2.0
Arch Linux (2026.05.16)                x86_64  2.43   GNU C Compiler 16.1.1
Slackware Linux 15.0                   x86_64  2.33   GNU C Compiler 11.2.0
=====================================  ======  =====  =========================

=========================  ======  ============================  ============
Operating system           Arch    Compiler                      Notes
=========================  ======  ============================  ============
FreeBSD 15.0               x86_64  Clang (LLVM) 19.1.7           [#freebsd1]_
NetBSD 10.1                x86_64  GNU C Compiler 10.5.0         [#netbsd1]_
macOS 12.6                 x86_64  Apple Clang (LLVM) 14.0.0     [#macos1]_
macOS 12.6                 x86_64  Apple Clang (LLVM) 14.0.0     [#macos2]_
Solaris 11.4.90 (x86_64)   x86_64  GNU C Compiler 15.2.0         [#solaris1]_
Solaris 11.4.90 (x86_64)   i386    GNU C Compiler 15.2.0         [#solaris2]_
Solaris 11.4.90 (x86_64)   x86_64  Oracle Developer Studio 12.6  [#solaris3]_
Solaris 11.4.90 (x86_64)   i386    Oracle Developer Studio 12.6  [#solaris4]_
Haiku R1/beta5             x86_64  GNU C Compiler 13.3.0
Cygwin 3.6.9 (Windows 10)  x86_64  GNU C Compiler 13.4.0
=========================  ======  ============================  ============

.. [#freebsd1] FreeBSD with the ``pkgconf``, ``gettext``,
   ``gettext-runtime``, ``gettext-tools`` and ``libiconv`` binary
   packages installed with ``pkg``\(1), using::

        ./configure --with-libiconv-prefix=/usr/local \
                    --with-libintl-prefix=/usr/local

.. [#netbsd1] NetBSD with the ``pkgconf``, ``gettext``, ``libiconv`` and
   ``ncursesw`` packages installed with ``pkgin``\(1), using::

        ./configure LDFLAGS=-L/usr/pkg/lib

   Note that older versions of NetBSD have a known bug in their
   :code:`strfmon()` function: if the locale is not ``C`` or ``C.UTF-8``,
   amounts may be displayed incorrectly.  For example, under the
   ``en_US.UTF-8`` locale, an amount of $6000 is displayed as
   ``$6,000.0,000.00`` instead of ``$6,000.00``.

   If the current locale is ``C``, game loads and saves will fail with
   the error message ``trader: iconv_open: Invalid argument``.  The
   ``C.UTF-8`` locale works correctly.

.. [#macos1] macOS with Xcode command line tools, with the ``gettext``
   and ``pkg-config`` packages installed with Homebrew, using::

        ./configure

.. [#macos2] macOS with Xcode command line tools, with the ``gettext``,
   ``ncurses`` and ``pkg-config`` packages installed with Homebrew,
   using::

        ./configure PKG_CONFIG_PATH=/usr/local/opt/ncurses/lib/pkgconfig

.. [#solaris1] Solaris,
   using::

        export PKG_CONFIG_PATH=/usr/lib/64/pkgconfig
        ./configure CC="gcc -m64"

.. [#solaris2] Solaris,
   using::

        export PKG_CONFIG_PATH=/usr/lib/32/pkgconfig
        ./configure CC="gcc -m32"

.. [#solaris3] Solaris with Oracle Developer Studio,
   using::

        export PKG_CONFIG_PATH=/usr/lib/64/pkgconfig
        ./configure CC="/opt/developerstudio12.6/bin/cc -m64"

.. [#solaris4] Solaris with Oracle Developer Studio,
   using::

        export PKG_CONFIG_PATH=/usr/lib/32/pkgconfig
        ./configure CC="/opt/developerstudio12.6/bin/cc -m32"

The following systems are known *not* to work at the current time; this
list is almost certainly not exhaustive:

================  ======  ====================  ============
Operating system   Arch   Compiler              Notes
================  ======  ====================  ============
Linux (any)       x86_64  NVIDIA HPC SDK 26.3   [#nvidia1]_
OpenBSD 7.8       x86_64  Clang (LLVM) 19.1.7   [#openbsd1]_
================  ======  ====================  ============

.. [#nvidia1] The `NVIDIA HPC SDK`__ 26.3 compiler (and possibly some
   earlier versions) does not work due to “nvc-Error-Unknown switch”
   errors.  Even earlier versions do not work due to a bug in ``nvc -E``
   preprocessor output.  See the relevant `bug report`__ for further
   details.

   __ https://developer.nvidia.com/nvidia-hpc-sdk-releases
   __ https://forums.developer.nvidia.com/t/hpc-sdk-does-not-work-with-autoconf-automake-based-projects/277894

.. [#openbsd1] The OpenBSD C library does not include
   :code:`<monetary.h>` nor its associated functions, particularly
   :code:`strfmon()`.


Git Repository
==============

You can always download the latest version of Star Traders directly from
the Git repository on The ZAP Group Australia server::

    git clone https://git.zap.org.au/git/trader.git

Released versions of Star Traders include all scripts and files needed
for installation.  If you are cloning the source code from the Git
repository, however, you will need to update these files yourself.  You
will need the following additional tools installed on your system to do
so:

1.  `Autoconf`__ v2.71 or later
2.  `Automake`__ v1.16 or later
3.  `pkgconf`__ v0.9.0 or later, or `pkg-config`__ v0.29 or later
4.  `GNU Portability Library`__

__ https://www.gnu.org/software/autoconf/
__ https://www.gnu.org/software/automake/
__ https://github.com/pkgconf/pkgconf
__ https://www.freedesktop.org/wiki/Software/pkg-config/
__ https://www.gnu.org/software/gnulib/

The GNU Portability Library may be installed by retrieving the latest
Gnulib source code from the Git repository::

    git clone git://git.savannah.gnu.org/gnulib.git

Once you have these tools, change to the Star Traders source code tree
and type::

    PATH=${PATH}:/path/to/gnulib-tool ./build-aux/bootstrap

where ``/path/to/gnulib-tool`` is, of course, the directory containing
the Gnulib ``gnulib-tool`` script.  You should be ready to run
``./configure && make && make install`` now.


For Translators
===============

Thank you for even considering to translate Star Traders into your native
language!  You may use either a released version of Star Traders, or an
unreleased one, as discussed in the Git Repository section above.  In
either case, you may find the following workflow useful.

First, run ``./build-aux/bootstrap`` if needed (only for unreleased
versions of Star Traders).

Next, configure and install Star Traders into your home directory::

    ./configure --prefix=$HOME/opt/trader
    make
    make install

If you are adding a new translation, add its GNU Gettext language code to
the file `po/LINGUAS`, then create the template file for that language
(“``zz``” is used here)::

    (cd po; msginit --locale=zz --width=132)

Now, modify the PO file for your language using your favourite editor or
translation tool.  Please note that the generated PO file has extensive
documentation in its translator comments.  If anything is unclear, please
feel free to ask the author and maintainer; contact details are available
in the `README` file.

To test your PO file, compile and run Star Traders (replace “``zz``” with
your language code, of course)::

    make && make -C po zz.gmo && make install
    LANGUAGE=zz $HOME/opt/trader/bin/trader

The ``make -C po zz.gmo`` forces the rebuilding of the GMO output file;
the ``LANGUAGE=zz`` parameter sets the language of the messages to use.

This process of editing and testing the PO file can be done iteratively,
of course: make a change, recompile, run the program to see the changes,
repeat as needed.

Once you have finished your translation, please submit the PO file to the
Translation Project (TP).  See the `TP Star Traders`__ web page or read
their `Translators and the TP`__ page for additional information.

__ https://translationproject.org/domain/trader.html
__ https://translationproject.org/html/translators.html

To clean up your install directory, simply run::

    rm -fr $HOME/opt/trader

By the way, as mentioned in the translator comments, formatting the help
text is probably the most complicated and tedious part of translating
Star Traders.  The author and maintainer of this game is more than happy
to help you with this task: if you are able to provide a translation,
even if it is not formatted correctly, the maintainer will perform the
necessary adjustments for word-wrapping and justification.
