diff --git a/pkgs/by-name/in/inko/package.nix b/pkgs/by-name/in/inko/package.nix new file mode 100644 index 000000000000..70abc78b0fe3 --- /dev/null +++ b/pkgs/by-name/in/inko/package.nix @@ -0,0 +1,68 @@ +{ 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"; + }; +} diff --git a/pkgs/by-name/in/inko/test.nix b/pkgs/by-name/in/inko/test.nix new file mode 100644 index 000000000000..8d63dd07ccac --- /dev/null +++ b/pkgs/by-name/in/inko/test.nix @@ -0,0 +1,39 @@ +{ 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 +'' diff --git a/pkgs/by-name/iv/ivm/package.nix b/pkgs/by-name/iv/ivm/package.nix new file mode 100644 index 000000000000..705bbf14a041 --- /dev/null +++ b/pkgs/by-name/iv/ivm/package.nix @@ -0,0 +1,54 @@ +{ 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"; + }; +}