{ stdenv , lib , testers , furnace , fetchFromGitHub , cmake , pkg-config , makeWrapper , fftw , fmt_8 , freetype , libsndfile , libX11 , rtmidi , SDL2 , zlib , withJACK ? stdenv.hostPlatform.isUnix , libjack2 , withGUI ? true , darwin , 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 (finalAttrs: { pname = "furnace"; version = "0.6.5"; src = fetchFromGitHub { owner = "tildearrow"; repo = "furnace"; rev = "v${finalAttrs.version}"; fetchSubmodules = true; hash = "sha256-szDRaujlstRHbvuddi8HdYb00uHNyvAz+/Ex1mKfMXY="; }; 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-fail 'libX11.so' '${lib.getLib libX11}/lib/libX11.so' ''; nativeBuildInputs = [ cmake pkg-config ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ makeWrapper ]; buildInputs = [ fftw fmt_8 freetype 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 (with darwin.apple_sdk.frameworks; [ Cocoa ]); cmakeFlags = [ (lib.cmakeBool "BUILD_GUI" withGUI) (lib.cmakeBool "SYSTEM_FFTW" true) (lib.cmakeBool "SYSTEM_FMT" true) (lib.cmakeBool "SYSTEM_LIBSNDFILE" true) (lib.cmakeBool "SYSTEM_RTMIDI" true) (lib.cmakeBool "SYSTEM_SDL2" true) (lib.cmakeBool "SYSTEM_ZLIB" true) (lib.cmakeBool "USE_FREETYPE" true) (lib.cmakeBool "SYSTEM_FREETYPE" true) (lib.cmakeBool "WITH_JACK" withJACK) (lib.cmakeBool "WITH_PORTAUDIO" true) (lib.cmakeBool "SYSTEM_PORTAUDIO" true) (lib.cmakeBool "WITH_RENDER_SDL" true) (lib.cmakeBool "WITH_RENDER_OPENGL" withGL) (lib.cmakeBool "USE_GLES" (withGL && preferGLES)) (lib.cmakeBool "WITH_RENDER_METAL" false) # fails to build (lib.cmakeBool "WITH_RENDER_OPENGL1" (withGL && !preferGLES)) # New l10n code still has some fortify bugs (lib.cmakeBool "WARNINGS_ARE_ERRORS" false) (lib.cmakeBool "FORCE_APPLE_BIN" true) ]; 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 = { description = "Multi-system chiptune tracker compatible with DefleMask modules"; homepage = "https://github.com/tildearrow/furnace"; changelog = "https://github.com/tildearrow/furnace/releases/tag/v${finalAttrs.version}"; license = with lib.licenses; [ gpl2Plus ]; maintainers = with lib.maintainers; [ OPNA2608 ]; platforms = lib.platforms.all; mainProgram = "furnace"; }; })