Unverified Commit fa4b81d8 authored by Julien Malka's avatar Julien Malka Committed by GitHub
Browse files

Merge pull request #325089 from feathecutie/inko

 inko: init at 0.15.0 & ivm: init at 0.5.0
parents 6017bb20 bd3215c5
Loading
Loading
Loading
Loading
+68 −0
Original line number Diff line number Diff line
{ lib
, rustPlatform
, fetchFromGitHub
, llvm_16
, libffi
, libz
, libxml2
, ncurses
, stdenv
, makeWrapper
, callPackage
}:

rustPlatform.buildRustPackage rec {
  pname = "inko";
  version = "0.15.0";

  src = fetchFromGitHub {
    owner = "inko-lang";
    repo = "inko";
    rev = "v${version}";
    hash = "sha256-Iojv8pTyILYpLFnoTlgUGmlfWWH0DgsGBRxzd3oRNwA=";
  };

  cargoHash = "sha256-PaZD7wwcami6EWvOHLislNkwQhCZItN9XZkPSExwo0U=";

  buildInputs = [
    libffi
    libz
    libxml2
    ncurses
    stdenv.cc.cc.lib
  ];

  nativeBuildInputs = [
    llvm_16
    makeWrapper
  ];

  env = {
    INKO_STD = "${placeholder "out"}/lib";
    INKO_RT = "${placeholder "out"}/lib/runtime";
  };

  postFixup = ''
    wrapProgram $out/bin/inko \
      --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]}
  '';

  postInstall = ''
    mkdir -p $out/lib/runtime
    mv $out/lib/*.a $out/lib/runtime/
    cp -r std/src/* $out/lib/
  '';

  passthru.tests = {
    simple = callPackage ./test.nix { };
  };

  meta = {
    description = "Language for building concurrent software with confidence";
    homepage = "https://inko-lang.org/";
    license = lib.licenses.mpl20;
    maintainers = [ lib.maintainers.feathecutie ];
    platforms = lib.platforms.unix;
    mainProgram = "inko";
  };
}
+39 −0
Original line number Diff line number Diff line
{ inko
, writeText
, runCommand
, ...
}:

let
  source = writeText "hello.inko" /* inko */ ''
    import std.process (sleep)
    import std.stdio (STDOUT)
    import std.time (Duration)

    class async Printer {
      fn async print(message: String, channel: Channel[Nil]) {
        let _ = STDOUT.new.print(message)

        channel.send(nil)
      }
    }

    class async Main {
      fn async main {
        let channel = Channel.new(size: 2)

        Printer().print('Hello', channel)
        Printer().print('world', channel)

        channel.receive
        channel.receive
      }
    }
  '';
in

runCommand "inko-test" { } ''
  ${inko}/bin/inko run ${source} > $out
  cat $out | grep -q Hello
  cat $out | grep -q world
''
+54 −0
Original line number Diff line number Diff line
{ lib
, rustPlatform
, fetchFromGitHub
, makeWrapper
, cargo
, llvm_16
, stdenv
, libffi
, libz
, libxml2
, ncurses
}:

rustPlatform.buildRustPackage rec {
  pname = "ivm";
  version = "0.5.0";

  src = fetchFromGitHub {
    owner = "inko-lang";
    repo = "ivm";
    rev = "v${version}";
    hash = "sha256-z0oo1JUZbX3iT8N9+14NcqUzalpARImcbtUiQYS4djA=";
  };

  cargoHash = "sha256-EP3fS4lAGOaXJXAM22ZCn4+9Ah8TM1+wvNerKCKByo0=";

  buildInputs = [
    stdenv.cc.cc.lib
  ];

  nativeBuildInputs = [
    makeWrapper
  ];

  postFixup = ''
    wrapProgram $out/bin/ivm \
      --prefix PATH : ${lib.makeBinPath [ cargo llvm_16.dev stdenv.cc ]} \
      --prefix LIBRARY_PATH : ${lib.makeLibraryPath [
        libffi
        libz
        libxml2
        ncurses
      ]}
  '';

  meta = {
    description = "Cross-platform Inko version manager";
    homepage = "https://github.com/inko-lang/ivm";
    license = lib.licenses.mpl20;
    maintainers = [ lib.maintainers.feathecutie ];
    platforms = lib.platforms.unix;
    mainProgram = "ivm";
  };
}