avante-nvim: 0.0.12 -> 0.0.13 (#365261)
[NixPkgs.git] / pkgs / applications / audio / musescore / default.nix
blob4a06c49e49ef0bc67690489efbb650297ca4c1ea
2   stdenv,
3   lib,
4   fetchFromGitHub,
5   fetchpatch,
6   cmake,
7   wrapGAppsHook3,
8   wrapQtAppsHook,
9   pkg-config,
10   ninja,
11   alsa-lib,
12   alsa-plugins,
13   freetype,
14   libjack2,
15   lame,
16   libogg,
17   libpulseaudio,
18   libsndfile,
19   libvorbis,
20   portaudio,
21   portmidi,
22   qtbase,
23   qtdeclarative,
24   flac,
25   libopusenc,
26   libopus,
27   tinyxml-2,
28   qt5compat,
29   qtwayland,
30   qtsvg,
31   qtscxml,
32   qtnetworkauth,
33   qttools,
34   nixosTests,
35   apple-sdk_11,
38 stdenv.mkDerivation (finalAttrs: {
39   pname = "musescore";
40   version = "4.4.4";
42   src = fetchFromGitHub {
43     owner = "musescore";
44     repo = "MuseScore";
45     rev = "v${finalAttrs.version}";
46     sha256 = "sha256-/1kAgzmSbnuCqd6YxbaYW2+gE0Gvy373y5VfUK4OVzI=";
47   };
49   cmakeFlags = [
50     "-DMUSE_APP_BUILD_MODE=release"
51     # Disable the build and usage of the `/bin/crashpad_handler` utility - it's
52     # not useful on NixOS, see:
53     # https://github.com/musescore/MuseScore/issues/15571
54     "-DMUSE_MODULE_DIAGNOSTICS_CRASHPAD_CLIENT=OFF"
55     # Use our versions of system libraries
56     "-DMUE_COMPILE_USE_SYSTEM_FREETYPE=ON"
57     "-DMUE_COMPILE_USE_SYSTEM_HARFBUZZ=ON"
58     "-DMUE_COMPILE_USE_SYSTEM_TINYXML=ON"
59     # Implies also -DMUE_COMPILE_USE_SYSTEM_OPUS=ON
60     "-DMUE_COMPILE_USE_SYSTEM_OPUSENC=ON"
61     "-DMUE_COMPILE_USE_SYSTEM_FLAC=ON"
62     # Don't bundle qt qml files, relevant really only for darwin, but we set
63     # this for all platforms anyway.
64     "-DMUE_COMPILE_INSTALL_QTQML_FILES=OFF"
65     # Don't build unit tests unless we are going to run them.
66     (lib.cmakeBool "MUSE_ENABLE_UNIT_TESTS" finalAttrs.finalPackage.doCheck)
67   ];
69   qtWrapperArgs =
70     [
71       # MuseScore JACK backend loads libjack at runtime.
72       "--prefix ${lib.optionalString stdenv.hostPlatform.isDarwin "DY"}LD_LIBRARY_PATH : ${
73         lib.makeLibraryPath [ libjack2 ]
74       }"
75     ]
76     ++ lib.optionals (stdenv.hostPlatform.isLinux) [
77       "--set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib"
78     ]
79     ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
80       # There are some issues with using the wayland backend, see:
81       # https://musescore.org/en/node/321936
82       "--set-default QT_QPA_PLATFORM xcb"
83     ];
85   preFixup = ''
86     qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
87   '';
89   dontWrapGApps = true;
91   nativeBuildInputs =
92     [
93       wrapQtAppsHook
94       cmake
95       qttools
96       pkg-config
97       ninja
98     ]
99     ++ lib.optionals stdenv.hostPlatform.isLinux [
100       # Since https://github.com/musescore/MuseScore/pull/13847/commits/685ac998
101       # GTK3 is needed for file dialogs. Fixes crash with No GSettings schemas error.
102       wrapGAppsHook3
103     ];
105   buildInputs =
106     [
107       libjack2
108       freetype
109       lame
110       libogg
111       libpulseaudio
112       libsndfile
113       libvorbis
114       portaudio
115       portmidi
116       flac
117       libopusenc
118       libopus
119       tinyxml-2
120       qtbase
121       qtdeclarative
122       qt5compat
123       qtsvg
124       qtscxml
125       qtnetworkauth
126     ]
127     ++ lib.optionals stdenv.hostPlatform.isLinux [
128       alsa-lib
129       qtwayland
130     ]
131     ++ lib.optionals stdenv.hostPlatform.isDarwin [
132       apple-sdk_11
133     ];
135   postInstall =
136     ''
137       # Remove unneeded bundled libraries and headers
138       rm -r $out/{include,lib}
139     ''
140     + lib.optionalString stdenv.hostPlatform.isDarwin ''
141       mkdir -p "$out/Applications"
142       mv "$out/mscore.app" "$out/Applications/mscore.app"
143       mkdir -p $out/bin
144       ln -s $out/Applications/mscore.app/Contents/MacOS/mscore $out/bin/mscore
145     '';
147   # muse-sounds-manager installs Muse Sounds sampler libMuseSamplerCoreLib.so.
148   # It requires that argv0 of the calling process ends with "/mscore" or "/MuseScore-4".
149   # We need to ensure this in two cases:
150   #
151   # 1) when the user invokes MuseScore as "mscore" on the command line or from
152   #    the .desktop file, and the normal argv0 is "mscore" (no "/");
153   # 2) when MuseScore invokes itself via File -> New, and the normal argv0 is
154   #    the target of /proc/self/exe, which in Nixpkgs was "{...}/.mscore-wrapped"
155   #
156   # In order to achieve (2) we install the final binary as $out/libexec/mscore, and
157   # in order to achieve (1) we use makeWrapper without --inherit-argv0.
158   #
159   # wrapQtAppsHook uses wrapQtApp -> wrapProgram -> makeBinaryWrapper --inherit-argv0
160   # so we disable it and explicitly use makeQtWrapper.
161   #
162   # TODO: check if something like this is also needed for macOS.
163   dontWrapQtApps = stdenv.hostPlatform.isLinux;
164   postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
165     mkdir -p $out/libexec
166     mv $out/bin/mscore $out/libexec
167     makeQtWrapper $out/libexec/mscore $out/bin/mscore
168   '';
170   # Don't run bundled upstreams tests, as they require a running X window system.
171   doCheck = false;
173   passthru.tests = nixosTests.musescore;
175   meta = with lib; {
176     description = "Music notation and composition software";
177     homepage = "https://musescore.org/";
178     license = licenses.gpl3Only;
179     maintainers = with maintainers; [
180       vandenoever
181       doronbehar
182       orivej
183     ];
184     mainProgram = "mscore";
185     platforms = platforms.unix;
186   };