forked from mirrors/nixpkgs
dd50d1df59
Added aarch64-darwin as it's been manually complied and added to releases since 0.14.0 Removed fetchSubmodules as it couldn't fetch wpt at detached commit a51d36327febebc8634d7b523a7e620f4ebdbf26. Doesn't seem required for much other than testing. Added installCheckPhase Moved the librusty_v8 stuff within the preBuild phase and changed the names Skipped 1.7.X releases as there wasn't an aarch64-linux release of librusty_v8.a available
95 lines
3.1 KiB
Nix
95 lines
3.1 KiB
Nix
{ stdenv
|
|
, lib
|
|
, fetchurl
|
|
, fetchFromGitHub
|
|
, rust
|
|
, rustPlatform
|
|
, installShellFiles
|
|
, Security
|
|
, CoreServices
|
|
}:
|
|
|
|
rustPlatform.buildRustPackage rec {
|
|
pname = "deno";
|
|
version = "1.8.0";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "denoland";
|
|
repo = pname;
|
|
rev = "v${version}";
|
|
sha256 = "sha256-26VTwc99XunkTqsdP4b7axjflLL93PGkgjGtMmI4/4A=";
|
|
};
|
|
cargoSha256 = "sha256-T/xu/uokDvf9nBXNL31oXl+L5KifSs+bF4J7Tfw37zs=";
|
|
|
|
# Install completions post-install
|
|
nativeBuildInputs = [ installShellFiles ];
|
|
|
|
buildInputs = lib.optionals stdenv.isDarwin [ Security CoreServices ];
|
|
|
|
# The rusty_v8 package will try to download a `librusty_v8.a` release at build time to our read-only filesystem
|
|
# To avoid this we pre-download the file and place it in the locations it will require it in advance
|
|
preBuild =
|
|
let
|
|
inherit (import ./deps.nix { }) librusty_v8;
|
|
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
librusty_v8_release = fetchurl {
|
|
url = "https://github.com/denoland/rusty_v8/releases/download/v${librusty_v8.version}/librusty_v8_release_${arch}.a";
|
|
sha256 = librusty_v8.sha256s.${stdenv.hostPlatform.system};
|
|
meta = { inherit (librusty_v8) version; };
|
|
};
|
|
in
|
|
''
|
|
_rusty_v8_setup() {
|
|
for v in "$@"; do
|
|
dir="target/$v/gn_out/obj"
|
|
mkdir -p "$dir" && cp "${librusty_v8_release}" "$dir/librusty_v8.a"
|
|
done
|
|
}
|
|
|
|
# Copy over the `librusty_v8.a` file inside target/XYZ/gn_out/obj, symlink not allowed
|
|
_rusty_v8_setup "debug" "release" "${arch}/release"
|
|
'';
|
|
|
|
# Tests have some inconsistencies between runs with output integration tests
|
|
# Skipping until resolved
|
|
doCheck = false;
|
|
|
|
postInstall = ''
|
|
# remove test plugin and test server
|
|
rm -r $out/lib $out/bin/test_server $out/bin/denort
|
|
|
|
installShellCompletion --cmd deno \
|
|
--bash <($out/bin/deno completions bash) \
|
|
--fish <($out/bin/deno completions fish) \
|
|
--zsh <($out/bin/deno completions zsh)
|
|
'';
|
|
|
|
doInstallCheck = true;
|
|
installCheckPhase = ''
|
|
runHook preInstallCheck
|
|
$out/bin/deno --help
|
|
$out/bin/deno --version | grep "deno ${version}"
|
|
runHook postInstallCheck
|
|
'';
|
|
|
|
passthru.updateScript = ./update/update.ts;
|
|
|
|
meta = with lib; {
|
|
homepage = "https://deno.land/";
|
|
changelog = "https://github.com/denoland/deno/releases/tag/v${version}";
|
|
description = "A secure runtime for JavaScript and TypeScript";
|
|
longDescription = ''
|
|
Deno aims to be a productive and secure scripting environment for the modern programmer.
|
|
Deno will always be distributed as a single executable.
|
|
Given a URL to a Deno program, it is runnable with nothing more than the ~15 megabyte zipped executable.
|
|
Deno explicitly takes on the role of both runtime and package manager.
|
|
It uses a standard browser-compatible protocol for loading modules: URLs.
|
|
Among other things, Deno is a great replacement for utility scripts that may have been historically written with
|
|
bash or python.
|
|
'';
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ jk ];
|
|
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
|
};
|
|
}
|