GitOrigin-RevId: 6143fc5eeb9c4f00163267708e26191d1e918932
2.4 KiB
D (Dlang)
Nixpkgs provides multiple D compilers such as ldc
, dmd
and gdc
.
These can be used like any other package during build time.
However, Nixpkgs provides a build helper for compiling packages using the dub
package manager.
Here's an example:
{
lib,
buildDubPackage,
fetchFromGitHub,
ncurses,
zlib,
}:
buildDubPackage rec {
pname = "btdu";
version = "0.5.1";
src = fetchFromGitHub {
owner = "CyberShadow";
repo = "btdu";
rev = "v${version}";
hash = "sha256-3sSZq+5UJH02IO0Y1yL3BLHDb4lk8k6awb5ZysBQciE=";
};
# generated by dub-to-nix, see below
dubLock = ./dub-lock.json;
buildInputs = [
ncurses
zlib
];
installPhase = ''
runHook preInstall
install -Dm755 btdu -t $out/bin
runHook postInstall
'';
}
Note that you need to define installPhase
because dub
doesn't know where files should go in $out
.
Also note that running dub test
is disabled by default. You can enable it by setting doCheck = true
.
Lockfiles
Nixpkgs has its own lockfile format for dub
dependencies, because dub
's official "lockfile" format (dub.selections.json
) is not hash based.
A lockfile can be generated using the dub-to-nix
helper package.
- Firstly, install
dub-to-nix
into your shell session by runningnix-shell -p dub-to-nix
- Then navigate to the root of the source of the program you want to package
- Finally, run
dub-to-nix
and it will print the lockfile to stdout. You could pipe stdout into a text file or just copy the output manually into a file.
buildDubPackage
parameters
The buildDubPackage
function takes an attrset of parameters that are passed on to stdenv.mkDerivation
.
The following parameters are specific to buildDubPackage
:
dubLock
: A lockfile generated bydub-to-nix
from the source of the package. Can be either a path to the file, or an attrset already parsed withlib.importJSON
. The latter useful if the package usesdub
dependencies not already in the lockfile. (e.g. if the package callsdub run some-dub-package
manually)dubBuildType ? "release"
: The build type to pass todub build
as a value for the--build=
flag.dubFlags ? []
: The flags to pass todub build
anddub test
.dubBuildFlags ? []
: The flags to pass todub build
.dubTestFlags ? []
: The flags to pass todub test
.compiler ? ldc
: The D compiler to be used bydub
.