about summary refs log tree commit diff
path: root/services/gemma/default.nix
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-09-02T01·14+0100
committerVincent Ambo <tazjin@google.com>2019-09-02T01·14+0100
commit4411eea11f799e01d2343ed017e360faf3daef3a (patch)
tree16592d5348670619e61bf6f3c15d6366a46e2697 /services/gemma/default.nix
parentb43e5529f770818710fffd2458e320f49272d26f (diff)
fix(gemma): Fix build process in Nix r/70
Diffstat (limited to 'services/gemma/default.nix')
-rw-r--r--services/gemma/default.nix53
1 files changed, 28 insertions, 25 deletions
diff --git a/services/gemma/default.nix b/services/gemma/default.nix
index 537875b625..c4ed62dbde 100644
--- a/services/gemma/default.nix
+++ b/services/gemma/default.nix
@@ -1,38 +1,45 @@
-{ stdenv, sbcl, lispPackages, elmPackages, pkgconfig }:
+{ stdenv, sbcl, lispPackages, elmPackages, makeWrapper, openssl }:
 
-stdenv.mkDerivation rec {
+let frontend = stdenv.mkDerivation {
+  name = "gemma-frontend";
+  src = ./frontend;
+  buildInputs = [ elmPackages.elm ];
+
+  phases = [ "unpackPhase" "buildPhase" ];
+  buildPhase = ''
+    mkdir .home && export HOME="$PWD/.home"
+    mkdir -p $out
+    ls -lh
+    elm-make --yes Main.elm --output $out/index.html
+  '';
+};
+in stdenv.mkDerivation rec {
   name = "gemma";
   src = ./.;
 
-  buildInputs = with lispPackages; [
+  nativeBuildInputs = with lispPackages; [
     sbcl
-    quicklisp
     hunchentoot
     cl-json
+    cffi
+    cl-prevalence
     local-time
-    elmPackages.elm
-    pkgconfig
+    makeWrapper
   ];
 
-  # The build phase has three distinct things it needs to do:
-  #
-  # 1. "Compile" the Elm source into something useful to browsers.
-  #
-  # 2. Configure the Lisp part of the application to serve the compiled Elm
-  #
-  # 3. Build (and don't strip!) an executable out of the Lisp backend.
   buildPhase = ''
     mkdir -p $out/share/gemma $out/bin
-    mkdir .home && export HOME="$PWD/.home"
 
-    # Build Elm
-    cd frontend
-    elm-make --yes Main.elm --output $out/share/gemma/index.html
-
-    # Build Lisp
+    # Build Lisp using the Nix-provided wrapper which sets the load
+    # paths correctly.
     cd $src
-    quicklisp init
-    env GEMMA_BIN_TARGET=$out/bin/gemma sbcl --load build.lisp
+    env GEMMA_BIN_TARGET=$out/bin/gemma common-lisp.sh --load build.lisp
+
+    # Wrap gemma to find OpenSSL at runtime:
+    wrapProgram $out/bin/gemma --prefix LD_LIBRARY_PATH : "${openssl.out}/lib"
+
+    # and finally copy the frontend to the appropriate spot
+    cp ${frontend}/index.html $out/share/gemma/index.html
   '';
 
   installPhase = "true";
@@ -44,9 +51,5 @@ stdenv.mkDerivation rec {
     description = "Tool for tracking recurring tasks";
     homepage    = "https://github.com/tazjin/gemma";
     license     = licenses.gpl3;
-
-    # For the time being, Gemma can not be built because the Lisp build process
-    # broke in some way I haven't had time to debug.
-    broken = true;
   };
 }