Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

crystal: 1.2 -> 1.7 #195606

Merged
merged 21 commits into from
Jan 20, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 54 additions & 12 deletions pkgs/development/compilers/crystal/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
, libiconv
, libxml2
, libyaml
, libffi
, llvmPackages
, makeWrapper
, openssl
Expand All @@ -32,19 +33,21 @@ let
archs = {
x86_64-linux = "linux-x86_64";
i686-linux = "linux-i686";
x86_64-darwin = "darwin-x86_64";
x86_64-darwin = "darwin-universal";
aarch64-darwin = "darwin-universal";
GeopJr marked this conversation as resolved.
Show resolved Hide resolved
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 ];
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.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";
GeopJr marked this conversation as resolved.
Show resolved Hide resolved

Expand All @@ -64,12 +67,11 @@ let
patchShebangs $out/bin/crystal
'';

meta.broken = lib.versionOlder version "1.2.0" && isAarch64Darwin;
meta.platforms = lib.attrNames sha256s;
};

commonBuildInputs = extraBuildInputs: [
boehmgc
libatomic_ops
pcre
libevent
libyaml
Expand Down Expand Up @@ -98,21 +100,37 @@ let
inherit sha256;
};

patches = lib.optionals (lib.versionOlder version "1.2.0") [
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.0") [
# needed for #12601 to get applied successfully
(fetchpatch {
url = "https://github.com/crystal-lang/crystal/commit/bf4009dacbf67a63a1cbaffddbdc99549bb70a03.patch";
GeopJr marked this conversation as resolved.
Show resolved Hide resolved
sha256 = "sha256-KpMA5Zdy0QI+HcfuZVRT2gLPS7oH2D4MsdYEnHGDt/0=";
})
] ++ 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 = ''
export TMP=$(mktemp -d)
export HOME=$TMP
export TMPDIR=$TMP
mkdir -p $HOME/test

# Add dependency of crystal to docs to avoid issue on flag changes between releases
Expand All @@ -123,8 +141,6 @@ let
substituteInPlace src/crystal/system/unix/time.cr \
--replace /usr/share/zoneinfo ${tzdata}/share/zoneinfo

ln -sf spec/compiler spec/std

mkdir -p $TMP/crystal

substituteInPlace spec/std/file_spec.cr \
Expand Down Expand Up @@ -163,12 +179,13 @@ let

makeFlags = [
"CRYSTAL_CONFIG_VERSION=${version}"
"release=1"
"progress=1"
];

LLVM_CONFIG = "${llvmPackages.llvm.dev}/bin/llvm-config";

FLAGS = [
"--release"
GeopJr marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we no longer need to do this as you're patching the versions that do not support it.

Otherwise good to. Once this is reinstated I'll squash and merge.

Thanks a ton @GeopJr !!!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The release flag moved to makeFlags (which has the same effect as far as I am aware) from the #173928 PR. Is there another reason to include it in FLAGS?

"--single-module" # needed for deterministic builds
];

Expand Down Expand Up @@ -220,18 +237,17 @@ let
export PATH=${lib.makeBinPath checkInputs}:$PATH
'';

passthru.buildBinary = binary;
passthru.buildCrystalPackage = callPackage ./build-package.nix {
crystal = compiler;
};

meta = with lib; {
broken = stdenv.isDarwin;
inherit (binary.meta) platforms;
description = "A compiled language with Ruby like syntax and type inference";
homepage = "https://crystal-lang.org/";
license = licenses.asl20;
maintainers = with maintainers; [ david50407 manveru peterhoeg ];
platforms = let archNames = builtins.attrNames archs; in
if (lib.versionOlder version "1.2.0") then remove "aarch64-darwin" archNames else archNames;
};
})
);
Expand All @@ -255,23 +271,49 @@ rec {
};
};

binaryCrystal_1_5 = genericBinary {
version = "1.5.0";
sha256s = {
x86_64-linux = "sha256-YnNg8PyAUgLYAxAAfVA8ei/AdFsdsiEVN9f1TpqZQ0c=";
#i686-linux = ""; no prebuilt binaries since 1.2.0
x86_64-darwin = "sha256-KU6+HLFlpYJSJS4F1zlHBeBt/rzxb7U57GmqRQnLm0Y==";
#aarch64-linux = ""; not available yet
aarch64-darwin = "sha256-KU6+HLFlpYJSJS4F1zlHBeBt/rzxb7U57GmqRQnLm0Y==";
};
};

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=";
binary = binaryCrystal_1_5;
};

crystal_1_6 = generic {
version = "1.6.2";
sha256 = "sha256-WgU6Y8ww1IYyB0vd5tXwmWBEL5RiPjHA7YzPd21jlsY=";
binary = binaryCrystal_1_5;
};

crystal = crystal_1_2;
crystal = crystal_1_6;
}
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13447,6 +13447,8 @@ with pkgs;
crystal_1_0
crystal_1_1
crystal_1_2
crystal_1_5
crystal_1_6
crystal;

crystal2nix = callPackage ../development/compilers/crystal2nix { };
Expand Down