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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
{ lib
, multiStdenv
, fetchFromGitHub
, substituteAll
, pkgsi686Linux
, libnotify
, meson
, ninja
, pkg-config
, wine
, libxcb
, nix-update-script
}:
let
# Derived from subprojects/asio.wrap
asio = fetchFromGitHub {
owner = "chriskohlhoff";
repo = "asio";
rev = "asio-1-22-1";
sha256 = "sha256-UDLhx2yI6Txg0wP5H4oNIhgKIB2eMxUGCyT2x/7GgVg=";
};
# Derived from subprojects/bitsery.wrap
bitsery = fetchFromGitHub {
owner = "fraillt";
repo = "bitsery";
rev = "v5.2.2";
sha256 = "sha256-VwzVtxt+E/SVcxqIJw8BKPO2q7bu/hkhY+nB7FHrZpY=";
};
# Derived from subprojects/function2.wrap
function2 = fetchFromGitHub {
owner = "Naios";
repo = "function2";
rev = "4.2.0";
sha256 = "sha256-wrt+fCcM6YD4ZRZYvqqB+fNakCNmltdPZKlNkPLtgMs=";
};
# Derived from subprojects/ghc_filesystem.wrap
ghc_filesystem = fetchFromGitHub {
owner = "gulrak";
repo = "filesystem";
rev = "v1.5.12";
sha256 = "sha256-j4RE5Ach7C7Kef4+H9AHSXa2L8OVyJljDwBduKcC4eE=";
};
# Derived from subprojects/tomlplusplus.wrap
tomlplusplus = fetchFromGitHub {
owner = "marzer";
repo = "tomlplusplus";
rev = "v3.0.1";
sha256 = "sha256-l8ckbCqjz3GUfwStcl3H2C+un5dZfT2uLtayvdu93D4=";
};
# Derived from vst3.wrap
vst3 = fetchFromGitHub {
owner = "robbert-vdh";
repo = "vst3sdk";
rev = "v3.7.5_build_44-patched";
fetchSubmodules = true;
sha256 = "sha256-6cuEUa+BXa6MnAYIBq873n0NRLadcPfMX+kpf4ysE6M=";
};
in multiStdenv.mkDerivation rec {
pname = "yabridge";
version = "4.0.2";
# NOTE: Also update yabridgectl's cargoHash when this is updated
src = fetchFromGitHub {
owner = "robbert-vdh";
repo = pname;
rev = version;
sha256 = "sha256-rce6gxnB+RpG84Xakw0h4vZ8lyEQ41swWQGuwpomV2I=";
};
# Unpack subproject sources
postUnpack = ''(
cd "$sourceRoot/subprojects"
cp -R --no-preserve=mode,ownership ${asio} asio
cp -R --no-preserve=mode,ownership ${bitsery} bitsery
cp -R --no-preserve=mode,ownership ${function2} function2
cp -R --no-preserve=mode,ownership ${ghc_filesystem} ghc_filesystem
cp -R --no-preserve=mode,ownership ${tomlplusplus} tomlplusplus
cp -R --no-preserve=mode,ownership ${vst3} vst3
)'';
patches = [
# Hard code bitbridge & runtime dependencies
(substituteAll {
src = ./hardcode-dependencies.patch;
libxcb32 = pkgsi686Linux.xorg.libxcb;
inherit libnotify wine;
})
# Patch the chainloader to search for libyabridge through NIX_PROFILES
./libyabridge-from-nix-profiles.patch
];
postPatch = ''
patchShebangs .
(
cd subprojects
cp packagefiles/asio/* asio
cp packagefiles/bitsery/* bitsery
cp packagefiles/function2/* function2
cp packagefiles/ghc_filesystem/* ghc_filesystem
)
'';
nativeBuildInputs = [
meson
ninja
pkg-config
wine
];
buildInputs = [
libxcb
];
mesonFlags = [
"--cross-file" "cross-wine.conf"
"-Dbitbridge=true"
# Requires CMake and is unnecessary
"-Dtomlplusplus:generate_cmake_config=false"
];
installPhase = ''
runHook preInstall
mkdir -p "$out/bin" "$out/lib"
cp yabridge-host{,-32}.exe{,.so} "$out/bin"
cp libyabridge{,-chainloader}-{vst2,vst3}.so "$out/lib"
runHook postInstall
'';
# Hard code wine path in wrapper scripts generated by winegcc
postFixup = ''
for exe in "$out"/bin/*.exe; do
substituteInPlace "$exe" \
--replace 'WINELOADER="wine"' 'WINELOADER="${wine}/bin/wine"'
done
'';
passthru.updateScript = nix-update-script {
attrPath = pname;
};
meta = with lib; {
description = "A modern and transparent way to use Windows VST2 and VST3 plugins on Linux";
homepage = src.meta.homepage;
license = licenses.gpl3Plus;
maintainers = with maintainers; [ kira-bruneau ];
platforms = [ "x86_64-linux" ];
};
}
|