nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 dub,
5 importDubLock,
6 dubSetupHook,
7 dubBuildHook,
8 dubCheckHook,
9 ldc,
10 removeReferencesTo,
11}:
12
13lib.extendMkDerivation {
14 constructDrv = stdenv.mkDerivation;
15
16 excludeDrvArgNames = [
17 "dubLock"
18 "compiler"
19 ];
20
21 extendDrvArgs =
22 finalAttrs:
23 {
24 # A lockfile generated by `dub-to-nix` from the source of the package.
25 # Can be either a path to the file, or an attrset already parsed with `lib.importJSON`.
26 dubLock,
27 compiler ? ldc,
28 ...
29 }@args:
30
31 {
32 dubDeps = importDubLock {
33 inherit (finalAttrs) pname version;
34 lock = dubLock;
35 };
36
37 strictDeps = args.strictDeps or true;
38
39 nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
40 dubSetupHook
41 (dubBuildHook.override { inherit dub; })
42 compiler
43 removeReferencesTo
44 ];
45
46 configurePhase = ''
47 runHook preConfigure
48 dubFlags+=("--compiler=${lib.getExe compiler}")
49 runHook postConfigure
50 '';
51
52 doCheck = args.doCheck or false;
53
54 nativeCheckInputs = [
55 (dubCheckHook.override { inherit dub; })
56 ];
57
58 preFixup = ''
59 ${args.preFixup or ""}
60
61 find "$out" -type f -exec remove-references-to -t ${compiler} '{}' +
62 '';
63
64 disallowedReferences = args.disallowedReferences or [ compiler ];
65
66 meta = {
67 platforms = dub.meta.platforms;
68 }
69 // args.meta or { };
70 };
71}