Unverified Commit 3f97b1d3 authored by K900's avatar K900 Committed by GitHub
Browse files

Merge pull request #256292 from K900/firefox-bin-cleanup

firefox-bin: cleanup, use autoPatchelfHook
parents 4d256beb db6eb8f6
Loading
Loading
Loading
Loading
+43 −134
Original line number Diff line number Diff line
{ lib, stdenv, fetchurl, config, wrapGAppsHook
{ lib, stdenv, fetchurl, config, wrapGAppsHook, autoPatchelfHook
, alsa-lib
, atk
, cairo
, curl
, cups
, dbus-glib
, dbus
, fontconfig
, freetype
, gdk-pixbuf
, glib
, glibc
, gtk3
, libkrb5
, libX11
, libXScrnSaver
, libxcb
, libXcomposite
, libXcursor
, libXdamage
, libXext
, libXfixes
, libXi
, libXinerama
, libXrender
, libXrandr
, libXt
, libXtst
, libcanberra
, libnotify
, adwaita-icon-theme
, libGLU, libGL
, nspr
, nss
, pango
, pipewire
, libva
, pciutils
, heimdal
, libpulseaudio
, systemd
, pipewire
, adwaita-icon-theme
, channel
, generated
, writeScript
@@ -48,9 +17,7 @@
, gnused
, gnugrep
, gnupg
, ffmpeg
, runtimeShell
, mesa # firefox wants gbm for drm+dmabuf
, systemLocale ? config.i18n.defaultLocale or "en_US"
}:

@@ -58,6 +25,8 @@ let

  inherit (generated) version sources;

  binaryName = if channel == "release" then "firefox" else "firefox-${channel}";

  mozillaPlatforms = {
    i686-linux = "linux-i686";
    x86_64-linux = "linux-x86_64";
@@ -95,115 +64,54 @@ stdenv.mkDerivation {

  src = fetchurl { inherit (source) url sha256; };

  libPath = lib.makeLibraryPath
    [ stdenv.cc.cc
  nativeBuildInputs = [ wrapGAppsHook autoPatchelfHook ];
  buildInputs = [
    gtk3
    adwaita-icon-theme
    alsa-lib
      atk
      cairo
      curl
      cups
    dbus-glib
      dbus
      fontconfig
      freetype
      gdk-pixbuf
      glib
      glibc
      gtk3
      libkrb5
      mesa
      libX11
      libXScrnSaver
      libXcomposite
      libXcursor
      libxcb
      libXdamage
      libXext
      libXfixes
      libXi
      libXinerama
      libXrender
      libXrandr
      libXt
    libXtst
      libcanberra
      libnotify
      libGLU libGL
      nspr
      nss
      pango
      pipewire
  ];
  runtimeDependencies = [
    curl
    libva.out
    pciutils
      heimdal
      libpulseaudio
      systemd
      ffmpeg
    ] + ":" + lib.makeSearchPathOutput "lib" "lib64" [
      stdenv.cc.cc
  ];

  inherit gtk3;

  nativeBuildInputs = [ wrapGAppsHook ];
  buildInputs = [ gtk3 adwaita-icon-theme ];

  # "strip" after "patchelf" may break binaries.
  # See: https://github.com/NixOS/patchelf/issues/10
  dontStrip = true;
  dontPatchELF = true;

  postPatch = ''
    # Don't download updates from Mozilla directly
    echo 'pref("app.update.auto", "false");' >> defaults/pref/channel-prefs.js
  '';
  appendRunpaths = [
    "${pipewire.lib}/lib"
  ];

  installPhase =
    ''
      mkdir -p "$prefix/usr/lib/firefox-bin-${version}"
      cp -r * "$prefix/usr/lib/firefox-bin-${version}"
      mkdir -p "$prefix/lib/firefox-bin-${version}"
      cp -r * "$prefix/lib/firefox-bin-${version}"

      mkdir -p "$out/bin"
      ln -s "$prefix/usr/lib/firefox-bin-${version}/firefox" "$out/bin/"

      for executable in \
        firefox firefox-bin plugin-container \
        updater crashreporter webapprt-stub \
        glxtest vaapitest
      do
        if [ -e "$out/usr/lib/firefox-bin-${version}/$executable" ]; then
          patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
            "$out/usr/lib/firefox-bin-${version}/$executable"
        fi
      done

      find . -executable -type f -exec \
        patchelf --set-rpath "$libPath" \
          "$out/usr/lib/firefox-bin-${version}/{}" \;

      # wrapFirefox expects "$out/lib" instead of "$out/usr/lib"
      ln -s "$out/usr/lib" "$out/lib"

      gappsWrapperArgs+=(--argv0 "$out/bin/.firefox-wrapped")
      ln -s "$prefix/lib/firefox-bin-${version}/firefox" "$out/bin/${binaryName}"

      # See: https://github.com/mozilla/policy-templates/blob/master/README.md
      mkdir -p "$out/lib/firefox-bin-${version}/distribution";
      ln -s ${policiesJson} "$out/lib/firefox-bin-${version}/distribution/policies.json";
    '';

  passthru.binaryName = "firefox";
  passthru.libName = "firefox-bin-${version}";
  passthru.execdir = "/bin";
  passthru.ffmpegSupport = true;
  passthru.gssSupport = true;
  passthru = {
    inherit binaryName;
    libName = "firefox-bin-${version}";
    ffmpegSupport = true;
    gssSupport = true;
    gtk3 = gtk3;

    # update with:
    # $ nix-shell maintainers/scripts/update.nix --argstr package firefox-bin-unwrapped
  passthru.updateScript = import ./update.nix {
    updateScript = import ./update.nix {
      inherit pname channel lib writeScript xidel coreutils gnused gnugrep gnupg curl runtimeShell;
      baseUrl =
        if channel == "devedition"
          then "https://archive.mozilla.org/pub/devedition/releases/"
          else "https://archive.mozilla.org/pub/firefox/releases/";
    };
  };

  meta = with lib; {
    changelog = "https://www.mozilla.org/en-US/firefox/${version}/releasenotes/";
    description = "Mozilla Firefox, free web browser (binary package)";
@@ -213,5 +121,6 @@ stdenv.mkDerivation {
    platforms = builtins.attrNames mozillaPlatforms;
    hydraPlatforms = [];
    maintainers = with maintainers; [ taku0 lovesegfault ];
    mainProgram = binaryName;
  };
}
+2 −4
Original line number Diff line number Diff line
@@ -32121,20 +32121,18 @@ with pkgs;
  firefox-beta-bin = res.wrapFirefox firefox-beta-bin-unwrapped {
    pname = "firefox-beta-bin";
    desktopName = "Firefox Beta";
    wmClass = "firefox-beta";
  };
  firefox-devedition-bin-unwrapped = callPackage ../applications/networking/browsers/firefox-bin {
    inherit (gnome) adwaita-icon-theme;
    channel = "devedition";
    channel = "developer-edition";
    generated = import ../applications/networking/browsers/firefox-bin/devedition_sources.nix;
  };
  firefox-devedition-bin = res.wrapFirefox firefox-devedition-bin-unwrapped {
    nameSuffix = "-devedition";
    pname = "firefox-devedition-bin";
    desktopName = "Firefox DevEdition";
    wmClass = "firefox-devedition";
    wmClass = "firefox-aurora";
  };
  librewolf-unwrapped = callPackage ../applications/networking/browsers/librewolf { };