Bug ID 4639
Summary dfhack - Memory hacking library for Dwarf Fortress and a set of tools that use it
Product Package Reviews
Version Current
Hardware x86_64
OS GNU/Linux
Status NEW
Severity enhancement
Priority P1
Component Review Request
Assignee rpmfusion-package-review@rpmfusion.org
Reporter rosser.bjr@gmail.com
CC rpmfusion-package-review@rpmfusion.org
namespace nonfree

Now that Dwarf Fortress is in the distribution, I guess I should submit this
review request too.

Spec URL:
https://www.acm.jhu.edu/~bjr/fedora/dwarffortress/rpmfusion/dfhack.spec
SRPM URL:
https://www.acm.jhu.edu/~bjr/fedora/dwarffortress/rpmfusion/dfhack-0.43.05-7.r2.fc28.src.rpm

Description:
DFHack is a Dwarf Fortress memory access library, distributed with a wide
variety of useful scripts and plugins.

For users, it provides a significant suite of bugfixes and interface
enhancements by default, and more can be enabled. There are also many tools
(such as workflow or autodump) which can make life easier. You can even add
third-party scripts and plugins to do almost anything!

For modders, DFHack makes many things possible. Custom reactions, new
interactions, magic creature abilities, and more can be set through Scripts
for Modders and custom raws. Non-standard DFHack scripts and inits can be
stored in the raw directory, making raws or saves fully self-contained for
distribution - or for coexistence in a single DF install, even with
incompatible components.

For developers, DFHack unites the various ways tools access DF memory and
allows easier development of new tools. As an open-source project under
various copyleft licences, contributions are welcome.

FAS Username: tc01

Namespace: nonfree

Why not in Fedora: dfhack is fully open source. However it depends directly on
Dwarf Fortress, a nonfree game (nonfree/dwarffortress); dfhack communicates
directly with the running dwarffortess process. Thus it must be in nonfree.

Notes:

This package is a bit messy, which is one reason I've been hesitant to open a
review request for it. There are a number of points to note, most of which are
documented in the spec itself as well (it is quite well commented).

1. Upstream uses a lot of git submodules, but also the build fails if .git
metadata isn't present. However, when I inquired upstream, they were not
interested in releasing a "source tarball" from which DH could be built without
doing additional git checkouts. Therefore I wrote a script (see link below) to
*actually* generate the dfhack tarball for which I've been managing releases.
That is why there is no source url.
https://www.acm.jhu.edu/~bjr/fedora/dwarffortress/rpmfusion/build-dfhack-tarball

2. There are a number of bundled bits with no support for unbundling. Worse,
many of the bundled bits have been forked by dfhack, meaning that it's
basically never going to be possible to unbundle (the most egregious example is
likely a dfhack fork of protobuf).

3. dfhack has a plugin (and script) architecture. Most plugins are included in
dfhack itself, but some are distributed and maintained separately, somewhat
like the Linux kernel. (Note that one of the in-tree plugins, stonesense, is
distributed here as a subpackage, since it contains a fair amount of data
specific to itself). I have been meaning to figure out a better way to do
out-of-tree dfhack plugin builds, but for now I just have this package fill in
and install a pkgconfig file.

4. ...unfortunately, dfhack plugins need to link statically against a helper
library, "dfhack-version.a", and so a static devel package is needed too.

5. One of dfhack's plugins is an interpreter for ruby scripts, which works by
directly trying to dlopen "libruby.so" (the intention was to ship a bundled
libruby that would be downloaded during the build, but I upstreamed a patch to
disable the download). Currently, therefore, I've made dfhack Require
libruby-devel as a runtime dependency. While I guess I could patch this out, it
would then mean that dfhack needs to be rebuilt whenever there's a ruby soname
bump.

I think those are the major pain points with the current state of the package.


You are receiving this mail because: