aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix294
1 files changed, 165 insertions, 129 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix b/infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix
index a04d48dd0e5a..fa8198fabad9 100644
--- a/infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix
+++ b/infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix
@@ -1,7 +1,29 @@
-{ stdenv, lib, fetchFromGitHub, fetchurl, makeWrapper
-, coreutils, git, gmp, hostname, openssl, readline, tzdata, libxml2, libyaml
-, boehmgc, libatomic_ops, pcre, libevent, libiconv, llvm, clang, which, zlib, pkgconfig
-, callPackage }:
+{ stdenv
+, callPackage
+, fetchFromGitHub
+, fetchurl
+, lib
+# Dependencies
+, boehmgc
+, coreutils
+, git
+, gmp
+, hostname
+, libatomic_ops
+, libevent
+, libiconv
+, libxml2
+, libyaml
+, llvmPackages
+, makeWrapper
+, openssl
+, pcre
+, pkgconfig
+, readline
+, tzdata
+, which
+, zlib
+}:
# We need multiple binaries as a given binary isn't always able to build
# (even slightly) older or newer versions.
@@ -43,144 +65,152 @@ let
] ++ extraBuildInputs
++ stdenv.lib.optionals stdenv.isDarwin [ libiconv ];
+ generic = (
+ { version
+ , sha256
+ , binary
+ , doCheck ? true
+ , extraBuildInputs ? []
+ , buildFlags ? ["all" "docs"]
+ }:
+ lib.fix (compiler: stdenv.mkDerivation {
+ pname = "crystal";
+ inherit buildFlags doCheck version;
+
+ src = fetchFromGitHub {
+ owner = "crystal-lang";
+ repo = "crystal";
+ rev = version;
+ inherit sha256;
+ };
+
+ outputs = [ "out" "lib" "bin" ];
- generic = ({ version, sha256, binary, doCheck ? true, extraBuildInputs ? [] }:
- lib.fix (compiler: stdenv.mkDerivation {
- pname = "crystal";
- inherit doCheck version;
+ postPatch = ''
+ # Add dependency of crystal to docs to avoid issue on flag changes between releases
+ # https://github.com/crystal-lang/crystal/pull/8792#issuecomment-614004782
+ substituteInPlace Makefile \
+ --replace 'docs: ## Generate standard library documentation' 'docs: crystal ## Generate standard library documentation'
- src = fetchFromGitHub {
- owner = "crystal-lang";
- repo = "crystal";
- rev = version;
- inherit sha256;
- };
-
- outputs = [ "out" "lib" "bin" ];
-
- postPatch = ''
- substituteInPlace src/crystal/system/unix/time.cr \
- --replace /usr/share/zoneinfo ${tzdata}/share/zoneinfo
-
- ln -sf spec/compiler spec/std
-
- # Dirty fix for when no sandboxing is enabled
- rm -rf /tmp/crystal
- mkdir -p /tmp/crystal
-
- substituteInPlace spec/std/file_spec.cr \
- --replace '/bin/ls' '${coreutils}/bin/ls' \
- --replace '/usr/share' '/tmp/crystal' \
- --replace '/usr' '/tmp'
-
- substituteInPlace spec/std/process_spec.cr \
- --replace '/bin/cat' '${coreutils}/bin/cat' \
- --replace '/bin/ls' '${coreutils}/bin/ls' \
- --replace '/usr/bin/env' '${coreutils}/bin/env' \
- --replace '"env"' '"${coreutils}/bin/env"' \
- --replace '"/usr"' '"/tmp"'
-
- substituteInPlace spec/std/socket/tcp_server_spec.cr \
- --replace '{% if flag?(:gnu) %}"listen: "{% else %}"bind: "{% end %}' '"bind: "'
-
- substituteInPlace spec/std/system_spec.cr \
- --replace '`hostname`' '`${hostname}/bin/hostname`'
-
- # See https://github.com/crystal-lang/crystal/pull/8640
- substituteInPlace spec/std/http/cookie_spec.cr \
- --replace '01 Jan 2020' '01 Jan #{Time.utc.year + 2}'
-
- # See https://github.com/crystal-lang/crystal/issues/8629
- substituteInPlace spec/std/socket/udp_socket_spec.cr \
- --replace 'it "joins and transmits to multicast groups"' 'pending "joins and transmits to multicast groups"'
-
- # See https://github.com/crystal-lang/crystal/pull/8699
- substituteInPlace spec/std/xml/xml_spec.cr \
- --replace 'it "handles errors"' 'pending "handles errors"'
- '';
-
- buildInputs = commonBuildInputs extraBuildInputs;
+ substituteInPlace src/crystal/system/unix/time.cr \
+ --replace /usr/share/zoneinfo ${tzdata}/share/zoneinfo
- nativeBuildInputs = [ binary makeWrapper which pkgconfig llvm ];
+ ln -sf spec/compiler spec/std
- makeFlags = [
- "CRYSTAL_CONFIG_VERSION=${version}"
- ];
+ # Dirty fix for when no sandboxing is enabled
+ rm -rf /tmp/crystal
+ mkdir -p /tmp/crystal
- buildFlags = [
- "all" "docs"
- ];
+ substituteInPlace spec/std/file_spec.cr \
+ --replace '/bin/ls' '${coreutils}/bin/ls' \
+ --replace '/usr/share' '/tmp/crystal' \
+ --replace '/usr' '/tmp'
- LLVM_CONFIG = "${llvm}/bin/llvm-config";
+ substituteInPlace spec/std/process_spec.cr \
+ --replace '/bin/cat' '${coreutils}/bin/cat' \
+ --replace '/bin/ls' '${coreutils}/bin/ls' \
+ --replace '/usr/bin/env' '${coreutils}/bin/env' \
+ --replace '"env"' '"${coreutils}/bin/env"' \
+ --replace '"/usr"' '"/tmp"'
+
+ substituteInPlace spec/std/socket/tcp_server_spec.cr \
+ --replace '{% if flag?(:gnu) %}"listen: "{% else %}"bind: "{% end %}' '"bind: "'
+
+ substituteInPlace spec/std/system_spec.cr \
+ --replace '`hostname`' '`${hostname}/bin/hostname`'
+
+ # See https://github.com/crystal-lang/crystal/pull/8640
+ substituteInPlace spec/std/http/cookie_spec.cr \
+ --replace '01 Jan 2020' '01 Jan #{Time.utc.year + 2}'
+
+ # See https://github.com/crystal-lang/crystal/issues/8629
+ substituteInPlace spec/std/socket/udp_socket_spec.cr \
+ --replace 'it "joins and transmits to multicast groups"' 'pending "joins and transmits to multicast groups"'
+
+ # See https://github.com/crystal-lang/crystal/pull/8699
+ substituteInPlace spec/std/xml/xml_spec.cr \
+ --replace 'it "handles errors"' 'pending "handles errors"'
+ '';
+
+ buildInputs = commonBuildInputs extraBuildInputs;
+
+ nativeBuildInputs = [ binary makeWrapper which pkgconfig llvmPackages.llvm ];
+
+ makeFlags = [
+ "CRYSTAL_CONFIG_VERSION=${version}"
+ ];
+
+ LLVM_CONFIG = "${llvmPackages.llvm}/bin/llvm-config";
+
+ FLAGS = [
+ "--release"
+ "--single-module" # needed for deterministic builds
+ ];
+
+ # This makes sure we don't keep depending on the previous version of
+ # crystal used to build this one.
+ CRYSTAL_LIBRARY_PATH = "${placeholder "lib"}/crystal";
+
+ # We *have* to add `which` to the PATH or crystal is unable to build
+ # stuff later if which is not available.
+ installPhase = ''
+ runHook preInstall
+
+ install -Dm755 .build/crystal $bin/bin/crystal
+ wrapProgram $bin/bin/crystal \
+ --suffix PATH : ${lib.makeBinPath [ pkgconfig llvmPackages.clang which ]} \
+ --suffix CRYSTAL_PATH : lib:$lib/crystal \
+ --suffix CRYSTAL_LIBRARY_PATH : ${
+ lib.makeLibraryPath (commonBuildInputs extraBuildInputs)
+ }
+ install -dm755 $lib/crystal
+ cp -r src/* $lib/crystal/
+
+ install -dm755 $out/share/doc/crystal/api
+ cp -r docs/* $out/share/doc/crystal/api/
+ cp -r samples $out/share/doc/crystal/
- FLAGS = [
- "--release"
- "--single-module" # needed for deterministic builds
- ];
+ install -Dm644 etc/completion.bash $out/share/bash-completion/completions/crystal
+ install -Dm644 etc/completion.zsh $out/share/zsh/site-functions/_crystal
- # This makes sure we don't keep depending on the previous version of
- # crystal used to build this one.
- CRYSTAL_LIBRARY_PATH = "${placeholder "lib"}/crystal";
+ install -Dm644 man/crystal.1 $out/share/man/man1/crystal.1
- # We *have* to add `which` to the PATH or crystal is unable to build stuff
- # later if which is not available.
- installPhase = ''
- runHook preInstall
+ install -Dm644 -t $out/share/licenses/crystal LICENSE README.md
- install -Dm755 .build/crystal $bin/bin/crystal
- wrapProgram $bin/bin/crystal \
- --suffix PATH : ${lib.makeBinPath [ pkgconfig clang which ]} \
- --suffix CRYSTAL_PATH : lib:$lib/crystal \
- --suffix CRYSTAL_LIBRARY_PATH : ${
- lib.makeLibraryPath (commonBuildInputs extraBuildInputs)
- }
- install -dm755 $lib/crystal
- cp -r src/* $lib/crystal/
+ mkdir -p $out
+ ln -s $bin/bin $out/bin
+ ln -s $lib $out/lib
- install -dm755 $out/share/doc/crystal/api
- cp -r docs/* $out/share/doc/crystal/api/
- cp -r samples $out/share/doc/crystal/
+ runHook postInstall
+ '';
- install -Dm644 etc/completion.bash $out/share/bash-completion/completions/crystal
- install -Dm644 etc/completion.zsh $out/share/zsh/site-functions/_crystal
+ enableParallelBuilding = true;
- install -Dm644 man/crystal.1 $out/share/man/man1/crystal.1
+ dontStrip = true;
- install -Dm644 -t $out/share/licenses/crystal LICENSE README.md
+ checkTarget = "compiler_spec";
- mkdir -p $out
- ln -s $bin/bin $out/bin
- ln -s $lib $out/lib
-
- runHook postInstall
- '';
-
- enableParallelBuilding = true;
-
- dontStrip = true;
-
- checkTarget = "spec";
-
- preCheck = ''
- export HOME=/tmp
- mkdir -p $HOME/test
+ preCheck = ''
+ export HOME=/tmp
+ mkdir -p $HOME/test
- export LIBRARY_PATH=${lib.makeLibraryPath checkInputs}:$LIBRARY_PATH
- export PATH=${lib.makeBinPath checkInputs}:$PATH
- '';
+ export LIBRARY_PATH=${lib.makeLibraryPath checkInputs}:$LIBRARY_PATH
+ export PATH=${lib.makeBinPath checkInputs}:$PATH
+ '';
- passthru.buildCrystalPackage = callPackage ./build-package.nix {
- crystal = compiler;
- };
+ passthru.buildCrystalPackage = callPackage ./build-package.nix {
+ crystal = compiler;
+ };
- meta = with lib; {
- description = "A compiled language with Ruby like syntax and type inference";
- homepage = "https://crystal-lang.org/";
- license = licenses.asl20;
- maintainers = with maintainers; [ manveru david50407 peterhoeg ];
- platforms = builtins.attrNames archs;
- };
- }));
+ meta = with lib; {
+ description = "A compiled language with Ruby like syntax and type inference";
+ homepage = "https://crystal-lang.org/";
+ license = licenses.asl20;
+ maintainers = with maintainers; [ david50407 fabianhjr manveru peterhoeg ];
+ platforms = builtins.attrNames archs;
+ };
+ })
+ );
in rec {
binaryCrystal_0_31 = genericBinary {
@@ -202,24 +232,30 @@ in rec {
crystal_0_32 = generic {
version = "0.32.1";
sha256 = "120ndi3nhh2r52hjvhwfb49cdggr1bzdq6b8xg7irzavhjinfza6";
- binary = binaryCrystal_0_31;
+ binary = crystal_0_31;
};
crystal_0_33 = generic {
version = "0.33.0";
sha256 = "1zg0qixcws81s083wrh54hp83ng2pa8iyyafaha55mzrh8293jbi";
- binary = binaryCrystal_0_31;
- doCheck = false; # 4 checks are failing now
+ binary = crystal_0_32;
};
crystal_0_34 = generic {
version = "0.34.0";
sha256 = "110lfpxk9jnqyznbfnilys65ixj5sdmy8pvvnlhqhc3ccvrlnmq4";
binary = crystal_0_33;
- doCheck = false; # 4 checks are failing now
};
- crystal = crystal_0_34;
+ crystal_0_35 = generic {
+ version = "0.35.1";
+ sha256 = "0p51bjl1nsvwsm64lqq421dcsxa201w7wwq8plw4r8wqarpq0g69";
+ binary = crystal_0_34;
+ # Needs git to build as per https://github.com/crystal-lang/crystal/issues/9789
+ extraBuildInputs = [ git ];
+ };
+
+ crystal = crystal_0_35;
crystal2nix = callPackage ./crystal2nix.nix {};
}