summary refs log tree commit diff
path: root/pkgs/development/compilers/crystal/default.nix
diff options
context:
space:
mode:
authorEvangelos Paterakis <evan@geopjr.dev>2022-10-22 23:37:53 +0300
committerEvangelos Paterakis <evan@geopjr.dev>2022-10-22 23:37:53 +0300
commit9b6172aa2deb23c280e250fbf50781bc51aa5132 (patch)
tree9b465e227e0161143f9aa5898fb6ae566231ca20 /pkgs/development/compilers/crystal/default.nix
parente0d0d1c0938f97f082f47d2af95990ef9b1fa900 (diff)
downloadnixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar.gz
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar.bz2
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar.lz
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar.xz
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.tar.zst
nixpkgs-9b6172aa2deb23c280e250fbf50781bc51aa5132.zip
fix: re-enable 1.0.x - 1.2.x
feat: bump 1.6.x to 1.6.1
fix: fetch 12601 patch for 1.3.x-1.6.0
fix: darwin url for versions < 1.2.0
Diffstat (limited to 'pkgs/development/compilers/crystal/default.nix')
-rw-r--r--pkgs/development/compilers/crystal/default.nix96
1 files changed, 72 insertions, 24 deletions
diff --git a/pkgs/development/compilers/crystal/default.nix b/pkgs/development/compilers/crystal/default.nix
index 372615dfec6..d761431326f 100644
--- a/pkgs/development/compilers/crystal/default.nix
+++ b/pkgs/development/compilers/crystal/default.nix
@@ -2,6 +2,7 @@
 , callPackage
 , fetchFromGitHub
 , fetchurl
+, fetchpatch
 , lib
   # Dependencies
 , boehmgc
@@ -9,6 +10,7 @@
 , git
 , gmp
 , hostname
+, libatomic_ops
 , libevent
 , libiconv
 , libxml2
@@ -30,21 +32,23 @@
 let
   archs = {
     x86_64-linux = "linux-x86_64";
-    #i686-linux = "linux-i686";
-    #x86_64-darwin = "darwin-x86_64";
+    i686-linux = "linux-i686";
     x86_64-darwin = "darwin-universal";
     aarch64-darwin = "darwin-universal";
-    #aarch64-linux = "linux-aarch64";
+    aarch64-linux = "linux-aarch64";
   };
 
   arch = archs.${stdenv.system} or (throw "system ${stdenv.system} not supported");
+  isAarch64Darwin = stdenv.system == "aarch64-darwin";
 
   checkInputs = [ git gmp openssl readline libxml2 libyaml libffi ];
 
   binaryUrl = version: rel:
-    # if arch == archs.aarch64-linux then
-    #   "https://dev.alpinelinux.org/archive/crystal/crystal-${version}-aarch64-alpine-linux-musl.tar.gz"
-    # else
+    if arch == archs.aarch64-linux then
+      "https://dev.alpinelinux.org/archive/crystal/crystal-${version}-aarch64-alpine-linux-musl.tar.gz"
+    else if arch == archs.x86_64-darwin && lib.versionOlder version "1.2.0" then
+      "https://github.com/crystal-lang/crystal/releases/download/${version}/crystal-${version}-${toString rel}-darwin-x86_64.tar.gz"
+    else
       "https://github.com/crystal-lang/crystal/releases/download/${version}/crystal-${version}-${toString rel}-${arch}.tar.gz";
 
   genericBinary = { version, sha256s, rel ? 1 }:
@@ -62,6 +66,8 @@ let
         tar --strip-components=1 -C $out -xf ${src}
         patchShebangs $out/bin/crystal
       '';
+
+      meta.broken = lib.versionOlder version "1.2.0" && isAarch64Darwin;
     };
 
   commonBuildInputs = extraBuildInputs: [
@@ -94,6 +100,25 @@ let
         inherit sha256;
       };
 
+      patches = [ ]
+        ++ lib.optionals (lib.versionOlder version "1.2.0") [
+        # add support for DWARF5 debuginfo, fixes builds on recent compilers
+        # the PR is 8 commits from 2019, so just fetch the whole thing
+        # and hope it doesn't change
+        (fetchpatch {
+          url = "https://github.com/crystal-lang/crystal/pull/11399.patch";
+          sha256 = "sha256-CjNpkQQ2UREADmlyLUt7zbhjXf0rTjFhNbFYLwJKkc8=";
+        })
+      ] ++ lib.optionals (lib.versionAtLeast version "1.3.0" && lib.versionOlder version "1.6.1") [
+        # fixes an issue that prevented tests from passing when ran with
+        # the --release flag
+        # the PR has been merged since version 1.6.1
+        (fetchpatch {
+          url = "https://github.com/crystal-lang/crystal/pull/12601.patch";
+          sha256 = "sha256-3NiUC4EyP/jSn62sv38eieKcVw9zUfRB78aAvnxV57E=";
+        })
+      ];
+
       outputs = [ "out" "lib" "bin" ];
 
       postPatch = ''
