about summary refs log tree commit diff
path: root/pkgs/development/interpreters/spidermonkey
diff options
context:
space:
mode:
authorKirill A. Korinsky <kirill@korins.ky>2022-08-04 15:59:00 +0200
committerJan Tojnar <jtojnar@gmail.com>2022-08-10 23:33:20 +0200
commit9a99e98ea4096d29852fcf7914fca9d5b8627263 (patch)
tree659b6a0a3a5d6efb66519e4ce624fb138a92c964 /pkgs/development/interpreters/spidermonkey
parent1573bc922966426466112fe0db5123a8711ebbc3 (diff)
spidermonkey_78: factor out into a common expression
Diffstat (limited to 'pkgs/development/interpreters/spidermonkey')
-rw-r--r--pkgs/development/interpreters/spidermonkey/78.nix139
-rw-r--r--pkgs/development/interpreters/spidermonkey/common.nix50
2 files changed, 47 insertions, 142 deletions
diff --git a/pkgs/development/interpreters/spidermonkey/78.nix b/pkgs/development/interpreters/spidermonkey/78.nix
index 0ce007057a230..05124a417fef9 100644
--- a/pkgs/development/interpreters/spidermonkey/78.nix
+++ b/pkgs/development/interpreters/spidermonkey/78.nix
@@ -1,139 +1,4 @@
-{ lib, stdenv
-, fetchurl
-, fetchpatch
-, autoconf213
-, pkg-config
-, perl
-, python39
-, zip
-, buildPackages
-, which
-, readline
-, zlib
-, icu67
-, cargo
-, rustc
-, rust-cbindgen
-, yasm
-, nspr
-}:
-
-stdenv.mkDerivation rec {
-  pname = "spidermonkey";
+import ./common.nix {
   version = "78.15.0";
-
-  src = fetchurl {
-    url = "mirror://mozilla/firefox/releases/${version}esr/source/firefox-${version}esr.source.tar.xz";
-    sha256 = "0l91cxdc5v9fps79ckb1kid4gw6v5qng1jd9zvaacwaiv628shx4";
-  };
-
-  patches = [
-    # Fix build failure on armv7l using Debian patch
-    # Upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1526653
-    (fetchpatch {
-      url = "https://salsa.debian.org/mozilla-team/firefox/commit/fd6847c9416f9eebde636e21d794d25d1be8791d.patch";
-      sha256 = "02b7zwm6vxmk61aj79a6m32s1k5sr0hwm3q1j4v6np9jfyd10g1j";
-    })
-
-    # Remove this when updating to 79 - The patches are already applied upstream
-    # https://bugzilla.mozilla.org/show_bug.cgi?id=1318905
-
-    # Combination of 3 changesets, modified to apply on 78:
-    # - https://hg.mozilla.org/mozilla-central/rev/06d7e1b6b7e7
-    # - https://hg.mozilla.org/mozilla-central/rev/ec48f15d085c
-    # - https://hg.mozilla.org/mozilla-central/rev/6803dda74d33
-    ./add-riscv64-support.patch
-  ];
-
-  outputs = [ "out" "dev" ];
-  setOutputFlags = false; # Configure script only understands --includedir
-
-  nativeBuildInputs = [
-    autoconf213
-    cargo
-    rustc.llvmPackages.llvm # for llvm-objdump
-    perl
-    pkg-config
-    python39
-    rust-cbindgen
-    rustc
-    which
-    yasm # to buid icu? seems weird
-    zip
-  ];
-
-  buildInputs = [
-    icu67
-    nspr
-    readline
-    zlib
-  ];
-
-  preConfigure = ''
-    export CXXFLAGS="-fpermissive"
-    export LIBXUL_DIST=$out
-    export PYTHON="${buildPackages.python3.interpreter}"
-
-    # We can't build in js/src/, so create a build dir
-    mkdir obj
-    cd obj/
-    configureScript=../js/src/configure
-  '';
-
-  configureFlags = [
-    "--with-system-zlib"
-    "--with-system-nspr"
-    "--with-system-icu"
-    "--with-intl-api"
-    "--enable-readline"
-    "--enable-shared-js"
-    "--disable-jemalloc"
-    # Fedora and Arch disable optimize, but it doesn't seme to be necessary
-    # It turns on -O3 which some gcc version had a problem with:
-    # https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
-    "--enable-optimize"
-    "--enable-release"
-  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
-    # Spidermonkey seems to use different host/build terminology for cross
-    # compilation here.
-    "--host=${stdenv.buildPlatform.config}"
-    "--target=${stdenv.hostPlatform.config}"
-  ];
-
-  # mkDerivation by default appends --build/--host to configureFlags when cross compiling
-  # These defaults are bogus for Spidermonkey - avoid passing them by providing an empty list
-  configurePlatforms = [ ];
-
-  depsBuildBuild = [ buildPackages.stdenv.cc ];
-
-  # cc-rs insists on using -mabi=lp64 (soft-float) for riscv64,
-  # while we have a double-float toolchain
-  NIX_CFLAGS_COMPILE = lib.optionalString (with stdenv.hostPlatform; isRiscV && is64bit) "-mabi=lp64d";
-
-  # Remove unnecessary static lib
-  preFixup = ''
-    moveToOutput bin/js78-config "$dev"
-    rm $out/lib/libjs_static.ajs
-    ln -s $out/bin/js78 $out/bin/js
-  '';
-
-  enableParallelBuilding = true;
-
-  postPatch = ''
-    # This patch is a manually applied fix of
-    #   https://bugzilla.mozilla.org/show_bug.cgi?id=1644600
-    # Once that bug is fixed, this can be removed.
-    # This is needed in, for example, `zeroad`.
-    substituteInPlace js/public/StructuredClone.h \
-         --replace "class SharedArrayRawBufferRefs {" \
-                   "class JS_PUBLIC_API SharedArrayRawBufferRefs {"
-  '';
-
-  meta = with lib; {
-    description = "Mozilla's JavaScript engine written in C/C++";
-    homepage = "https://spidermonkey.dev/";
-    license = licenses.gpl2; # TODO: MPL/GPL/LGPL tri-license.
-    maintainers = with maintainers; [ abbradar lostnet ];
-    platforms = platforms.linux;
-  };
+  hash = "sha512-rD3nNbJGzk8OFhnNJmQyH/o3QkDOaEPnhdeaNQ3DDJZ5lrvMXjswHLPYIsqYHL6hFnWPxBIvFzjXXd/RFltjeA===";
 }
diff --git a/pkgs/development/interpreters/spidermonkey/common.nix b/pkgs/development/interpreters/spidermonkey/common.nix
index 4b04a960818a7..ecb1b71f93fd1 100644
--- a/pkgs/development/interpreters/spidermonkey/common.nix
+++ b/pkgs/development/interpreters/spidermonkey/common.nix
@@ -3,6 +3,7 @@
 { lib
 , stdenv
 , fetchurl
+, fetchpatch
 
 # build time
 , buildPackages
@@ -11,13 +12,17 @@
 , perl
 , pkg-config
 , python3
+, python39
 , rust-cbindgen
 , rustc
 , which
 , zip
+, autoconf213
+, yasm
 
 # runtime
 , icu
+, icu67
 , nspr
 , readline
 , zlib
@@ -34,21 +39,43 @@ stdenv.mkDerivation rec {
     inherit hash;
   };
 
+  patches = lib.optional (lib.versionOlder version "91") [
+    # Fix build failure on armv7l using Debian patch
+    # Upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1526653
+    (fetchpatch {
+      url = "https://salsa.debian.org/mozilla-team/firefox/commit/fd6847c9416f9eebde636e21d794d25d1be8791d.patch";
+      hash = "sha512-K8U3Qyo7g4si2r/8kJdXyRoTrDHAY48x/YJ7YL+YBwlpfNQcHxX+EZvhRzW8FHYW+f7kOnJu9QykhE8PhSQ9zQ==";
+    })
+
+    # Remove this when updating to 79 - The patches are already applied upstream
+    # https://bugzilla.mozilla.org/show_bug.cgi?id=1318905
+
+    # Combination of 3 changesets, modified to apply on 78:
+    # - https://hg.mozilla.org/mozilla-central/rev/06d7e1b6b7e7
+    # - https://hg.mozilla.org/mozilla-central/rev/ec48f15d085c
+    # - https://hg.mozilla.org/mozilla-central/rev/6803dda74d33
+    ./add-riscv64-support.patch
+  ];
+
   nativeBuildInputs = [
     cargo
     m4
     perl
     pkg-config
-    python3
+    # 78 requires python up to 3.9
+    (if lib.versionOlder version "91" then python39 else python3)
     rust-cbindgen
     rustc
     rustc.llvmPackages.llvm # for llvm-objdump
     which
     zip
+  ] ++ lib.optionals (lib.versionOlder version "91") [
+    autoconf213
+    yasm # to buid icu? seems weird
   ];
 
   buildInputs = [
-    icu
+    (if lib.versionOlder version "91" then icu67 else icu)
     nspr
     readline
     zlib
@@ -65,11 +92,16 @@ stdenv.mkDerivation rec {
     "--with-system-icu"
     "--with-system-nspr"
     "--with-system-zlib"
+    # Fedora and Arch disable optimize, but it doesn't seme to be necessary
+    # It turns on -O3 which some gcc version had a problem with:
+    # https://src.fedoraproject.org/rpms/mozjs38/c/761399aba092bcb1299bb4fccfd60f370ab4216e
     "--enable-optimize"
     "--enable-readline"
     "--enable-release"
     "--enable-shared-js"
+  ] ++ lib.optionals (lib.versionAtLeast version "91") [
     "--disable-debug"
+  ] ++ [
     "--disable-jemalloc"
     "--disable-strip"
     "--disable-tests"
@@ -86,6 +118,10 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  # cc-rs insists on using -mabi=lp64 (soft-float) for riscv64,
+  # while we have a double-float toolchain
+  NIX_CFLAGS_COMPILE = lib.optionalString (with stdenv.hostPlatform; isRiscV && is64bit && lib.versionOlder version "91") "-mabi=lp64d";
+
   postPatch = ''
     # This patch is a manually applied fix of
     #   https://bugzilla.mozilla.org/show_bug.cgi?id=1644600
@@ -96,9 +132,12 @@ stdenv.mkDerivation rec {
                    "class JS_PUBLIC_API SharedArrayRawBufferRefs {"
   '';
 
-  preConfigure = ''
+  preConfigure = lib.optionalString (lib.versionOlder version "91") ''
+    export CXXFLAGS="-fpermissive"
+  '' + ''
     export LIBXUL_DIST=$out
     export PYTHON="${buildPackages.python3.interpreter}"
+  '' + lib.optionalString (lib.versionAtLeast version "91") ''
     export M4=m4
     export AWK=awk
     export AC_MACRODIR=$PWD/build/autoconf/
@@ -107,6 +146,7 @@ stdenv.mkDerivation rec {
     sh ../../build/autoconf/autoconf.sh --localdir=$PWD configure.in > configure
     chmod +x configure
     popd
+  '' + ''
     # We can't build in js/src/, so create a build dir
     mkdir obj
     cd obj/
@@ -123,8 +163,8 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Mozilla's JavaScript engine written in C/C++";
     homepage = "https://spidermonkey.dev/";
-    license = licenses.mpl20;
-    maintainers = with maintainers; [ lostnet ];
+    license = licenses.mpl20; # TODO: MPL/GPL/LGPL tri-license for 78.
+    maintainers = with maintainers; [ abbradar lostnet ];
     platforms = platforms.linux;
   };
 }