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
|
{ stdenv
, lib
, testers
, furnace
, fetchFromGitHub
, cmake
, pkg-config
, makeWrapper
, fftw
, fmt_8
, libsndfile
, libX11
, rtmidi
, SDL2
, zlib
, withJACK ? stdenv.hostPlatform.isUnix
, libjack2
, withGUI ? true
, Cocoa
, portaudio
, alsa-lib
# Enable GL/GLES rendering
, withGL ? !stdenv.hostPlatform.isDarwin
# Use GLES instead of GL, some platforms have better support for one than the other
, preferGLES ? stdenv.hostPlatform.isAarch
}:
stdenv.mkDerivation rec {
pname = "furnace";
version = "0.6.2";
src = fetchFromGitHub {
owner = "tildearrow";
repo = "furnace";
rev = "v${version}";
fetchSubmodules = true;
hash = "sha256-Pv9Sx+bdoy8uV5o9i1rUSuokwQVA8EPYFkZXM8Fynmk=";
};
postPatch = lib.optionalString stdenv.hostPlatform.isLinux ''
# To offer scaling detection on X11, furnace checks if libX11.so is available via dlopen and uses some of its functions
# But it's being linked against a versioned libX11.so.VERSION via SDL, so the unversioned one is not on the rpath
substituteInPlace src/gui/scaling.cpp \
--replace 'libX11.so' '${lib.getLib libX11}/lib/libX11.so'
'';
nativeBuildInputs = [
cmake
pkg-config
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
makeWrapper
];
buildInputs = [
fftw
fmt_8
libsndfile
rtmidi
SDL2
zlib
portaudio
] ++ lib.optionals withJACK [
libjack2
] ++ lib.optionals stdenv.hostPlatform.isLinux [
# portaudio pkg-config is pulling this in as a link dependency, not set in propagatedBuildInputs
alsa-lib
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
Cocoa
];
cmakeFlags = [
"-DBUILD_GUI=${if withGUI then "ON" else "OFF"}"
"-DSYSTEM_FFTW=ON"
"-DSYSTEM_FMT=ON"
"-DSYSTEM_LIBSNDFILE=ON"
"-DSYSTEM_RTMIDI=ON"
"-DSYSTEM_SDL2=ON"
"-DSYSTEM_ZLIB=ON"
"-DSYSTEM_PORTAUDIO=ON"
"-DWITH_JACK=${if withJACK then "ON" else "OFF"}"
"-DWITH_PORTAUDIO=ON"
"-DWITH_RENDER_SDL=ON"
"-DWITH_RENDER_OPENGL=${lib.boolToString withGL}"
"-DWARNINGS_ARE_ERRORS=ON"
] ++ lib.optionals withGL [
"-DUSE_GLES=${lib.boolToString preferGLES}"
];
postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
# Normal CMake install phase on Darwin only installs the binary, the user is expected to use CPack to build a
# bundle. That adds alot of overhead for not much benefit (CPack is currently abit broken, and needs impure access
# to /usr/bin/hdiutil). So we'll manually assemble & install everything instead.
mkdir -p $out/{Applications/Furnace.app/Contents/{MacOS,Resources},share/{,doc,licenses}/furnace}
mv $out/{bin,Applications/Furnace.app/Contents/MacOS}/furnace
makeWrapper $out/{Applications/Furnace.app/Contents/MacOS,bin}/furnace
install -m644 {../res,$out/Applications/Furnace.app/Contents}/Info.plist
install -m644 ../res/icon.icns $out/Applications/Furnace.app/Contents/Resources/Furnace.icns
install -m644 {..,$out/share/licenses/furnace}/LICENSE
cp -r ../papers $out/share/doc/furnace/
cp -r ../demos $out/share/furnace/
'';
passthru = {
updateScript = ./update.sh;
tests.version = testers.testVersion {
package = furnace;
};
};
meta = with lib; {
description = "Multi-system chiptune tracker compatible with DefleMask modules";
homepage = "https://github.com/tildearrow/furnace";
changelog = "https://github.com/tildearrow/furnace/releases/tag/v${version}";
license = with licenses; [ gpl2Plus ];
maintainers = with maintainers; [ OPNA2608 ];
platforms = platforms.all;
mainProgram = "furnace";
};
}
|