Packaging Difftastic
This page contains recommendations for people creating a difftastic package.
Note that the difftastic author only provides the source code and the prebuilt binaries on GitHub. Packages have been created by other people -- thank you!
Packaging The Binary
Difftastic can be built with cargo
. The compiled binary will be at
target/release/difft
when using the following command.
$ cargo build --release
C library dependencies are built with the cc
crate, which exposes
various environment
variables
to configure the C toolchain (e.g. CFLAGS
).
Reproducible Builds
Difftastic's build script (the build.rs
file) uses Rayon to build C
libraries in parallel, which can lead to minor ordering changes in the
final binary.
You can avoid this by disabling Rayon parallelism.
$ RAYON_NUM_THREADS=1 cargo build --release
MIME Database
Difftastic depends on tree_magic_mini, which accesses the MIME database on the current system. The MIME database is used to recognise file types, so difftastic does not try to compoare binary files as text.
This means that the difftastic package should depend on a MIME database package, if available.
Difftastic respects the XDG base
specification
to find the MIME database files. These files are typically at
/usr/share/mime/
, /usr/local/share/mime/
or
/opt/homebrew/share/mime/
.
Man Page
As of difftastic 0.58, a man page is available. See the file
difft.1
.
This file is generated from difft.1.md
, but the generated difft.1
is included in the repository for convenience.
The Manual
Please consider including the difftastic manual with your
package. These are HTML files that can be generated with mdbook
. The
following command generates HTML at manual/book/
.
$ cd manual
$ mdbook build
manual/book.toml
also references a script
replace_version_placeholder.sh
that replaces occurrences of
DFT_VERSION_HERE
in the manual. For packaging, it may be easier to
remove the configuration from book.toml
and replace the text
directly.
-[preprocessor.replace-version-placeholder]
-command = "./replace_version_placeholder.sh"
$ export CURRENTVERSION="7.8.9"
$ sed -i "s/DFT_VERSION_HERE/$CURRENTVERSION/g" -i src/introduction.md
Testing
If your packaging tool supports testing, consider running the difftastic unit tests.
# Run the normal tests.
$ cargo test
# Run the tests that depend on the
# MIME database being present.
$ cargo test -- --ignored