The change allows correct and optimized incremental builds with VC and
ninja but unix makefile backend will rebuild everything if anything
changes in structures.
ninja has a single build file which avoided issues if multiple targets
depend on same files. But Unix Makefiles generator user recursive make
which requires each ADD_CUSTOM_COMMAND to have only one target depending
on them.
Then makefile generator also has stupid rule that it touches all
secundary output files if primary file has been updated.
It was surprising hard to find a version that actually works correctly
for both issues. Solution is using BYPRODUCTS and refactoring command
and target dependencies.
As a bonus this change now allows build to work from source tarball if
the tarball includes git-describe.h.
Using add_custom_command allows cmake to track dependency from command
to git-describe.h that is implicit dependency of DFHackVersion.cpp.
The change also fixes issues if there is multiple build directories and
git-describe.h missing but git-dsecribe.h.tmp is present.
- Use port from remote-server.json in dfhack-run
- Make DFHACK_RUN environment variable take priority over remote-server.json
- Log current port to stderr
G++ generates structure debug symbols for a few df namespace classes to
generated stub source files. I decided to test how much symbols from
those files would increase binary size. When the result was about double
size I decided to add cmake configuration option to let user easily
select if they prefer complete symbols or reduced size.
This makes jsoncpp a submodule that can be build directly from git
sources. This changes depends/jsoncpp to depends/jsoncpp-sub to avoid
filename conflict if someone tries to use git bisect.
jsoncpp library name changes to jsoncpp_lib_static.
jsoncpp version is the latest tagged release.
This makes it easier for tools to properly handle designating and undesignating
trees for chopping and plants for gathering, which changed significantly in
0.40.20.
Ref #531 (?), #656, #1014, #1018, #1030, #1076
As best as I can tell, the copy of tinyxml dfhack uses is unmodified
from whenever it was first bundled. This commit adds an option to CMake,
EXTERNAL_TINYXML, that if set to ON, will attempt to link against a system
tinyxml instead of using the dfhack-bundled one. It defaults to OFF,
so there is no change in default behavior.
The DFHACK_TINYXML variable is then set to either "tinyxml" or "dfhack-tinyxml"
so the library (and any plugins that need updating) can link against one
or the other.
The FindTinyXML.cmake script was taken from https://github.com/ros/cmake_modules
(licensed under the 3-clause BSD license).
Add license text to new CMake file.
Linking to any library with ".framework" in its path on OS X causes
that directory to be included in the include path (with -F), which
causes all of the DFHack core to be rebuilt unnecessarily when
changing DF folders.