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
|
{
pkgs ? import <nixpkgs> {},
stdenv ? pkgs.stdenv,
lib ? pkgs.lib,
ldc ? null,
dcompiler ? pkgs.ldc,
dub ? pkgs.dub,
}:
assert dcompiler != null;
with (
with lib; let
filterDub = name: type: let
baseName = baseNameOf (toString name);
in
! ( # filter function to remove the .dub package folder from src
type == "directory" && baseName == ".dub"
);
targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
# remove reference to build tools and library sources
disallowedReferences = deps: [dcompiler dub];
removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
in {
mkDubDerivation = lib.makeOverridable ({
src,
nativeBuildInputs ? [],
dubJSON ? src + "/dub.json",
passthru ? {},
package ? lib.importJSON dubJSON,
...
} @ attrs:
stdenv.mkDerivation (attrs
// {
pname = package.name;
nativeBuildInputs = [dcompiler dub pkgs.removeReferencesTo] ++ nativeBuildInputs;
disallowedReferences = disallowedReferences deps;
passthru =
passthru
// {
inherit dub dcompiler pkgs;
};
src = lib.cleanSourceWith {
filter = filterDub;
src = lib.cleanSource src;
};
preFixup = ''
find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
'';
buildPhase = ''
runHook preBuild
HOME="$PWD"
DFLAGS="-O2 -inline"
for DC_ in dmd ldmd2 gdmd; do
echo "- check for D compiler $DC_"
DC=$(type -P $DC_ || echo "")
if [ ! "$DC" == "" ]; then
break
fi
done
if [ "$DC" == "" ]; then
exit "Error: could not find D compiler"
fi
echo "$DC_ used as D compiler to build $pname"
dub build --compiler=$DC --build=release --combined --skip-registry=all
runHook postBuild
'';
checkPhase = ''
runHook preCheck
HOME="$PWD"
dub test --combined --skip-registry=all
runHook postCheck
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/cgi-bin
cp -r "${targetOf package}" $out/share/cgi-bin
install -m755 -D $out/share/cgi-bin/spine_search spine_search
runHook postInstall
'';
postInstall = ''
echo "HERE ${targetOf package} $out/share/cgi-bin"
echo `ls -la $out/share/cgi-bin/spine_search`
'';
meta =
lib.optionalAttrs (package ? description) {
description = package.description;
}
// attrs.meta or {};
}
// lib.optionalAttrs (!(attrs ? version)) {
name = package.name; # use name from dub.json, unless pname and version are specified
}));
}
);
mkDubDerivation rec {
name = "spine-search-${version}";
#version = "0.12.0";
src = ./.;
buildInputs = [
pkgs.sqlite
(
with pkgs; [
nixVersions.unstable #nixFlakes
## package manager
dub
## compiler
ldc
rund
## linker
#lld
#mold
## builder
#ninja
sqlite
]
)
];
meta = with pkgs.lib; {
pname = "spine-search";
version = "0.12.0";
homepage = "https://sisudoc.org";
description = "cgi sqlite search form for document object search";
longDescription = ''
a sisu like parser & document generator
'';
homepage = "https://sisudoc.org";
license = licenses.agpl3Plus;
platforms = platforms.linux;
maintainers = ["RalphAmissah"];
};
}
|