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
|
{ lib, stdenv, makeWrapper, fetchFromGitHub, which, pkg-config
, libjpeg
, ocamlPackages
, awscli2, bubblewrap, curl, ffmpeg, yt-dlp
, runtimePackages ? [ awscli2 bubblewrap curl ffmpeg yt-dlp ]
}:
let
pname = "liquidsoap";
version = "2.2.5";
in
stdenv.mkDerivation {
inherit pname version;
src = fetchFromGitHub {
owner = "savonet";
repo = "liquidsoap";
rev = "refs/tags/v${version}";
hash = "sha256-o3P7oTizO2l2WkB4LormZ/Ses5jZOpgQ1r1zB1Y3Bjs=";
};
postPatch = ''
substituteInPlace src/lang/dune \
--replace "(run git rev-parse --short HEAD)" "(run echo -n nixpkgs)"
'';
dontConfigure = true;
buildPhase = ''
runHook preBuild
dune build
runHook postBuild
'';
installPhase = ''
runHook preInstall
dune install --prefix "$out"
runHook postInstall
'';
fixupPhase = ''
runHook preFixup
wrapProgram $out/bin/liquidsoap \
--set LIQ_LADSPA_PATH /run/current-system/sw/lib/ladspa \
--prefix PATH : ${lib.makeBinPath runtimePackages}
runHook postFixup
'';
strictDeps = true;
nativeBuildInputs = [
makeWrapper
pkg-config
which
ocamlPackages.ocaml
ocamlPackages.dune_3
ocamlPackages.findlib
ocamlPackages.menhir
];
buildInputs = [
libjpeg
# Mandatory dependencies
ocamlPackages.dtools
ocamlPackages.duppy
ocamlPackages.mm
ocamlPackages.ocurl
ocamlPackages.cry
ocamlPackages.camomile
ocamlPackages.uri
ocamlPackages.fileutils
ocamlPackages.magic-mime
ocamlPackages.menhir # liquidsoap-lang
ocamlPackages.menhirLib
ocamlPackages.metadata
ocamlPackages.dune-build-info
ocamlPackages.re
ocamlPackages.sedlex # liquidsoap-lang
ocamlPackages.ppx_string
# Recommended dependencies
ocamlPackages.ffmpeg
# Optional dependencies
ocamlPackages.alsa
ocamlPackages.ao
ocamlPackages.bjack
ocamlPackages.camlimages
ocamlPackages.dssi
ocamlPackages.faad
ocamlPackages.fdkaac
ocamlPackages.flac
ocamlPackages.frei0r
ocamlPackages.gd4o
ocamlPackages.graphics
ocamlPackages.imagelib
ocamlPackages.inotify
ocamlPackages.ladspa
ocamlPackages.lame
ocamlPackages.lastfm
ocamlPackages.lilv
ocamlPackages.lo
ocamlPackages.mad
ocamlPackages.ogg
ocamlPackages.opus
ocamlPackages.portaudio
ocamlPackages.posix-time2
ocamlPackages.pulseaudio
ocamlPackages.samplerate
ocamlPackages.shine
ocamlPackages.soundtouch
ocamlPackages.speex
ocamlPackages.srt
ocamlPackages.ssl
ocamlPackages.taglib
ocamlPackages.theora
ocamlPackages.tsdl
ocamlPackages.tsdl-image
ocamlPackages.tsdl-ttf
ocamlPackages.vorbis
ocamlPackages.xmlplaylist
ocamlPackages.yaml
];
meta = {
description = "Swiss-army knife for multimedia streaming";
mainProgram = "liquidsoap";
homepage = "https://www.liquidsoap.info/";
changelog = "https://raw.githubusercontent.com/savonet/liquidsoap/main/CHANGES.md";
maintainers = with lib.maintainers; [ dandellion ehmry ];
license = lib.licenses.gpl2Plus;
platforms = ocamlPackages.ocaml.meta.platforms or [];
};
}
|