Changes how dependency options are handled and moves them out of
`CMakeLists.txt`.
Major changes:
1. The static default now takes `TARGET_SUPPORTS_SHARED_LIBS` into account
2. The `DIST` setting no longer affects the static default.
3. The static option is now visible for system dependencies as well.
(it was previously hidden by `cmake_dependent_option`).
4. The auto-detection mechanism for `libfmt` and `SDL_image` only
applies if the setting has not been set.
5. SDL2 on Android is now also linked statically,
resulting in a 1.1 MiB smaller APK.
When using non-system dependencies, the default should always be static,
as there are 2 main use cases for these:
1. Dependencies that we must currently vendor because our forks have
significant changes that are not yet merged/released upstream.
2. Platforms that have no system packages, such as Android and iOS.
In both cases, static linking is the most appropriate default.
Previously, only the translations were copied for Android at build time.
The other assets were copied only at configure time.
Replaces Android-specific handling with a general mechanism to override
the build-time assets directory.
Instead of using the `GETTEXT_PROCESS_PO_FILES` function, do it
ourselves in a cleaner way.
This fixes a number of issues:
1. Translations and assets are now built whenever the binary is built,
without causing the binary to be rebuilt.
2. Translations are only copied to `build/assets` (previously they were
also copied to `build/`).
3. This should now be compatible with the new XCode.
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`.
The does some pruning of the dependencies' files to avoid a 100 MiB+ tarball.
Even with that, the final tarball size is 17 MiB with xz, 25 MiB with gzip.
See the file documentation at the top of `tools/make_src_dist.py` for
more information.
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.
This ensures that devilutionx.mpq is never out-of-date.
It will be rebuilt whenever the assets change.
This will also allow us to move translations into the mpq in a follow-up
commit.