From 4b5e23deff87e0c3b7e67f3e7de32270a8e2b9f5 Mon Sep 17 00:00:00 2001
From: CrazedProgrammer <crazedprogrammer@gmail.com>
Date: Wed, 16 May 2018 21:32:35 +0200
Subject: [PATCH] urn: init at 0.7.1

---
 pkgs/development/compilers/urn/default.nix | 61 ++++++++++++++++++++++
 pkgs/top-level/all-packages.nix            |  2 +
 2 files changed, 63 insertions(+)
 create mode 100644 pkgs/development/compilers/urn/default.nix

diff --git a/pkgs/development/compilers/urn/default.nix b/pkgs/development/compilers/urn/default.nix
new file mode 100644
index 000000000000..5add2ae4cc55
--- /dev/null
+++ b/pkgs/development/compilers/urn/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitLab, buildEnv, makeWrapper, lua, luajit, readline
+, useLuaJit ? false
+, extraLibraries ? []
+}:
+
+let
+  version = "0.7.1";
+  # Build a sort of "union package" with all the native dependencies we
+  # have: Lua (or LuaJIT), readline, etc. Then, we can depend on this
+  # and refer to ${urn-rt} instead of ${lua}, ${readline}, etc.
+  urn-rt = buildEnv {
+    name = "urn-rt-${version}";
+    ignoreCollisions = true;
+    paths = if useLuaJit then
+              [ luajit readline ]
+            else
+              [ lua ];
+  };
+
+  inherit (stdenv.lib) optionalString concatMapStringsSep;
+in
+
+stdenv.mkDerivation rec {
+  name = "urn-${optionalString (extraLibraries != []) "with-libraries-"}${version}";
+
+  src = fetchFromGitLab {
+    owner = "urn";
+    repo = "urn";
+    rev = "v${version}";
+    sha256 = "1vw0sljrczbwl7fl5d3frbpklb0larzyp7s7mwwprkb07b027sd5";
+  };
+
+  buildInputs = [ makeWrapper ];
+  # Any packages that depend on the compiler have a transitive
+  # dependency on the Urn runtime support.
+  propagatedBuildInputs = [ urn-rt ];
+
+  makeFlags = ["-B"];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib
+    install -m 0755 bin/urn.lua $out/bin/urn
+    cp -r lib $out/lib/urn
+    wrapProgram $out/bin/urn \
+      --add-flags "-i $out/lib/urn --prelude $out/lib/urn/prelude.lisp" \
+      --add-flags "${concatMapStringsSep " " (x: "-i ${x.libraryPath}") extraLibraries}" \
+      --prefix PATH : ${urn-rt}/bin/ \
+      --prefix LD_LIBRARY_PATH : ${urn-rt}/lib/
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://urn-lang.com;
+    description = "Yet another Lisp variant which compiles to Lua";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ CrazedProgrammer ];
+  };
+
+  passthru = {
+    inherit urn-rt;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9e6c6a526335..bf41d6327331 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -6969,6 +6969,8 @@ with pkgs;
 
   bupc = callPackage ../development/compilers/bupc { };
 
+  urn = callPackage ../development/compilers/urn { };
+
   urweb = callPackage ../development/compilers/urweb { };
 
   inherit (callPackage ../development/compilers/vala { })