Unverified Commit 73805d08 authored by Michael Daniels's avatar Michael Daniels Committed by GitHub
Browse files

mathematica: allow user to provide version info (#376435)

parents 4c65d1a0 d3cb3bd0
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -3,8 +3,6 @@
  autoPatchelfHook,
  lib,
  makeWrapper,
  requireFile,
  runCommand,
  stdenv,
  symlinkJoin,
  # arguments from default.nix
@@ -91,9 +89,13 @@ stdenv.mkDerivation {
    meta
    pname
    src
    version
    ;

  version =
    version # a comment to trick nixfmt
    + lib.optionalString cudaSupport "-cuda"
    + lib.optionalString (lang != "en") "-${lang}";

  nativeBuildInputs = [
    autoPatchelfHook
    makeWrapper
+60 −21
Original line number Diff line number Diff line
{
  callPackage,
  requireFile,
  config,
  lib,
  cudaPackages,
  cudaSupport ? config.cudaSupport,
  /*
    If you want an older version or a version with web documentation or different language,
    you can override any of the following attributes:
    ```nix
    my_mathematica = mathematica.override {
      version = "X.Y.Z";
      lang = "??";
      webdoc = true;
    };
    ```
    This, however, requires that the version you are requesting is known to nixpkgs
    and is added as an entry in `./versions.nix`.
    If it is not, you can manually specify all the necessary information:
    ```nix
    my_mathematica = mathematica.override {
      versionInfo = {
        version = "X.Y.Z";
        lang = "en";
        language = "English";
        # Get this hash via a command similar to this:
        # nix-hash --type sha256 --sri \
        # $(nix store add-path Wolfram_XX.X.X_BNDL_LINUX.sh --name 'Wolfram_XX.X.X_BNDL_LINUX.sh')
        hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
        installer = "Installer_File_Name.sh";
      };
    };
    ```
    `versionInfo` will take precedence over `version`, `lang`, & `webdoc`.
  */
  lang ? "en",
  webdoc ? false,
  version ? null,
  versionInfo ? null,
  /*
    If you wish to completely override the src, use:
    By default, this nix expression will try to find the installer in the Nix Store
    based on the filename and hash (either found in ./versions.nix or provided by user in `versionInfo`).
    But you can completely override the `src`:
    ```nix
    my_mathematica = mathematica.override {
      source = pkgs.requireFile {
        name = "Mathematica_XX.X.X_BNDL_LINUX.sh";
        # Get this hash via a command similar to this:
        # nix-store --query --hash \
        # $(nix store add-path Mathematica_XX.X.X_BNDL_LINUX.sh --name 'Mathematica_XX.X.X_BNDL_LINUX.sh')
        sha256 = "0000000000000000000000000000000000000000000000000000";
        message = ''
          Your override for Mathematica includes a different src for the installer,
          and it is missing.
        '';
        hashMode = "recursive";
      source = pkgs.fetchurl {
        url = "https://example.com/Wolfram_XX.X.X_BNDL_LINUX.sh";
        hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
      };
    }
    };
    ```
  */
  source ? null,
}:

let
  versions = callPackage ./versions.nix { };
  versions = import ./versions.nix;

  matching-versions = lib.sort (v1: v2: lib.versionOlder v2.version v1.version) (
    lib.filter (
@@ -56,19 +83,31 @@ let
    in
    lib.compareLists lib.compare (sublist as) (sublist bs) == 0;

  matchesDoc = v: (builtins.match ".*[0-9]_LIN(UX)?.sh" v.src.name != null) == webdoc;
  matchesDoc = v: (builtins.match ".*[0-9]_LIN(UX)?.sh" v.installer != null) == webdoc;

  selected = lib.defaultTo found-version versionInfo;

  defaultSource = requireFile {
    name = selected.installer;
    message = ''
      This nix expression requires that ${selected.installer} is
      already part of the store. Find the file on your Mathematica CD
      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
    '';
    inherit (selected) hash;
  };

in

callPackage ./generic.nix {
  inherit cudaSupport cudaPackages;
  inherit (found-version) lang;
  src = if source == null then found-version.src else source;

  pname = "mathematica";
  version =
    found-version.version
    + lib.optionalString cudaSupport "-cuda"
    + lib.optionalString (lang != "en") "-${lang}";

  inherit (selected) version lang;

  src = lib.defaultTo defaultSource source;

  meta = {
    description = "Wolfram Mathematica computational software system";
    homepage = "https://www.wolfram.com/mathematica/";
+198 −226
Original line number Diff line number Diff line
{ lib, requireFile }:

/*
  To calculate the hash of an installer, use a command like this:

    nix --extra-experimental-features nix-command hash file <installer-file>
*/

let
  versions = [
[
  {
    version = "14.3.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-F4Rl4xz3vso+N//Uz7ZXvh5CrM6nsKMQxrRR11o/aNA=";
    hash = "sha256-F4Rl4xz3vso+N//Uz7ZXvh5CrM6nsKMQxrRR11o/aNA=";
    installer = "Wolfram_14.3.0_LIN.sh";
  }
  {
    version = "14.3.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-FvcXXijGOcuRA1UFyVvPIyR1YaK/qrkMpLxf+mz+A/c=";
    hash = "sha256-FvcXXijGOcuRA1UFyVvPIyR1YaK/qrkMpLxf+mz+A/c=";
    installer = "Wolfram_14.3.0_LIN_Bndl.sh";
  }
  {
    version = "14.2.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-WNLuq9RviYF3Mj8uOALhmvcxGGHVq/TAGFMTGWoYBcc=";
    hash = "sha256-WNLuq9RviYF3Mj8uOALhmvcxGGHVq/TAGFMTGWoYBcc=";
    installer = "Wolfram_14.2.1_LIN.sh";
  }
  {
    version = "14.2.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-DcZbetr5wO3i/DkchgpsW3RGHfa1PslA4fK+bRQ68Bg=";
    hash = "sha256-DcZbetr5wO3i/DkchgpsW3RGHfa1PslA4fK+bRQ68Bg=";
    installer = "Wolfram_14.2.1_LIN_Bndl.sh";
  }
  {
    version = "14.2.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-wIuyWufKuchPl7phCxVM9vIIkjUHfRxIECfDyGJliqs=";
    hash = "sha256-wIuyWufKuchPl7phCxVM9vIIkjUHfRxIECfDyGJliqs=";
    installer = "Wolfram_14.2.0_LIN.sh";
  }
  {
    version = "14.2.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-wY6acGoUc7y22enSi7RrcRFLvvPGaeYTta4yWExlXho=";
    hash = "sha256-wY6acGoUc7y22enSi7RrcRFLvvPGaeYTta4yWExlXho=";
    installer = "Wolfram_14.2.0_LIN_Bndl.sh";
  }
  {
    version = "14.1.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-PCpjwqA6NC+iwvYxddYBlmF5+vl76r+MoIYAL91WFns=";
    hash = "sha256-PCpjwqA6NC+iwvYxddYBlmF5+vl76r+MoIYAL91WFns=";
    installer = "Wolfram_14.1.0_LIN.sh";
  }
  {
    version = "14.1.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-pnu60Pv3xo3+MAkDLiU3yTPVbbQ00diV45vSVL8B310=";
    hash = "sha256-pnu60Pv3xo3+MAkDLiU3yTPVbbQ00diV45vSVL8B310=";
    installer = "Wolfram_14.1.0_LIN_Bndl.sh";
  }
  {
    version = "14.0.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-NzMhGQZq6o6V4UdtJxUH/yyP2s7wjTR86SRA7lW7JfI=";
    hash = "sha256-NzMhGQZq6o6V4UdtJxUH/yyP2s7wjTR86SRA7lW7JfI=";
    installer = "Mathematica_14.0.0_LINUX.sh";
  }
  {
    version = "14.0.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-UrcBEg6G6nbVX++X0z0oG5JjieXL0AquAqtjzY5EBn4=";
    hash = "sha256-UrcBEg6G6nbVX++X0z0oG5JjieXL0AquAqtjzY5EBn4=";
    installer = "Mathematica_14.0.0_BNDL_LINUX.sh";
  }
  {
    version = "13.3.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-0+mYVGiF4Qn3eiLIoINSHVIqT8GtlBPFRYIOF+nHyQo=";
    hash = "sha256-0+mYVGiF4Qn3eiLIoINSHVIqT8GtlBPFRYIOF+nHyQo=";
    installer = "Mathematica_13.3.1_LINUX.sh";
  }
  {
    version = "13.3.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-03R4s05fmTcZnlZIMSI6xlLER58MIoccoCr27F8BXOk=";
    hash = "sha256-03R4s05fmTcZnlZIMSI6xlLER58MIoccoCr27F8BXOk=";
    installer = "Mathematica_13.3.1_BNDL_LINUX.sh";
  }
  {
    version = "13.3.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-24MC0O+kBUe3TrwXUb+7QZt8tQHvWVIT8F9B6Ih+4k8=";
    hash = "sha256-24MC0O+kBUe3TrwXUb+7QZt8tQHvWVIT8F9B6Ih+4k8=";
    installer = "Mathematica_13.3.0_LINUX.sh";
  }
  {
    version = "13.3.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-91bw7+4ht+7g+eF32BNYf77yEQWyuPffisj4kB63pcI=";
    hash = "sha256-91bw7+4ht+7g+eF32BNYf77yEQWyuPffisj4kB63pcI=";
    installer = "Mathematica_13.3.0_BNDL_LINUX.sh";
  }
  {
    version = "13.2.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-GA2k+jvE4mTJsIbMHce5c516h/glHLnXdthEfnNmk0w=";
    hash = "sha256-GA2k+jvE4mTJsIbMHce5c516h/glHLnXdthEfnNmk0w=";
    installer = "Mathematica_13.2.1_LINUX.sh";
  }
  {
    version = "13.2.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-ZvgG2W/gjQIo4hyXHsGta5FyTslrz/ltOe/ZK/U2Sx8=";
    hash = "sha256-ZvgG2W/gjQIo4hyXHsGta5FyTslrz/ltOe/ZK/U2Sx8=";
    installer = "Mathematica_13.2.1_BNDL_LINUX.sh";
  }
  {
    version = "13.2.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-T9XOXA6jpgN6bcO/do9sw1L73ABtyxuZCLzftv4Cl6o=";
    hash = "sha256-T9XOXA6jpgN6bcO/do9sw1L73ABtyxuZCLzftv4Cl6o=";
    installer = "Mathematica_13.2.0_LINUX.sh";
  }
  {
    version = "13.2.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-YRUvl2H9SwpwDZx04ugd7ZnK5G+t88bzAObXsGGVhk0=";
    hash = "sha256-YRUvl2H9SwpwDZx04ugd7ZnK5G+t88bzAObXsGGVhk0=";
    installer = "Mathematica_13.2.0_BNDL_LINUX.sh";
  }
  {
    version = "13.1.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-GZyUYslx/M4aFI3Pj9Osw3/w79/Jp/4T3mRE277pNuM=";
    hash = "sha256-GZyUYslx/M4aFI3Pj9Osw3/w79/Jp/4T3mRE277pNuM=";
    installer = "Mathematica_13.1.0_LINUX.sh";
  }
  {
    version = "13.1.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-LIpGAJ3uTkZgjc0YykwusyyHQKlCnTvrZGStFfSOz60=";
    hash = "sha256-LIpGAJ3uTkZgjc0YykwusyyHQKlCnTvrZGStFfSOz60=";
    installer = "Mathematica_13.1.0_BNDL_LINUX.sh";
  }
  {
    version = "13.0.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-NnKpIMG0rxr9SAcz9tZ2Zbr4JYdX3+WabtbXRAzybbo=";
    hash = "sha256-NnKpIMG0rxr9SAcz9tZ2Zbr4JYdX3+WabtbXRAzybbo=";
    installer = "Mathematica_13.0.1_BNDL_LINUX.sh";
  }
  {
    version = "13.0.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-FbutOaWZUDEyXR0Xj2OwDnFwbT7JAB66bRaB+8mR0+E=";
    hash = "sha256-FbutOaWZUDEyXR0Xj2OwDnFwbT7JAB66bRaB+8mR0+E=";
    installer = "Mathematica_13.0.0_BNDL_LINUX.sh";
  }
  {
    version = "12.3.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-UbnKsS/ZGwCep61JaKLIpZ6U3FXS5swdcSrNW6LE1Qk=";
    hash = "sha256-UbnKsS/ZGwCep61JaKLIpZ6U3FXS5swdcSrNW6LE1Qk=";
    installer = "Mathematica_12.3.1_LINUX.sh";
  }
  {
    version = "12.3.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-BF3wRfbnlt7Vn2TrLg8ZSayI3LodW24F+1PqCkrtchU=";
    hash = "sha256-BF3wRfbnlt7Vn2TrLg8ZSayI3LodW24F+1PqCkrtchU=";
    installer = "Mathematica_12.3.0_LINUX.sh";
  }
  {
    version = "12.2.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-O2Z2ogPGrbfpxBilSEsDeXQoe1vgnGTn3+p03cDkANc=";
    hash = "sha256-O2Z2ogPGrbfpxBilSEsDeXQoe1vgnGTn3+p03cDkANc=";
    installer = "Mathematica_12.2.0_LINUX.sh";
  }
  {
    version = "12.1.1";
    lang = "en";
    language = "English";
      sha256 = "sha256-rUe4hr5KmGTXD1I/eSYVoFHU68mH2aD2VLZFtOtDswo=";
    hash = "sha256-rUe4hr5KmGTXD1I/eSYVoFHU68mH2aD2VLZFtOtDswo=";
    installer = "Mathematica_12.1.1_LINUX.sh";
  }
  {
    version = "12.1.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-56P1KKOTJkQj+K9wppAsnYpej/YB3VUNL7DPLYGgqZY=";
    hash = "sha256-56P1KKOTJkQj+K9wppAsnYpej/YB3VUNL7DPLYGgqZY=";
    installer = "Mathematica_12.1.0_LINUX.sh";
  }
  {
    version = "12.0.0";
    lang = "en";
    language = "English";
      sha256 = "sha256-uftx4a/MHXLCABlv+kNFEtII+ikg4geHhDP1BOWK6dc=";
    hash = "sha256-uftx4a/MHXLCABlv+kNFEtII+ikg4geHhDP1BOWK6dc=";
    installer = "Mathematica_12.0.0_LINUX.sh";
  }
  ];

in

lib.flip map versions (
  {
    version,
    lang,
    language,
    sha256,
    installer,
  }:
  {
    inherit version lang;
    src = requireFile {
      name = installer;
      message = ''
        This nix expression requires that ${installer} is
        already part of the store. Find the file on your Mathematica CD
        and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
      '';
      inherit sha256;
    };
  }
)
]