diff options
author | Profpatsch <mail@profpatsch.de> | 2021-01-02T13·54+0100 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-01-03T16·29+0000 |
commit | 1261616bff04b6a5cb966778da8a336245c08979 (patch) | |
tree | c84718bf113e0ba06a92d243de84e694ab625f89 | |
parent | e219c133280dde03f2bf5e763b23e67ddeae83e0 (diff) |
feat(Profpatsch/writers): add rustSimple writers r/2056
A bunch of writer functions wrapping the `buildRustCrate` functionality of nixpkgs. Can be used to write inline rust code, or rust code read from files with `builtins.readFile`. Change-Id: I9d74e9381b858b485925e4dc3fbb7fc392877c0a Reviewed-on: https://cl.tvl.fyi/c/depot/+/2318 Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
-rw-r--r-- | third_party/default.nix | 1 | ||||
-rw-r--r-- | users/Profpatsch/netstring/tests.nix | 3 | ||||
-rw-r--r-- | users/Profpatsch/writers/default.nix | 58 | ||||
-rw-r--r-- | users/Profpatsch/writers/tests.nix | 58 |
4 files changed, 110 insertions, 10 deletions
diff --git a/third_party/default.nix b/third_party/default.nix index 453a64579d7f..ba307aeae4d1 100644 --- a/third_party/default.nix +++ b/third_party/default.nix @@ -135,6 +135,7 @@ let runCommandNoCC rustPlatform rustc + buildRustCrate s6-portable-utils sbcl shellcheck diff --git a/users/Profpatsch/netstring/tests.nix b/users/Profpatsch/netstring/tests.nix index 26853e13eebe..0d4cee52766b 100644 --- a/users/Profpatsch/netstring/tests.nix +++ b/users/Profpatsch/netstring/tests.nix @@ -7,7 +7,8 @@ let ; }; - python-netstring-test = imports.writers.python3 "python-netstring" { + python-netstring-test = imports.writers.python3 { + name = "python-netstring"; libraries = p: [ python-netstring ]; diff --git a/users/Profpatsch/writers/default.nix b/users/Profpatsch/writers/default.nix index 9863f0fae098..4eb354c305ab 100644 --- a/users/Profpatsch/writers/default.nix +++ b/users/Profpatsch/writers/default.nix @@ -1,6 +1,6 @@ { depot, pkgs, lib, ... }: let - bins = depot.nix.getBins pkgs.coreutils ["printf" "mkdir" "cat"]; + bins = depot.nix.getBins pkgs.coreutils ["printf" "mkdir" "cat" "ln"]; inherit (depot.nix.yants) defun struct restrict attrs list string drv any; @@ -11,7 +11,9 @@ let [ "E" "W" ]) string; Libraries = defun [ (attrs any) (list drv) ]; - python3 = name: { + + python3 = { + name, libraries ? (_: []), flakeIgnore ? [] }: pkgs.writers.writePython3 name { @@ -62,12 +64,61 @@ let doCheck = false; }; + rustSimple = args@{name, ...}: src: + linkTo name "${rustSimpleBin args src}/bin/${name}"; + + linkTo = name: path: depot.nix.runExecline.local name {} [ + "importas" "out" "out" + bins.ln "-sT" path "$out" + ]; + + rustSimpleBin = { + name, + dependencies ? [], + ... + }@args: src: pkgs.buildRustCrate ({ + pname = name; + version = "1.0.0"; + crateName = name; + crateBin = [ name ]; + dependencies = dependencies; + src = pkgs.runCommandLocal "write-main.rs" { + src = src; + passAsFile = [ "src" ]; + } '' + mkdir -p $out/src/bin + cp "$srcPath" $out/src/bin/${name}.rs + find $out + ''; + } // args); + + rustSimpleLib = { + name, + dependencies ? [], + ... + }@args: src: pkgs.buildRustCrate ({ + pname = name; + version = "1.0.0"; + crateName = name; + dependencies = dependencies; + src = pkgs.runCommandLocal "write-lib.rs" { + src = src; + passAsFile = [ "src" ]; + } '' + mkdir -p $out/src + cp "$srcPath" $out/src/lib.rs + find $out + ''; + } // args); + tests = import ./tests.nix { inherit depot pkgs python3 python3Lib + rustSimpleLib + rustSimple ; }; @@ -75,6 +126,9 @@ in { inherit python3 python3Lib + rustSimple + rustSimpleBin + rustSimpleLib tests ; } diff --git a/users/Profpatsch/writers/tests.nix b/users/Profpatsch/writers/tests.nix index 13ddfd10e976..ce9c54016211 100644 --- a/users/Profpatsch/writers/tests.nix +++ b/users/Profpatsch/writers/tests.nix @@ -1,31 +1,75 @@ -{ depot, pkgs, python3, python3Lib }: +{ depot, pkgs, python3, python3Lib, rustSimpleLib, rustSimple }: let - transitiveLib = python3Lib { + run = drv: depot.nix.runExecline.local "run-${drv.name}" {} [ + "if" [ drv ] + "importas" "out" "out" + "${pkgs.coreutils}/bin/touch" "$out" + ]; + + pythonTransitiveLib = python3Lib { name = "transitive"; } '' def transitive(s): return s + " 1 2 3" ''; - testLib = python3Lib { + pythonTestLib = python3Lib { name = "test_lib"; - libraries = _: [ transitiveLib ]; + libraries = _: [ pythonTransitiveLib ]; } '' import transitive def test(): return transitive.transitive("test") ''; - pythonWithLib = python3 "python-with-lib" { - libraries = _: [ testLib ]; + pythonWithLib = run (python3 { + name = "python-with-lib"; + libraries = _: [ pythonTestLib ]; } '' import test_lib assert(test_lib.test() == "test 1 2 3") + ''); + + + rustTransitiveLib = rustSimpleLib { + name = "transitive"; + } '' + pub fn transitive(s: &str) -> String { + let mut new = s.to_string(); + new.push_str(" 1 2 3"); + new + } ''; + rustTestLib = rustSimpleLib { + name = "test_lib"; + dependencies = [ rustTransitiveLib ]; + } '' + extern crate transitive; + use transitive::{transitive}; + pub fn test() -> String { + transitive("test") + } + ''; + + rustWithLib = run (rustSimple { + name = "rust-with-lib"; + dependencies = [ rustTestLib ]; + } '' + extern crate test_lib; + + fn main() { + assert_eq!(test_lib::test(), String::from("test 1 2 3")); + } + ''); + + in { inherit - pythonWithLib; + pythonWithLib + rustTransitiveLib + rustWithLib + ; } |