diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/compilers/crystal/default.nix | 294 |
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 {}; } |