diff options
-rw-r--r-- | nixpkgs-overlays/nixpkgs-mozilla/firefox-overlay.nix | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/nixpkgs-overlays/nixpkgs-mozilla/firefox-overlay.nix b/nixpkgs-overlays/nixpkgs-mozilla/firefox-overlay.nix index 083b9fbbe683..98648ba42688 100644 --- a/nixpkgs-overlays/nixpkgs-mozilla/firefox-overlay.nix +++ b/nixpkgs-overlays/nixpkgs-mozilla/firefox-overlay.nix @@ -39,13 +39,17 @@ let # The timestamp argument is a yyyy-mm-dd-hh-mm-ss date, which corresponds to # one specific version. This is used mostly for bisecting. - versionInfo = { name, version, release, system ? arch, timestamp ? null }: with builtins; + versionInfo = + { name, version, release, source ? false, system ? arch, timestamp ? null }: + with builtins; if release then # For versions such as Beta & Release: # https://download.cdn.mozilla.net/pub/firefox/releases/55.0b3/SHA256SUMS let dir = "https://download.cdn.mozilla.net/pub/firefox/releases/${version}"; - file = "${system}/en-US/firefox-${version}.tar.bz2"; + file = if source + then "source/firefox-${version}.source.tar.xz" + else "${system}/en-US/firefox-${version}.tar.bz2"; in rec { chksum = "${dir}/SHA512SUMS"; chksumSig = "${chksum}.asc"; @@ -59,7 +63,8 @@ let dir = if timestamp == null then "https://download.cdn.mozilla.net/pub/firefox/nightly/latest-mozilla-central" else "https://download.cdn.mozilla.net/pub/firefox/nightly/${yearOf timestamp}/${monthOf timestamp}/${timestamp}-mozilla-central" ; - file = "firefox-${version}.en-US.${system}.tar.bz2"; + name = "firefox-${version}.en-US.${system}"; + file = "${name}.tar.bz2"; in rec { chksum = "${dir}/firefox-${version}.en-US.${system}.checksums"; chksumSig = "${chksum}.asc"; @@ -68,6 +73,7 @@ let # <hash> sha256 62733881 firefox-56.0a1.en-US.linux-x86_64.tar.bz2 url = "${dir}/${file}"; sha512 = head (match ".*[\n]([0-9a-f]*) sha512 [0-9]* ${file}[\n].*" (readFile (fetchurl chksum))); + rev = (fromJSON (readFile (fetchurl "${dir}/${name}.json"))).moz_source_stamp; }; # From the version info, check the authenticity of the check sum file, such @@ -99,6 +105,34 @@ let ''; }; + firefoxVersionFromSource = version: + let + info = versionInfo (version // { source = true; }); + common = import <nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix>; + in + self.callPackage (common { + pname = "firefox-${version.version}"; + ffversion = version.version; + src = + if version.release then + fetchVersion info + else + fetchTarball "https://hg.mozilla.org/mozilla-central/archive/${info.rev}.tar.bz2"; + meta = self.firefox-unwrapped.meta // { + description = "A web browser built from Firefox source tree"; + }; + extraNativeBuildInputs = [ self.python3 ]; + }) { + inherit (self.gnome2) libIDL; + libpng = self.libpng_apng; + gnused = self.gnused_422; + icu = self.icu63; + inherit (self.darwin.apple_sdk.frameworks) CoreMedia ExceptionHandling + Kerberos AVFoundation MediaToolbox + CoreLocation Foundation AddressBook; + inherit (self.darwin) libobjc; + }; + firefoxVersion = version: let info = versionInfo version; in super.wrapFirefox ((self.firefox-bin-unwrapped.override { @@ -146,6 +180,26 @@ in version = firefox_versions.FIREFOX_ESR; release = true; }; + firefox-nightly = firefoxVersionFromSource { + name = "Firefox Nightly"; + version = firefox_versions.FIREFOX_NIGHTLY; + release = false; + }; + firefox-beta = firefoxVersionFromSource { + name = "Firefox Beta"; + version = firefox_versions.LATEST_FIREFOX_DEVEL_VERSION; + release = true; + }; + firefox = firefoxVersionFromSource { + name = "Firefox"; + version = firefox_versions.LATEST_FIREFOX_VERSION; + release = true; + }; + firefox-esr = firefoxVersionFromSource { + name = "Firefox Esr"; + version = firefox_versions.FIREFOX_ESR; + release = true; + }; }; # Set of packages which used to build developer environment @@ -159,7 +213,7 @@ in rust-cbindgen = if !(self ? "rust-cbindgen") then self.rust-cbindgen-latest - else if builtins.compareVersions self.rust-cbindgen.version "0.6.7" < 0 + else if builtins.compareVersions self.rust-cbindgen.version "0.6.8" < 0 then self.rust-cbindgen-latest else self.rust-cbindgen; # Due to std::ascii::AsciiExt changes in 1.23, Gecko does not compile, so |