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; };