summary refs log tree commit diff
path: root/pkgs/development/compilers/crystal
diff options
context:
space:
mode:
authorDavid Kuo <s50407s@gmail.com>2017-10-01 02:44:39 +0800
committerOrivej Desh <orivej@gmx.fr>2017-10-04 07:37:35 +0000
commitbc2ac2ae5e90d2ff208bc9275090b6463af99384 (patch)
treec90d26fc9d907bfa5c228208112d29605acd8208 /pkgs/development/compilers/crystal
parentd514aa5c6a23f0709ba82a0b047bb66d0cfcf578 (diff)
downloadnixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar.gz
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar.bz2
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar.lz
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar.xz
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.tar.zst
nixpkgs-bc2ac2ae5e90d2ff208bc9275090b6463af99384.zip
crystal: 0.23.0 -> 0.23.1
Due to https://github.com/crystal-lang/crystal/issues/4719,
when building Crystal with LLVM 4 with debug infos from prebuilt binary (w/ LLVM 3.8) will always be failed.
The temporary solution is to build a LLVM 4 version without debug info,
then use it to build Crystal with debug info on LLVM 4.

This will cause building phrase going longer then normal.
We can remove this hack after Crystal fix the issue.
Diffstat (limited to 'pkgs/development/compilers/crystal')
-rw-r--r--pkgs/development/compilers/crystal/default.nix53
1 files changed, 34 insertions, 19 deletions
diff --git a/pkgs/development/compilers/crystal/default.nix b/pkgs/development/compilers/crystal/default.nix
index ae94a76ab23..6b91fafd08d 100644
--- a/pkgs/development/compilers/crystal/default.nix
+++ b/pkgs/development/compilers/crystal/default.nix
@@ -1,8 +1,9 @@
 { stdenv, fetchurl, boehmgc, libatomic_ops, pcre, libevent, libiconv, llvm_4, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  version = "0.23.0";
-  name = "crystal-${version}-1";
+  version = "0.23.1";
+  patch = "3";
+  name = "crystal-${version}-${patch}";
   arch =
     {
       "x86_64-linux" = "linux-x86_64";
@@ -11,18 +12,18 @@ stdenv.mkDerivation rec {
     }."${stdenv.system}" or (throw "system ${stdenv.system} not supported");
 
   prebuiltBinary = fetchurl {
-    url = "https://github.com/crystal-lang/crystal/releases/download/${version}/crystal-${version}-1-${arch}.tar.gz";
+    url = "https://github.com/crystal-lang/crystal/releases/download/${version}/crystal-${version}-${patch}-${arch}.tar.gz";
     sha256 =
       {
-        "x86_64-linux" = "0nhs7swbll8hrk15kmmywngkhij80x62axiskb1gjmiwvzhlh0qx";
-        "i686-linux" = "03xp8d3lqflzzm26lpdn4yavj87qzgd6xyrqxp2pn9ybwrq8fx8a";
-        "x86_64-darwin" = "1prz6c1gs8z7dgpdy2id2mjn1c8f5p2bf9b39985bav448njbyjz";
+        "x86_64-linux" = "6a84cc866838ffa5250e28c3ce1a918a93f89c06393fe8cfd4068fcbbc66f3ab";
+        "i686-linux" = "268a39b8d37385ff60d113d4d9fc966472160faa1e3bbf7ae58860ab6678aceb";
+        "x86_64-darwin" = "d3f964ebfc5cd48fad73ab2484ea2a00268812276293dd0f7e9c7d184c8aad8a";
       }."${stdenv.system}" or (throw "system ${stdenv.system} not supported");
   };
 
   src = fetchurl {
     url = "https://github.com/crystal-lang/crystal/archive/${version}.tar.gz";
-    sha256 = "05ymwmjkl1b4m888p725kybpiap5ag2vj8l07d59j02inm5r0rcv";
+    sha256 = "8cf1b9a4eab29fca2f779ea186ae18f7ce444ce189c621925fa1a0c61dd5ff55";
   };
 
   # crystal on Darwin needs libiconv to build
@@ -46,27 +47,43 @@ stdenv.mkDerivation rec {
   sourceRoot = ".";
 
   fixPrebuiltBinary = if stdenv.isDarwin then ''
-    wrapProgram $(pwd)/crystal-${version}-1/embedded/bin/crystal \
+    wrapProgram $(pwd)/crystal-${version}-${patch}/embedded/bin/crystal \
         --suffix DYLD_LIBRARY_PATH : $libPath
   ''
   else ''
     patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
-      crystal-${version}-1/embedded/bin/crystal
+      crystal-${version}-${patch}/embedded/bin/crystal
     patchelf --set-rpath ${ stdenv.lib.makeLibraryPath [ stdenv.cc.cc ] } \
-      crystal-${version}-1/embedded/bin/crystal
+      crystal-${version}-${patch}/embedded/bin/crystal
   '';
 
+  newline = "\n";
+
   buildPhase = ''
     # patch the script which launches the prebuilt compiler
-    substituteInPlace $(pwd)/crystal-${version}-1/bin/crystal --replace \
-      "/usr/bin/env bash" "${stdenv.shell}"
-    substituteInPlace $(pwd)/crystal-${version}/bin/crystal --replace \
-      "/usr/bin/env bash" "${stdenv.shell}"
-
+    patchShebangs $(pwd)/crystal-${version}-${patch}/bin/crystal
+    patchShebangs $(pwd)/crystal-${version}/bin/crystal
+    # Due to https://github.com/crystal-lang/crystal/issues/4719,
+    # when building Crystal with LLVM 4 with debug infos from prebuilt binary (w/ LLVM 3.8) will always be failed.
+    # So we are going to build a LLVM 4 version without debug info,
+    # and use it to build Crystal with debug info on LLVM 4.
+    substituteInPlace $(pwd)/crystal-${version}/Makefile --replace \
+      "release ?=" "no_debug ?= ##${newline}force_rebuild ?= ##${newline}release ?="
+    substituteInPlace $(pwd)/crystal-${version}/Makefile --replace \
+      "FLAGS := " "FLAGS := \$(if \$(no_debug),--no-debug )"
+    substituteInPlace $(pwd)/crystal-${version}/Makefile --replace \
+      "$(O)/crystal:" "\$(O)/crystal: \$(if \$(force_rebuild),../rebuild.tmp)"
     ${fixPrebuiltBinary}
 
     cd crystal-${version}
-    make release=1 PATH="../crystal-${version}-1/bin:$PATH"
+    # Build without debug infos on LLVM 4
+    make release=1 no_debug=1 PATH="../crystal-${version}-${patch}/bin:$PATH"
+    
+    # Rebuild Crystal with debug infos from the binary we just built
+    touch $(pwd)/../rebuild.tmp
+    wrapProgram .build/crystal \
+        --suffix LIBRARY_PATH : $libPath
+    make release=1 force_rebuild=1
     make doc
   '';
 
@@ -75,7 +92,6 @@ stdenv.mkDerivation rec {
     wrapProgram $out/bin/crystal \
         --suffix CRYSTAL_PATH : $out/lib/crystal \
         --suffix LIBRARY_PATH : $libPath
-
     install -dm755 $out/lib/crystal
     cp -r src/* $out/lib/crystal/
 
@@ -97,8 +113,7 @@ stdenv.mkDerivation rec {
     description = "A compiled language with Ruby like syntax and type inference";
     homepage = https://crystal-lang.org/;
     license = stdenv.lib.licenses.asl20;
-    maintainers = with stdenv.lib.maintainers; [ sifmelcara ];
+    maintainers = with stdenv.lib.maintainers; [ sifmelcara david50407 ];
     platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ];
   };
 }
-