diff options
author | Silvan Mosberger <contact@infinisil.com> | 2019-08-30 00:06:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-30 00:06:27 +0200 |
commit | bfb06ec5d9bd1307794f5c206816f7a2d7bcb3d2 (patch) | |
tree | 11205f216233924ca09709b96901221d3b647dfa /pkgs/development/compilers | |
parent | c2ef4fd2ba36486a04b01fc58ef8f405ac0e9d49 (diff) | |
parent | 7f6a9eef2602a9ddb369ec3318ee99e98054989b (diff) |
Merge pull request #67510 from Infinisil/crystal-infra
Crystal package builder
Diffstat (limited to 'pkgs/development/compilers')
-rw-r--r-- | pkgs/development/compilers/crystal/build-package.nix | 53 | ||||
-rw-r--r-- | pkgs/development/compilers/crystal/crystal2nix.cr (renamed from pkgs/development/compilers/mint/crystal2nix.cr) | 2 | ||||
-rw-r--r-- | pkgs/development/compilers/crystal/crystal2nix.nix | 16 | ||||
-rw-r--r-- | pkgs/development/compilers/crystal/default.nix | 19 | ||||
-rw-r--r-- | pkgs/development/compilers/mint/default.nix | 59 |
5 files changed, 94 insertions, 55 deletions
diff --git a/pkgs/development/compilers/crystal/build-package.nix b/pkgs/development/compilers/crystal/build-package.nix new file mode 100644 index 0000000000000..8ffa89a11b4ae --- /dev/null +++ b/pkgs/development/compilers/crystal/build-package.nix @@ -0,0 +1,53 @@ +{ stdenv, lib, crystal, linkFarm, fetchFromGitHub }: +{ # Generate shards.nix with `nix-shell -p crystal2nix --run crystal2nix` in the projects root + shardsFile ? null + # Specify binaries to build in the form { foo.src = "src/foo.cr"; } + # The default `crystal build` options can be overridden with { foo.options = [ "--no-debug" ]; } +, crystalBinaries ? {} +, ... +}@args: +let + mkDerivationArgs = builtins.removeAttrs args [ "shardsFile" "crystalBinaries" ]; + + crystalLib = linkFarm "crystal-lib" (lib.mapAttrsToList (name: value: { + inherit name; + path = fetchFromGitHub value; + }) (import shardsFile)); + + defaultOptions = [ "--release" "--progress" "--no-debug" "--verbose" ]; + +in stdenv.mkDerivation (mkDerivationArgs // { + + configurePhase = args.configurePhase or '' + runHook preConfigure + ${lib.optionalString (shardsFile != null) "ln -s ${crystalLib} lib"} + runHook postConfigure + ''; + + buildInputs = args.buildInputs or [] ++ [ crystal ]; + + buildPhase = args.buildPhase or '' + runHook preBuild + ${lib.concatStringsSep "\n" (lib.mapAttrsToList (bin: attrs: '' + crystal ${lib.escapeShellArgs ([ + "build" + "-o" bin + (attrs.src or (throw "No source file for crystal binary ${bin} provided")) + ] ++ attrs.options or defaultOptions)} + '') crystalBinaries)} + runHook postBuild + ''; + + installPhase = args.installPhase or '' + runHook preInstall + mkdir -p "$out/bin" + ${lib.concatMapStringsSep "\n" (bin: '' + mv ${lib.escapeShellArgs [ bin "${placeholder "out"}/bin/${bin}" ]} + '') (lib.attrNames crystalBinaries)} + runHook postInstall + ''; + + meta = args.meta or {} // { + platforms = args.meta.platforms or crystal.meta.platforms; + }; +}) diff --git a/pkgs/development/compilers/mint/crystal2nix.cr b/pkgs/development/compilers/crystal/crystal2nix.cr index f608102a37b4d..0610de5cfa4d7 100644 --- a/pkgs/development/compilers/mint/crystal2nix.cr +++ b/pkgs/development/compilers/crystal/crystal2nix.cr @@ -26,7 +26,7 @@ File.open "shards.nix", "w+" do |file| sha256 = "" args = ["--url", url, "--rev", rev] - Process.run("nix-prefetch-git", args: args) do |x| + Process.run("@nixPrefetchGit@", args: args) do |x| x.error.each_line { |e| puts e } sha256 = PrefetchJSON.from_json(x.output).sha256 end diff --git a/pkgs/development/compilers/crystal/crystal2nix.nix b/pkgs/development/compilers/crystal/crystal2nix.nix new file mode 100644 index 0000000000000..ac69b9b3d965b --- /dev/null +++ b/pkgs/development/compilers/crystal/crystal2nix.nix @@ -0,0 +1,16 @@ +{ lib, crystal, nix-prefetch-git }: +crystal.buildCrystalPackage { + pname = "crystal2nix"; + version = "unstable-2018-07-31"; + + nixPrefetchGit = "${lib.getBin nix-prefetch-git}/bin/nix-prefetch-git"; + unpackPhase = "substituteAll ${./crystal2nix.cr} crystal2nix.cr"; + + crystalBinaries.crystal2nix.src = "crystal2nix.cr"; + + meta = with lib; { + description = "Utility to convert Crystal's shard.lock files to a Nix file"; + license = licenses.mit; + maintainers = [ maintainers.manveru ]; + }; +} diff --git a/pkgs/development/compilers/crystal/default.nix b/pkgs/development/compilers/crystal/default.nix index db57bc3e9df77..2bc3d396da646 100644 --- a/pkgs/development/compilers/crystal/default.nix +++ b/pkgs/development/compilers/crystal/default.nix @@ -1,6 +1,7 @@ { stdenv, lib, fetchFromGitHub, fetchurl, makeWrapper -, coreutils, git, gmp, nettools, openssl, readline, tzdata, libxml2, libyaml -, boehmgc, libatomic_ops, pcre, libevent, libiconv, llvm, clang, which, zlib }: +, coreutils, git, gmp, nettools, openssl_1_0_2, readline, tzdata, libxml2, libyaml +, boehmgc, libatomic_ops, pcre, libevent, libiconv, llvm, clang, which, zlib +, callPackage }: # We need multiple binaries as a given binary isn't always able to build # (even slightly) older or newer versions. @@ -19,7 +20,7 @@ let arch = archs."${stdenv.system}" or (throw "system ${stdenv.system} not supported"); - checkInputs = [ git gmp openssl readline libxml2 libyaml ]; + checkInputs = [ git gmp openssl_1_0_2 readline libxml2 libyaml ]; genericBinary = { version, sha256s, rel ? 1 }: stdenv.mkDerivation rec { @@ -37,7 +38,7 @@ let }; generic = { version, sha256, binary, doCheck ? true }: - stdenv.mkDerivation rec { + let compiler = stdenv.mkDerivation rec { pname = "crystal"; inherit doCheck version; @@ -72,7 +73,7 @@ let buildInputs = [ boehmgc libatomic_ops pcre libevent libyaml - llvm zlib openssl + llvm zlib openssl_1_0_2 ] ++ stdenv.lib.optionals stdenv.isDarwin [ libiconv ]; @@ -134,6 +135,10 @@ let export PATH=${lib.makeBinPath checkInputs}:$PATH ''; + 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/; @@ -141,7 +146,7 @@ let maintainers = with maintainers; [ manveru david50407 peterhoeg ]; platforms = builtins.attrNames archs; }; - }; + }; in compiler; in rec { binaryCrystal_0_26 = genericBinary { @@ -207,4 +212,6 @@ in rec { }; crystal = crystal_0_30; + + crystal2nix = callPackage ./crystal2nix.nix {}; } diff --git a/pkgs/development/compilers/mint/default.nix b/pkgs/development/compilers/mint/default.nix index 1c8e9fb7eb205..5f72bd3649b17 100644 --- a/pkgs/development/compilers/mint/default.nix +++ b/pkgs/development/compilers/mint/default.nix @@ -1,40 +1,7 @@ -# Updating the dependencies for this package: -# -# wget https://raw.githubusercontent.com/mint-lang/mint/0.3.1/shard.lock -# nix-shell -p crystal libyaml --run 'crystal run crystal2nix.cr' -# -{stdenv, lib, fetchFromGitHub, crystal, zlib, openssl, duktape, which, libyaml }: -let - crystalPackages = lib.mapAttrs (name: src: - stdenv.mkDerivation { - name = lib.replaceStrings ["/"] ["-"] name; - src = fetchFromGitHub src; - phases = "installPhase"; - installPhase = ''cp -r $src $out''; - passthru = { libName = name; }; - } - ) (import ./shards.nix); - - crystalLib = stdenv.mkDerivation { - name = "crystal-lib"; - src = lib.attrValues crystalPackages; - libNames = lib.mapAttrsToList (k: v: [k v]) crystalPackages; - phases = "buildPhase"; - buildPhase = '' - mkdir -p $out - linkup () { - while [ "$#" -gt 0 ]; do - ln -s $2 $out/$1 - shift; shift - done - } - linkup $libNames - ''; - }; -in -stdenv.mkDerivation rec { +{ lib, fetchFromGitHub, crystal, zlib, openssl_1_0_2, duktape, which, libyaml }: +crystal.buildCrystalPackage rec { version = "0.5.0"; - name = "mint-${version}"; + pname = "mint"; src = fetchFromGitHub { owner = "mint-lang"; repo = "mint"; @@ -42,23 +9,19 @@ stdenv.mkDerivation rec { sha256 = "0vxbx38c390rd2ysvbwgh89v2232sh5rbsp3nk9wzb70jybpslvl"; }; - nativeBuildInputs = [ which crystal zlib openssl duktape libyaml ]; - - buildPhase = '' - mkdir -p $out/bin tmp - cd tmp - ln -s ${crystalLib} lib - cp -r $src/* . - crystal build src/mint.cr -o $out/bin/mint --verbose --progress --release --no-debug - ''; + buildInputs = [ openssl_1_0_2 ]; - installPhase = ''true''; + # Update with + # nix-shell -p crystal2nix --run crystal2nix + # with mint's shard.lock file in the current directory + shardsFile = ./shards.nix; + crystalBinaries.mint.src = "src/mint.cr"; meta = { description = "A refreshing language for the front-end web"; homepage = https://mint-lang.com/; - license = stdenv.lib.licenses.bsd3; - maintainers = with stdenv.lib.maintainers; [ manveru ]; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ manveru ]; platforms = [ "x86_64-linux" "i686-linux" "x86_64-darwin" ]; }; } |