Commit a37c00f0 authored by jaredmontoya's avatar jaredmontoya
Browse files

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: default avatarAlexandre Cavalheiro S. Tiago da Silva <contact@thewizard.link>
parent d44d5d52
Loading
Loading
Loading
Loading
+0 −99
Original line number Diff line number Diff line
{
  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 $<TARGET_FILE: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 = [ ];
  };
})
+8 −0
Original line number Diff line number Diff line
{ lmms }:

lmms.override {
  withSoundio = true;
  withPortAudio = true;
  withSndio = true;
  withWine = true;
}
+38 −0
Original line number Diff line number Diff line
From 9d05021c4e9370f7e1b8c7595a18ae2b98895a60 Mon Sep 17 00:00:00 2001
From: "Alexandre Cavalheiro S. Tiago da Silva" <contact@thewizard.link>
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
+49 −0
Original line number Diff line number Diff line
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)
+190 −0
Original line number Diff line number Diff line
{
  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
    ];
  };
})
Loading