Collects transitive object library dependencies in the topological order
and adds cycle detection.
Now transitive dependencies are actually all linked.
This does not fully address the issue of most everything
being a giant library but it's a start.
Note that the libraries are OBJECT libraries, so they
may (and currently do) contain references to missing
symbols.
Also fixes the implementation of transitive dependency
support for OBJECT libraries.
On CMake v3.28+, `EXCLUDE_FROM_ALL` is supported natively as an argument
to `FetchContent_Declare`.
On CMake v3.30+, `FetchContent_Populate`, which we use to polyfill
`EXCLUDE_FROM_ALL` support for older versions of CMake, is deprecated
and triggers a noisy warning.
Avoids the warning by using the native `EXCLUDE_FROM_ALL` support on
CMake v3.28+.
Stop using git for the version tag.
The new process is as follows:
1. The `VERSION` file contains the version.
For release, it should contain "1.5.0".
Immediately after the release, it should be changed to "1.6.0-dev".
2. The build type is included in the version string unless it is
"Release". The commit hash is now included into the version string
whenever the `VERSION` file has a suffix (i.e. 1.5.0-dev rather than
just 1.5.0). The full version string for development builds now
looks like this: `1.5.0-dev-Debug-b102dccf8`.
This means we longer need git or `-DVERSION_NUM` to get a sensible version number.
The in-development versions are now always clearly indicated with the
`-dev` suffix no matter how DevilutionX was built.
If a config directory did not exist, the ini file was
not saved at all.
Only implemented for targets that support `std::filesystem` or `std::experimental::filesystem`.
These are all the targets except nxdk and iOS (only supported on iOS 13+).
1. Make the vcpkg hack minimal by only defining the options it needs
before `include(Platforms)`.
Every dependent option needed by vcpkg has to be recalculated
after `include(Platforms)`. This brings the count of such options
down to 1 (`PACKET_ENCRYPTION`).
2. `include(Platforms)` before the rest of the options.
3. Group related options together into sections and add comments.
4. Fix `--gc-sections` for C files. Also adds `-Wl,--as-needed`.
Note: `PIE` can now be `ON` even if `BUILD_TESTING` is `OFF`.
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`.