From a37c00f048c6f84e77eb6bdd96a088e5eef8eb52 Mon Sep 17 00:00:00 2001 From: jaredmontoya <49511278+jaredmontoya@users.noreply.github.com> Date: Mon, 16 Mar 2026 15:17:43 +0100 Subject: [PATCH] lmms: 1.2.2 -> 1.2.2-unstable-2026-04-21 LMMS 1.2.2 is 6 years old and the software has undergone many changes since then, unfortunately however, no branches or tags are being made as the software progresses so we stay as close to git as possible. Co-authored-by: Alexandre Cavalheiro S. Tiago da Silva --- pkgs/applications/audio/lmms/default.nix | 99 --------- pkgs/by-name/lm/lmms-full/package.nix | 8 + ...tring-to-FindWine-for-replacement-in.patch | 38 ++++ .../lm/lmms/0002-fix-gigplayer-linking.patch | 49 +++++ pkgs/by-name/lm/lmms/package.nix | 190 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 - 6 files changed, 285 insertions(+), 105 deletions(-) delete mode 100644 pkgs/applications/audio/lmms/default.nix create mode 100644 pkgs/by-name/lm/lmms-full/package.nix create mode 100644 pkgs/by-name/lm/lmms/0001-fix-add-unique-string-to-FindWine-for-replacement-in.patch create mode 100644 pkgs/by-name/lm/lmms/0002-fix-gigplayer-linking.patch create mode 100644 pkgs/by-name/lm/lmms/package.nix diff --git a/pkgs/applications/audio/lmms/default.nix b/pkgs/applications/audio/lmms/default.nix deleted file mode 100644 index f8e9cb71366c..000000000000 --- a/pkgs/applications/audio/lmms/default.nix +++ /dev/null @@ -1,99 +0,0 @@ -{ - lib, - stdenv, - fetchFromGitHub, - fetchpatch, - cmake, - pkg-config, - wrapQtAppsHook, - alsa-lib ? null, - carla ? null, - fftwFloat, - fltk_1_3, - fluidsynth ? null, - lame ? null, - libgig ? null, - libjack2 ? null, - libpulseaudio ? null, - libsamplerate, - libsoundio ? null, - libsndfile, - libvorbis ? null, - portaudio ? null, - qtbase, - qtx11extras, - qttools, - SDL ? null, -}: - -stdenv.mkDerivation (finalAttrs: { - pname = "lmms"; - version = "1.2.2"; - - src = fetchFromGitHub { - owner = "LMMS"; - repo = "lmms"; - rev = "v${finalAttrs.version}"; - sha256 = "006hwv1pbh3y5whsxkjk20hsbgwkzr4dawz43afq1gil69y7xpda"; - fetchSubmodules = true; - }; - - nativeBuildInputs = [ - cmake - qttools - pkg-config - wrapQtAppsHook - ]; - - buildInputs = [ - carla - alsa-lib - fftwFloat - fltk_1_3 - fluidsynth - lame - libgig - libjack2 - libpulseaudio - libsamplerate - libsndfile - libsoundio - libvorbis - portaudio - qtbase - qtx11extras - SDL # TODO: switch to SDL2 in the next version - ]; - - patches = [ - (fetchpatch { - url = "https://raw.githubusercontent.com/archlinux/svntogit-community/cf64acc45e3264c6923885867e2dbf8b7586a36b/trunk/lmms-carla-export.patch"; - sha256 = "sha256-wlSewo93DYBN2PvrcV58dC9kpoo9Y587eCeya5OX+j4="; - }) - ]; - - prePatch = '' - # Update CMake minimum required version and policies - substituteInPlace CMakeLists.txt --replace 'CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)' 'CMAKE_MINIMUM_REQUIRED(VERSION 3.10)' - substituteInPlace CMakeLists.txt --replace 'CMAKE_POLICY(SET CMP0026 OLD)' 'CMAKE_POLICY(SET CMP0026 NEW)' - substituteInPlace CMakeLists.txt --replace 'CMAKE_POLICY(SET CMP0050 OLD)' 'CMAKE_POLICY(SET CMP0050 NEW)' - substituteInPlace CMakeLists.txt --replace 'GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION)' 'SET(BIN2RES $)' - ''; - - cmakeFlags = [ - "-DWANT_QT5=ON" - ] - ++ lib.optionals (lib.versionOlder finalAttrs.version "11.4") [ - # Fix the build with CMake 4. - "-DCMAKE_POLICY_VERSION_MINIMUM=3.5" - ]; - - meta = { - description = "DAW similar to FL Studio (music production software)"; - mainProgram = "lmms"; - homepage = "https://lmms.io"; - license = lib.licenses.gpl2Plus; - platforms = lib.platforms.linux; - maintainers = [ ]; - }; -}) diff --git a/pkgs/by-name/lm/lmms-full/package.nix b/pkgs/by-name/lm/lmms-full/package.nix new file mode 100644 index 000000000000..20ba81e4a1ac --- /dev/null +++ b/pkgs/by-name/lm/lmms-full/package.nix @@ -0,0 +1,8 @@ +{ lmms }: + +lmms.override { + withSoundio = true; + withPortAudio = true; + withSndio = true; + withWine = true; +} diff --git a/pkgs/by-name/lm/lmms/0001-fix-add-unique-string-to-FindWine-for-replacement-in.patch b/pkgs/by-name/lm/lmms/0001-fix-add-unique-string-to-FindWine-for-replacement-in.patch new file mode 100644 index 000000000000..50683962ef4b --- /dev/null +++ b/pkgs/by-name/lm/lmms/0001-fix-add-unique-string-to-FindWine-for-replacement-in.patch @@ -0,0 +1,38 @@ +From 9d05021c4e9370f7e1b8c7595a18ae2b98895a60 Mon Sep 17 00:00:00 2001 +From: "Alexandre Cavalheiro S. Tiago da Silva" +Date: Tue, 28 Jan 2025 18:36:47 -0300 +Subject: [PATCH] fix!: add unique string to FindWine for replacement in nixos + +--- + cmake/modules/FindWine.cmake | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake +index eeef8d9c2..c04ee4a35 100644 +--- a/cmake/modules/FindWine.cmake ++++ b/cmake/modules/FindWine.cmake +@@ -13,6 +13,13 @@ + # WINE_64_FLAGS - 64-bit linker flags + # + ++set(WINE_INCLUDE_DIR @WINE_LOCATION@/include) ++set(WINE_BUILD @WINE_LOCATION@/bin/winebuild) ++set(WINE_CXX @WINE_LOCATION@/bin/wineg++) ++set(WINE_GCC @WINE_LOCATION@/bin/winegcc) ++set(WINE_32_LIBRARY_DIRS @WINE_LOCATION@/lib/wine/i386-unix) ++set(WINE_64_LIBRARY_DIRS @WINE_LOCATION@/lib/wine/x86_64-unix) ++ + MACRO(_findwine_find_flags output expression result) + STRING(REPLACE " " ";" WINEBUILD_FLAGS "${output}") + FOREACH(FLAG ${WINEBUILD_FLAGS}) +@@ -32,6 +39,7 @@ ENDMACRO() + + # Prefer newest wine first + list(APPEND WINE_LOCATIONS ++ @WINE_LOCATION@ + /opt/wine-staging + /opt/wine-devel + /opt/wine-stable +-- +2.47.1 + diff --git a/pkgs/by-name/lm/lmms/0002-fix-gigplayer-linking.patch b/pkgs/by-name/lm/lmms/0002-fix-gigplayer-linking.patch new file mode 100644 index 000000000000..6276f0d3b4db --- /dev/null +++ b/pkgs/by-name/lm/lmms/0002-fix-gigplayer-linking.patch @@ -0,0 +1,49 @@ +Use modern CMake imported target for libgig to ensure proper RPATH propagation. + +The old-style link_directories()/link_libraries() pattern does not propagate +library paths to the install RPATH, causing libgig.so to not be found at +runtime when it is installed in a non-standard directory (e.g. lib/libgig/). + +Using IMPORTED_TARGET with pkg_check_modules creates a PkgConfig::GIG target +that carries include dirs, library paths, and link flags, and CMake correctly +propagates these to the install RPATH via target_link_libraries(). + +Also set CMAKE_INSTALL_RPATH_USE_LINK_PATH in the GigPlayer scope, since the +upstream code only sets it in src/CMakeLists.txt which does not apply to the +sibling plugins/ directory. + +diff -ruN a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -550,7 +550,7 @@ + + # check for libgig + If(WANT_GIG) +- PKG_CHECK_MODULES(GIG gig) ++ PKG_CHECK_MODULES(GIG IMPORTED_TARGET gig) + IF(GIG_FOUND) + SET(LMMS_HAVE_GIG TRUE) + SET(STATUS_GIG "OK") +diff -ruN a/plugins/GigPlayer/CMakeLists.txt b/plugins/GigPlayer/CMakeLists.txt +--- a/plugins/GigPlayer/CMakeLists.txt ++++ b/plugins/GigPlayer/CMakeLists.txt +@@ -1,17 +1,16 @@ + if(LMMS_HAVE_GIG) + INCLUDE(BuildPlugin) +- include_directories(SYSTEM ${GIG_INCLUDE_DIRS}) + SET(CMAKE_AUTOUIC ON) ++ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + + # Required for not crashing loading files with libgig + add_compile_options("-fexceptions") + +- link_directories(${GIG_LIBRARY_DIRS}) +- link_libraries(${GIG_LIBRARIES}) + build_plugin(gigplayer + GigPlayer.cpp GigPlayer.h PatchesDialog.cpp PatchesDialog.h PatchesDialog.ui + MOCFILES GigPlayer.h PatchesDialog.h + EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png" + ) ++ target_link_libraries(gigplayer PkgConfig::GIG) + target_link_libraries(gigplayer SampleRate::samplerate) + endif(LMMS_HAVE_GIG) diff --git a/pkgs/by-name/lm/lmms/package.nix b/pkgs/by-name/lm/lmms/package.nix new file mode 100644 index 000000000000..ecc8e43fadf1 --- /dev/null +++ b/pkgs/by-name/lm/lmms/package.nix @@ -0,0 +1,190 @@ +{ + lib, + stdenv, + fetchFromGitHub, + replaceVars, + unstableGitUpdater, + cmake, + pkg-config, + alsa-lib, + carla, + fftwFloat, + fltk, + fluidsynth, + glibc_multi, + lame, + libgig, + libjack2, + libogg, + libpulseaudio, + libsForQt5, + libsamplerate, + libsoundio, + libsndfile, + libvorbis, + lilv, + lv2, + perl5, + perl5Packages, + portaudio, + qt5, + sndio, + SDL2, + suil, + wineWow64Packages, + withALSA ? true, + withPulseAudio ? true, + withSoundio ? false, + withPortAudio ? false, + withSndio ? false, + withJACK ? true, + withSDL ? true, + withOggVorbis ? true, + withMP3Lame ? true, + withSoundFont ? true, + withZyn ? true, + withSWH ? true, + withSID ? true, + withGIG ? true, + withLV2 ? true, + withVST ? true, + withCarla ? true, + withWine ? false, +}: + +let + winePackages = + if lib.isDerivation wineWow64Packages then wineWow64Packages else wineWow64Packages.minimal; +in +stdenv.mkDerivation (finalAttrs: { + pname = "lmms"; + version = "1.2.2-unstable-2026-04-21"; + + src = fetchFromGitHub { + owner = "LMMS"; + repo = "lmms"; + rev = "fc3dfda961a7923326d2b0d5747e5d8fd941af98"; + hash = "sha256-q8w1CgM2QnkCIOUJlv8r+2zMKl+brbNKoAkhDJEhaN0="; + fetchSubmodules = true; + }; + + strictDeps = true; + __structuredAttrs = true; + + nativeBuildInputs = [ + cmake + libsForQt5.qt5.qttools + pkg-config + qt5.wrapQtAppsHook + ]; + + buildInputs = [ + fftwFloat + libsForQt5.qt5.qtbase + libsForQt5.qt5.qtsvg + libsForQt5.qt5.qtx11extras + libsamplerate + libsndfile + ] + ++ lib.optionals withALSA [ + alsa-lib + ] + ++ lib.optionals withPulseAudio [ + libpulseaudio + ] + ++ lib.optionals withSoundio [ + libsoundio + ] + ++ lib.optionals withPortAudio [ + portaudio + ] + ++ lib.optionals withSndio [ + sndio + ] + ++ lib.optionals withJACK [ + libjack2 + ] + ++ lib.optionals withSDL [ + SDL2 + ] + ++ lib.optionals withOggVorbis [ + libogg + libvorbis + ] + ++ lib.optionals withMP3Lame [ + lame + ] + ++ lib.optionals withSoundFont [ + fluidsynth + ] + ++ lib.optionals withZyn [ + fltk + ] + ++ lib.optionals (withSWH || withSID) [ + perl5 + perl5Packages.ListMoreUtils + perl5Packages.XMLParser + ] + ++ lib.optionals withGIG [ + libgig + ] + ++ lib.optionals withLV2 [ + lilv + lv2 + suil + ] + ++ lib.optionals withCarla [ + carla + ] + ++ lib.optionals withWine [ + glibc_multi + winePackages + ]; + + patches = [ + # Use modern CMake imported target for libgig so that its non-standard + # library path (lib/libgig/) is properly propagated to the install RPATH. + ./0002-fix-gigplayer-linking.patch + ] + ++ lib.optionals withWine [ + (replaceVars ./0001-fix-add-unique-string-to-FindWine-for-replacement-in.patch { + WINE_LOCATION = winePackages; + }) + ]; + + cmakeFlags = [ + # Fix the build with CMake 4. + "-DCMAKE_POLICY_VERSION_MINIMUM=3.5" + (lib.cmakeBool "WANT_ALSA" withALSA) + (lib.cmakeBool "WANT_PULSEAUDIO" withPulseAudio) + (lib.cmakeBool "WANT_SOUNDIO" withSoundio) + (lib.cmakeBool "WANT_PORTAUDIO" withPortAudio) + (lib.cmakeBool "WANT_SNDIO" withSndio) + (lib.cmakeBool "WANT_JACK" withJACK) + (lib.cmakeBool "WANT_WEAKJACK" withJACK) + (lib.cmakeBool "WANT_SDL" withSDL) + (lib.cmakeBool "WANT_OGGVORBIS" withOggVorbis) + (lib.cmakeBool "WANT_MP3LAME" withMP3Lame) + (lib.cmakeBool "WANT_SF2" withSoundFont) + (lib.cmakeBool "WANT_GIG" withGIG) + (lib.cmakeBool "WANT_SID" withSID) + (lib.cmakeBool "WANT_SWH" withSWH) + (lib.cmakeBool "WANT_LV2" withLV2) + (lib.cmakeBool "WANT_VST" withVST) + (lib.cmakeBool "WANT_CARLA" withCarla) + ]; + + passthru.updateScript = unstableGitUpdater { }; + + meta = { + description = "DAW similar to FL Studio (music production software)"; + mainProgram = "lmms"; + homepage = "https://lmms.io"; + license = lib.licenses.gpl2Plus; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ + wizardlink + jaredmontoya + ]; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1a09c77b2e54..cd6d40c0f81e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9885,12 +9885,6 @@ with pkgs; withFonts = true; }; - lmms = libsForQt5.callPackage ../applications/audio/lmms { - lame = null; - libsoundio = null; - portaudio = null; - }; - luminanceHDR = callPackage ../applications/graphics/luminance-hdr { openexr = openexr_2; };