blob: 0dc3f670d13f1e1ca40afc1754845e6e8ea598a3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/usr/bin/env -S nix-build
{ pkgs ? import <nixpkgs> {},
stdenv ? pkgs.stdenv,
ldc ? pkgs.ldc,
dub ? pkgs.dub
}:
#with import ./nix/mkDub.nix { inherit pkgs; };
with ( # mkDub.nix
with stdenv;
let
# Filter function to remove the .dub package folder from src
filterDub = name: type: let baseName = baseNameOf (toString name); in ! (
type == "directory" && baseName == ".dub"
);
# Convert a GIT rev string (tag) to a simple semver version
rev-to-version = builtins.replaceStrings ["v" "refs/tags/v"] ["" ""];
dep2src = dubDep: pkgs.fetchgit { inherit (dubDep.fetch) url rev sha256 fetchSubmodules; };
# Fetch a dependency (source only for now)
fromDub = dubDep: mkDerivation rec {
name = "${src.name}-${version}";
version = rev-to-version dubDep.fetch.rev;
nativeBuildInputs = [ ldc dub ];
src = dep2src dubDep;
buildPhase = ''
runHook preBuild
export HOME=$NIX_BUILD_TOP
#export HOME=$PWD
dub build -b=release
runHook postBuild
'';
# outputs = [ "lib" ];
# installPhase = ''
# runHook preInstall
# mkdir -p $out/bin
# runHook postInstall
# '';
};
# Adds a local package directory (e.g. a git repository) to Dub
dub-add-local = dubDep: "dub add-local ${(fromDub dubDep).src.outPath} ${rev-to-version dubDep.fetch.rev}";
# The target output of the Dub package
targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
# Remove reference to build tools and library sources
disallowedReferences = deps: [ ldc dub ] ++ builtins.map dep2src deps;
removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
in {
inherit fromDub;
mkDubDerivation = lib.makeOverridable ({
src,
nativeBuildInputs ? [],
dubJSON ? src + "/dub.json",
selections ? src + "/nix/dub.selections.nix",
deps ? import selections,
passthru ? {},
package ? lib.importJSON dubJSON,
...
} @ attrs: stdenv.mkDerivation (attrs // {
pname = package.name;
nativeBuildInputs = [ ldc dub pkgs.removeReferencesTo ] ++ nativeBuildInputs;
disallowedReferences = disallowedReferences deps;
passthru = passthru // {
inherit dub ldc pkgs;
};
src = lib.cleanSourceWith {
filter = filterDub;
src = lib.cleanSource src;
};
preFixup = ''
find $out/bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
'';
buildPhase = ''
runHook preBuild
export HOME=$PWD
${lib.concatMapStringsSep "\n" dub-add-local deps}
dub build --compiler=ldc2 --build=release --combined --skip-registry=all
runHook postBuild
'';
checkPhase = ''
runHook preCheck
export HOME=$PWD
${lib.concatMapStringsSep "\n" dub-add-local deps}
dub test --combined --skip-registry=all
runHook postCheck
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp -r "${targetOf package}" $out/bin
runHook postInstall
'';
meta = lib.optionalAttrs (package ? description) {
description = package.description;
} // attrs.meta or {};
} // lib.optionalAttrs (!(attrs ? version)) {
# Use name from dub.json, unless pname and version are specified
name = package.name;
}));
}
);
mkDubDerivation rec {
name = "spine-${version}";
version = "0.11.1";
src = ./.;
buildInputs = [
pkgs.sqlite
(
let
dub2nix-src = fetchTarball {
url = "https://github.com/lionello/dub2nix/archive/master.tar.gz";
};
dub2nix = (import dub2nix-src) { inherit pkgs; };
in
with pkgs; [
nixFlakes
dub
ldc
sqlite
nix-prefetch-git
validatePkgConfig
]
)
];
shellHook = ''
# nix-build -I nixpkgs=<provide local nix path>
nix-build
echo "built spine"
'';
installPhase = ''
install -m755 -D spine $out/bin/spine
echo "built $out/bin/spine"
'';
meta = with stdenv.lib; {
homepage = http://sisudoc.org;
description = "a sisu like document parser";
license = licenses.agpl3Plus;
platforms = platforms.linux;
maintainers = [ RalphAmissah ];
};
}
|