Notes for package maintainers
=============================

1. tl;dr
--------

If Lix shall read from `${XDG_DATA_DIRS}/lix/', don't change the Lix D source.
(This usually points to `/usr/share/lix' or `/usr/local/share/lix' and Lix
will use these as fallbacks in case the variable is not set.)
If you want a custom install path, replace in `src/file/filename/fhs.d':

    enum customReadOnlyDir = "";

with, e.g.,

    enum customReadOnlyDir = "/usr/share/games";

...and the source will auto-append `/lix/' to make `/usr/share/games/lix/'.
Read-write dir will be `${XDG_DATA_HOME}/lix/', usually `~/.local/share/lix/'.
Build Lix with:

    dub build -f -b releaseXDG

Please update when I bump minor version (y in x.y.z), to support netplay.
Many thanks! <3 See section below for files to exclude from a binary package.

Extract music into read-only dir: https://www.lixgame.com/dow/lix-music.zip
Dektop icon: data/images/lix_logo.svg
Manpage: doc/lix.6



2. Suggested command line
-------------------------

For binary packages in Linux distributions, I recommend to build Lix with this
dub command line:

    dub build -f -b releaseXDG

Explanation:

*   `dub' is the D build tool and D source package manager.

*   `build' is the dub command to build, but not execute.

*   `-f` forces a re-build of all dependencies and Lix, even when the build
    system believes they're up-to-date.

*   `-b releaseXDG' builds with optimizations and inlining, without contracts
    or unittests, and passes a flag to the compiler to let Lix look in
    predefined directories for its data instead of in the working directory.

For a self-contained build, use `-b release' instead of `-b releaseXDG'.
Then, Lix will read and write only within its working directory.



3. Directories
--------------

Lix will read from `${XDG_DATA_DIRS}/lix/', or, if that environment variable
doesn't exist, from `/usr/local/share/lix' or from `/usr/share/lix'. The exact
path can be configured at runtime with the environment variable XDG_DATA_DIRS
according to the XDG Base Directory Specification. If the variable has several
colon-separated paths, they will be tried in order per file from the leftmost
to the rightmost, until a required file is found.

If the source in `src/file/filename/fhs.d' defines `customReadOnlyDir' as a
nonempty string, that string will override the user's XDG environment
variable, and instead hardcode the path for the read-only files.
E.g., on Debian, you might hardcode `/usr/share/games'.

Lix will write data and configurations to to `${HOME}/.local/share/lix/'.
The environment variable XDG_DATA_HOME can override this directory;
then Lix will read and write from `${XDG_DATA_HOME}/lix/'.

Read the entire `src/file/filename/fhs.d' if you would like to know all
details, and ask questions on github or in IRC. Contact details are in the
readme file in the project's root dir.

See below for what files to exclude from a binary distribution.



4. Runtime speed
----------------

With the suggested command line above, release binary should have reasonable
runtime speed already. To optimize even more for speed, use LDC instead of the
reference compiler DMD.



5. Music
--------

Lix has music, but the music is not in version control. I encourage you to
ship the music inside your package. To get the music, download:

    https://www.lixgame.com/dow/lix-music.zip

If you extract this in Lix's directory, you'll get a subdirectory `./music/'.
This subdirectory `./music/' should be installed to the read-only directory.



6. Files to exclude
-------------------

In a binary distribution, you don't have to ship these files that the Lix
repository has, that the build system creates, or that the game creates.
You should probable delete these before packaging the game:

*   src/                              -- the source code
*   .git/ and .gitignore              -- version control
*   dub.json and .dub.selections.json -- build system control files
*   .dub/                             -- build artifacts
*   win-build.bat                     -- batch file to build Lix on Windows
*   data/images/lix_logo.svg          -- app icon template (3.7 MB)
*   doc/build/                        -- the build documentation
*   doc/lix.6                         -- move this manpage to where man looks
*   replays/                          -- auto-saved game replays
*   export/                           -- exported level pics, screenshots
*   user/                             -- user options, trophies, logs



7. Minor version increments (y in x.y.z)
----------------------------------------

The networking game server rejects connection attempts from different minor
versions (y in x.y.z) than the current stable. I'd appreciate if you keep
your package up-to-date with the minor versions! Reasons:

I try to release bugfixes early and often, bumping Lix's patch version number
(z in x.y.z). Levels may change between patch versions. It's nice, but
low-priority, to update on patch version bumps.

In contrast, I wait with physics changes until I can release all planned
physics changes in a reasonably-tested minor version bump (y in x.y.z).
Examples: A skill behaves differently, the networking protocol gets a feature,
terrain tiles change shape.
