Unverified Commit 81bcc8ac authored by Artturin's avatar Artturin Committed by GitHub
Browse files

flameshot: fix build on Darwin (#336647)

parents 3791efb1 0174d4a3
Loading
Loading
Loading
Loading
+91 −34
Original line number Diff line number Diff line
{ libsForQt5
, stdenv
, lib
, fetchFromGitHub
, cmake
, nix-update-script
, fetchpatch
, grim
, makeBinaryWrapper
, enableWlrSupport ? false
{
  stdenv,
  lib,
  overrideSDK,
  darwin,
  fetchFromGitHub,
  fetchpatch,
  cmake,
  imagemagick,
  libicns,
  libsForQt5,
  grim,
  makeBinaryWrapper,
  nix-update-script,
  enableWlrSupport ? false,
  enableMonochromeIcon ? false,
}:

stdenv.mkDerivation {
assert stdenv.isDarwin -> (!enableWlrSupport);

let
  stdenv' = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv;
in

stdenv'.mkDerivation {
  pname = "flameshot";
  # wlr screenshotting is currently only available on unstable version (>12.1.0)
  version = "12.1.0-unstable-2024-08-02";
@@ -32,23 +44,30 @@ stdenv.mkDerivation {
    })
  ];

  passthru = {
    updateScript = nix-update-script {
      extraArgs = [ "--version=branch" ];
    };
  };

  cmakeFlags = [
  cmakeFlags =
    [
      (lib.cmakeBool "DISABLE_UPDATE_CHECKER" true)
      (lib.cmakeBool "USE_MONOCHROME_ICON" enableMonochromeIcon)
    ]
    ++ lib.optionals stdenv.isLinux [
      (lib.cmakeBool "USE_WAYLAND_CLIPBOARD" true)
      (lib.cmakeBool "USE_WAYLAND_GRIM" enableWlrSupport)
    ]
    ++ lib.optionals stdenv.isDarwin [
      (lib.cmakeFeature "Qt5_DIR" "${libsForQt5.qtbase.dev}/lib/cmake/Qt5")
    ];

  nativeBuildInputs = [
  nativeBuildInputs =
    [
      cmake
      libsForQt5.qttools
      libsForQt5.qtsvg
      libsForQt5.wrapQtAppsHook
      makeBinaryWrapper
    ]
    ++ lib.optionals stdenv.isDarwin [
      imagemagick
      libicns
    ];

  buildInputs = [
@@ -56,19 +75,57 @@ stdenv.mkDerivation {
    libsForQt5.kguiaddons
  ];

  postPatch = lib.optionalString stdenv.isDarwin ''
    # Fix icns generation running concurrently with png generation
    sed -E -i '/"iconutil -o/i\
        )\
        execute_process(\
    ' src/CMakeLists.txt

    # Replace unavailable commands
    sed -E -i \
        -e 's/"sips -z ([0-9]+) ([0-9]+) +(.+) --out /"magick \3 -resize \1x\2\! /' \
        -e 's/"iconutil -o (.+) -c icns (.+)"/"png2icns \1 \2\/*{16,32,128,256,512}.png"/' \
        src/CMakeLists.txt
  '';

  postInstall = lib.optionalString stdenv.isDarwin ''
    mkdir $out/Applications
    mv $out/bin/flameshot.app $out/Applications

    ln -s $out/Applications/flameshot.app/Contents/MacOS/flameshot $out/bin/flameshot

    rm -r $out/share/applications
    rm -r $out/share/dbus*
    rm -r $out/share/icons
    rm -r $out/share/metainfo
  '';

  dontWrapQtApps = true;

  postFixup = ''
    wrapProgram $out/bin/flameshot \
  postFixup =
    let
      binary =
        if stdenv.isDarwin then "Applications/flameshot.app/Contents/MacOS/flameshot" else "bin/flameshot";
    in
    ''
      wrapProgram $out/${binary} \
        ${lib.optionalString enableWlrSupport "--prefix PATH : ${lib.makeBinPath [ grim ]}"} \
        ''${qtWrapperArgs[@]}
    '';

  passthru = {
    updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
  };

  meta = with lib; {
    description = "Powerful yet simple to use screenshot software";
    homepage = "https://github.com/flameshot-org/flameshot";
    mainProgram = "flameshot";
    maintainers = with maintainers; [ scode oxalica ];
    maintainers = with maintainers; [
      scode
      oxalica
    ];
    license = licenses.gpl3Plus;
    platforms = platforms.linux ++ platforms.darwin;
  };