ISO is not useful for us because the user still has to put diabdat.mpq
on the hard drive. At this point, might as well put DevilutionX on the
hard drive as well.
Changes the CI to produce a zip file with our assets and the `default.xbe`
executable.
1. Use `${{ }}` consistently. It is technically not required in `if`
conditions but GitHub CI docs use it and it avoid certain pitfalls,
such as when the value starts with `!` (making it a YAML type
declaration).
2. Fixes one of the `if`s.
1. Adds a `libdevilution_so` target when tests are enabled.
2. Each test file is now a separate binary target linked against `libdevilutionx_so` (can now run tests in parallel).
3. Tests are now defined in a separate `test/CMakeLists.txt` file.
4. Building the tests is now controlled by the standard `BUILD_TESTING` option (defined by CTest).
5. Tests are now built by default.
6. On CI, test errors are now reported.
Also:
* `.clang-format`: Enable SortIncludes in tests
* `path_test.cpp`: Fix -Wsign-compare
1. Platform and toolchain files are now all under `platforms/`, with a
single `CMake/platforms/${platform}.cmake` per platform.
2. Custom functions/macros are under `functions/`.
3. Finder modules are in `/finders`.
The `SDL_main.h` header defines `main` to be `SDL_main` *when needed
by the target platform. This header must be included before defining
`main`.
The `SDL2::SDLmain` library should be linked only to the executable, not
to `libdevilutionx`.
libmpq is a much simpler alternative to StormLib for reading MPQ archives.
We use our own fork of libmpq: https://github.com/diasurgical/libmpq
Impact:
* DevilutionX is now a lot more portable. Unlike StormLib, libmpq only
needs platform-specific code for Windows.
* Locks around file access **removed** (instead we duplicate the file descriptor for streamed audio only).
* RAM usage is **300 KiB** lower than StormLib.
* Stripped release linux_x86_64 binary is **32 KiB** smaller.
* Amiga build now hangs instead of crashing.