@@ -148,6 +173,7 @@ let
 
       makeFlags = [
         "CRYSTAL_CONFIG_VERSION=${version}"
+        "release=1"
         "progress=1"
       ];
 
@@ -216,29 +242,30 @@ let
         homepage = "https://crystal-lang.org/";
         license = licenses.asl20;
         maintainers = with maintainers; [ david50407 manveru peterhoeg ];
-        platforms = let archNames = builtins.attrNames archs; in archNames;
+        platforms = let archNames = builtins.attrNames archs; in
+          if (lib.versionOlder version "1.2.0") then remove "aarch64-darwin" archNames else archNames;
       };
     })
   );
 
 in
 rec {
-  #binaryCrystal_1_0 = genericBinary {
-  #  version = "1.0.0";
-  #  sha256s = {
-  #    x86_64-linux = "1949argajiyqyq09824yj3wjyv88gd8wbf20xh895saqfykiq880";
-  #    i686-linux = "0w0f4fwr2ijhx59i7ppicbh05hfmq7vffmgl7lal6im945m29vch";
-  #    x86_64-darwin = "01n0rf8zh551vv8wq3h0ifnsai0fz9a77yq87xx81y9dscl9h099";
-  #    aarch64-linux = "0sns7l4q3z82qi3dc2r4p63f4s8hvifqzgq56ykwyrvawynjhd53";
-  #  };
-  #};
-
-  #binaryCrystal_1_2 = genericBinary {
-  #  version = "1.2.0";
-  #  sha256s = {
-  #    aarch64-darwin = "1hrs8cpjxdkcf8mr9qgzilwbg6bakq87sd4yydfsk2f4pqd6g7nf";
-  #  };
-  #};
+  binaryCrystal_1_0 = genericBinary {
+    version = "1.0.0";
+    sha256s = {
+      x86_64-linux = "1949argajiyqyq09824yj3wjyv88gd8wbf20xh895saqfykiq880";
+      i686-linux = "0w0f4fwr2ijhx59i7ppicbh05hfmq7vffmgl7lal6im945m29vch";
+      x86_64-darwin = "01n0rf8zh551vv8wq3h0ifnsai0fz9a77yq87xx81y9dscl9h099";
+      aarch64-linux = "0sns7l4q3z82qi3dc2r4p63f4s8hvifqzgq56ykwyrvawynjhd53";
+    };
+  };
+
+  binaryCrystal_1_2 = genericBinary {
+    version = "1.2.0";
+    sha256s = {
+      aarch64-darwin = "1hrs8cpjxdkcf8mr9qgzilwbg6bakq87sd4yydfsk2f4pqd6g7nf";
+    };
+  };
 
   binaryCrystal_1_5 = genericBinary {
     version = "1.5.0";
@@ -251,6 +278,27 @@ rec {
     };
   };
 
+  crystal_1_0 = generic {
+    version = "1.0.0";
+    sha256 = "sha256-RI+a3w6Rr+uc5jRf7xw0tOenR+q6qii/ewWfID6dbQ8=";
+    binary = binaryCrystal_1_0;
+    extraBuildInputs = [ libatomic_ops ];
+  };
+
+  crystal_1_1 = generic {
+    version = "1.1.1";
+    sha256 = "sha256-hhhT3reia8acZiPsflwfuD638Ll2JiXwMfES1TyGyNQ=";
+    binary = crystal_1_0;
+    extraBuildInputs = [ libatomic_ops ];
+  };
+
+  crystal_1_2 = generic {
+    version = "1.2.2";
+    sha256 = "sha256-nyOXhsutVBRdtJlJHe2dALl//BUXD1JeeQPgHU4SwiU=";
+    binary = if isAarch64Darwin then binaryCrystal_1_2 else crystal_1_1;
+    extraBuildInputs = [ libatomic_ops ];
+  };
+
   crystal_1_5 = generic {
     version = "1.5.0";
     sha256 = "sha256-twDWnJBLc5tvkg3HvbxXJsCPTMJr9vGvvHvfukMXGyA=";
@@ -258,7 +306,7 @@ rec {
   };
 
   crystal_1_6 = generic {
-    version = "1.6.0";
+    version = "1.6.1";
     sha256 = "sha256-B6Pq2J1r+PbYT1C+2u9rNzRR5zOnbmN1/RG7mVpVHQk=";
     binary = binaryCrystal_1_5;
   };