about summary refs log tree commit diff
path: root/nix/buildTypedGo/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/buildTypedGo/default.nix')
-rw-r--r--nix/buildTypedGo/default.nix33
1 files changed, 33 insertions, 0 deletions
diff --git a/nix/buildTypedGo/default.nix b/nix/buildTypedGo/default.nix
new file mode 100644
index 000000000000..1c443484920f
--- /dev/null
+++ b/nix/buildTypedGo/default.nix
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# A crude wrapper around //nix/buildGo that supports the Go 2 alpha.
+#
+# The way the alpha is implemented is via a transpiler from typed to
+# untyped Go.
+{ depot, pkgs, ... }:
+
+let
+  inherit (builtins)
+    stringLength
+    substring;
+
+  inherit (depot.nix.buildGo) gpackage program;
+
+  go2goext = file: substring 0 ((stringLength file) - 1) file;
+  go2go = file: pkgs.runCommandNoCC "${go2goext (toString file)}" {} ''
+    cp ${file} .
+    ${pkgs.go}/bin/go tool go2go translate *.go2
+    mv *.go $out
+  '';
+
+in rec {
+  program = { name, srcs, deps ? [], x_defs ? {} }: depot.nix.buildGo.program {
+    inherit name deps x_defs;
+    srcs = map go2go srcs;
+  };
+
+  package = { name, srcs, deps ? [], x_defs ? {}, sfiles ? [] }: depot.nix.buildGo.package {
+    inherit name deps x_defs sfiles;
+    srcs = map go2go srcs;
+  };
+}