summary refs log tree commit diff
path: root/pkgs/development/idris-modules
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2017-11-06 18:18:59 +0000
committerMatthew Pickering <matthewtpickering@gmail.com>2018-02-07 19:25:50 +0000
commit947e7d80b41d9dea1739c23bf512f26d1c30703b (patch)
tree5f78026b58db3846acdec430863bf9a62fa9280a /pkgs/development/idris-modules
parent8d55538f973813c8db45e9434bc7f742290a1fd0 (diff)
downloadnixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar.gz
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar.bz2
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar.lz
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar.xz
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.tar.zst
nixpkgs-947e7d80b41d9dea1739c23bf512f26d1c30703b.zip
Refactor Idris packaging infrastructure
The main two changes are

1. Completely rewrite how with-packages works to remove use of envHooks
2. The package description is now an idris specific set rather than
    being a subset of the arguments to mkDerivation. This mirrors the
    way Haskell packages are treated.
Diffstat (limited to 'pkgs/development/idris-modules')
-rw-r--r--pkgs/development/idris-modules/build-builtin-package.nix12
-rw-r--r--pkgs/development/idris-modules/build-idris-package.nix60
-rw-r--r--pkgs/development/idris-modules/default.nix31
-rw-r--r--pkgs/development/idris-modules/httpclient.nix14
-rw-r--r--pkgs/development/idris-modules/lightyear.nix9
-rw-r--r--pkgs/development/idris-modules/specdris.nix20
-rw-r--r--pkgs/development/idris-modules/with-packages.nix48
-rw-r--r--pkgs/development/idris-modules/wl-pprint.nix5
8 files changed, 93 insertions, 106 deletions
diff --git a/pkgs/development/idris-modules/build-builtin-package.nix b/pkgs/development/idris-modules/build-builtin-package.nix
index 6de3f8b1666..44efa97a531 100644
--- a/pkgs/development/idris-modules/build-builtin-package.nix
+++ b/pkgs/development/idris-modules/build-builtin-package.nix
@@ -1,4 +1,4 @@
-# Build one of the packages that come with idris
+# Build one of the packages that comes with idris
 # name: The name of the package
 # deps: The dependencies of the package
 { idris, build-idris-package, lib }: name: deps:
@@ -6,20 +6,16 @@ let
   inherit (builtins.parseDrvName idris.name) version;
 in
 build-idris-package {
-  name = "${name}-${version}";
-
-  propagatedBuildInputs = deps;
 
+  inherit name version;
   inherit (idris) src;
 
+  idrisDeps = deps;
+
   postUnpack = ''
     sourceRoot=$sourceRoot/libs/${name}
   '';
 
-  postPatch = ''
-    sed -i ${name}.ipkg -e "/^opts/ s|-i \\.\\./|-i $IDRIS_LIBRARY_PATH/|g"
-  '';
-
   meta = idris.meta // {
     description = "${name} builtin Idris library";
   };
diff --git a/pkgs/development/idris-modules/build-idris-package.nix b/pkgs/development/idris-modules/build-idris-package.nix
index 66eddd0e360..0416e76afa9 100644
--- a/pkgs/development/idris-modules/build-idris-package.nix
+++ b/pkgs/development/idris-modules/build-idris-package.nix
@@ -1,42 +1,46 @@
 # Build an idris package
-#
-# args: Additional arguments to pass to mkDerivation. Generally should include at least
-#       name and src.
-{ stdenv, idris, gmp }: args: stdenv.mkDerivation ({
-  preHook = ''
-    # Library import path
-    export IDRIS_LIBRARY_PATH=$PWD/idris-libs
-    mkdir -p $IDRIS_LIBRARY_PATH
-
-    # Library install path
-    export IBCSUBDIR=$out/lib/${idris.name}
-    mkdir -p $IBCSUBDIR
-
-    addIdrisLibs () {
-      if [ -d $1/lib/${idris.name} ]; then
-        ln -sv $1/lib/${idris.name}/* $IDRIS_LIBRARY_PATH
-      fi
-    }
-
-    # All run-time deps
-    addEnvHooks 0 addIdrisLibs
+{ stdenv, idrisPackages, gmp }:
+  { idrisDeps ? []
+  , name
+  , version
+  , src
+  , meta
+  , extraBuildInputs ? []
+  , postUnpack ? ""
+  , doCheck ? true
+  }:
+let
+  idris-with-packages = idrisPackages.with-packages idrisDeps;
+in
+stdenv.mkDerivation ({
+
+  name = "${name}-${version}";
+
+  inherit postUnpack src doCheck meta;
+
+
+  # Some packages use the style
+  # opts = -i ../../path/to/package
+  # rather than the declarative pkgs attribute so we have to rewrite the path.
+  postPatch = ''
+    sed -i *.ipkg -e "/^opts/ s|-i \\.\\./|-i ${idris-with-packages}/libs/|g"
   '';
 
   buildPhase = ''
-    ${idris}/bin/idris --build *.ipkg
+    ${idris-with-packages}/bin/idris --build *.ipkg
   '';
 
-  doCheck = true;
-
   checkPhase = ''
     if grep -q test *.ipkg; then
-      ${idris}/bin/idris --testpkg *.ipkg
+      ${idris-with-packages}/bin/idris --testpkg *.ipkg
     fi
   '';
 
   installPhase = ''
-    ${idris}/bin/idris --install *.ipkg --ibcsubdir $IBCSUBDIR
+    ${idris-with-packages}/bin/idris --install *.ipkg --ibcsubdir $out/libs
   '';
 
-  buildInputs = [ gmp ];
-} // args)
+  buildInputs = [ gmp ] ++ extraBuildInputs;
+
+  propagatedBuildInputs = idrisDeps;
+})
diff --git a/pkgs/development/idris-modules/default.nix b/pkgs/development/idris-modules/default.nix
index 16f6c65b094..35ee20e9622 100644
--- a/pkgs/development/idris-modules/default.nix
+++ b/pkgs/development/idris-modules/default.nix
@@ -25,14 +25,8 @@
       pruviloj = [ self.prelude self.base ];
     };
 
-    files = builtins.filter (n: n != "default") (pkgs.lib.mapAttrsToList (name: type: let
-      m = builtins.match "(.*)\\.nix" name;
-    in if m == null then "default" else builtins.head m) (builtins.readDir ./.));
-  in (builtins.listToAttrs (map (name: {
-    inherit name;
-
-    value = callPackage (./. + "/${name}.nix") {};
-  }) files)) // {
+  in
+    {
     inherit idris-no-deps callPackage;
     # See #10450 about why we have to wrap the executable
     idris =
@@ -40,7 +34,28 @@
           idris-no-deps
           { path = [ pkgs.gcc ]; lib = [pkgs.gmp]; };
 
+
+    with-packages = callPackage ./with-packages.nix {} ;
+
+    build-builtin-package = callPackage ./build-builtin-package.nix {};
+
+    build-idris-package = callPackage ./build-idris-package.nix {};
+
+    # Libraries
+
     # A list of all of the libraries that come with idris
     builtins = pkgs.lib.mapAttrsToList (name: value: value) builtins_;
+
+    httpclient = callPackage ./httpclient.nix {};
+
+    lightyear = callPackage ./lightyear.nix {};
+
+    optparse = callPackage ./optparse.nix {};
+
+    wl-pprint = callPackage ./wl-pprint.nix {};
+
+    specdris = callPackage ./specdris.nix {};
+
+
   } // builtins_;
 in fix' (extends overrides idrisPackages)
diff --git a/pkgs/development/idris-modules/httpclient.nix b/pkgs/development/idris-modules/httpclient.nix
index ec41956b963..13c33d04da5 100644
--- a/pkgs/development/idris-modules/httpclient.nix
+++ b/pkgs/development/idris-modules/httpclient.nix
@@ -1,17 +1,20 @@
-{ pkgs
+{ curl
 , build-idris-package
 , fetchFromGitHub
 , lightyear
 , contrib
+, effects
+, prelude
+, base
 , lib
 , idris
 }:
 
 let
-  date = "2016-12-20";
 in
 build-idris-package {
-  name = "httpclient-${date}";
+  name = "httpclient";
+  version = "2016-12-20";
 
   src = fetchFromGitHub {
     owner = "justjoheinz";
@@ -20,11 +23,14 @@ build-idris-package {
     sha256 = "0sy0q7gri9lwbqdmx9720pby3w1470w7wzn62bf2rir532219hhl";
   };
 
-  propagatedBuildInputs = [ pkgs.curl lightyear contrib ];
+  idrisDeps = [ prelude base effects lightyear contrib ];
+
+  extraBuildInputs = [ curl ];
 
   meta = {
     description = "HTTP Client for Idris";
     homepage = https://github.com/justjoheinz/idris-httpclient;
     inherit (idris.meta) platforms;
+    broken = true;
   };
 }
diff --git a/pkgs/development/idris-modules/lightyear.nix b/pkgs/development/idris-modules/lightyear.nix
index 27828e6f41f..e217e76e2a7 100644
--- a/pkgs/development/idris-modules/lightyear.nix
+++ b/pkgs/development/idris-modules/lightyear.nix
@@ -10,8 +10,11 @@
 let
   date = "2017-09-10";
 in
-build-idris-package {
-  name = "lightyear-${date}";
+build-idris-package  {
+  name = "lightyear";
+  version = date;
+
+  idrisDeps = [ prelude base effects ];
 
   src = fetchFromGitHub {
     owner = "ziman";
@@ -20,8 +23,6 @@ build-idris-package {
     sha256 = "05x66abhpbdm6yr0afbwfk6w04ysdk78gylj5alhgwhy4jqakv29";
   };
 
-  propagatedBuildInputs = [ prelude base effects ];
-
   meta = {
     description = "Parser combinators for Idris";
     homepage = https://github.com/ziman/lightyear;
diff --git a/pkgs/development/idris-modules/specdris.nix b/pkgs/development/idris-modules/specdris.nix
index e6ca49aa489..e20af375237 100644
--- a/pkgs/development/idris-modules/specdris.nix
+++ b/pkgs/development/idris-modules/specdris.nix
@@ -11,7 +11,8 @@ let
   date = "2017-11-11";
 in
 build-idris-package {
-  name = "specdris-${date}";
+  name = "specdris";
+  version = date;
 
   src = fetchgit {
     url = "https://github.com/pheymann/specdris";
@@ -19,21 +20,10 @@ build-idris-package {
     sha256 = "4813c4be1d4c3dd1dad35964b085f83cf9fb44b16824257c72b468d4bafd0e4f";
   };
 
-  propagatedBuildInputs = [ prelude base effects ];
+  idrisDeps = [ prelude base effects idris ];
 
-  buildPhase = ''
-    ${idris}/bin/idris --build specdris.ipkg
-  '';
-
-  checkPhase = ''
-      cd test/
-      ${idris}/bin/idris --testpkg test.ipkg
-      cd ../
-    '';
-
-  installPhase = ''
-    ${idris}/bin/idris --install specdris.ipkg --ibcsubdir $IBCSUBDIR
-  '';
+  # The tests attribute is very strange as the tests are a different ipkg
+  doCheck = false;
 
   meta = {
     description = "A testing library for Idris";
diff --git a/pkgs/development/idris-modules/with-packages.nix b/pkgs/development/idris-modules/with-packages.nix
index d4638670f69..1631555eee4 100644
--- a/pkgs/development/idris-modules/with-packages.nix
+++ b/pkgs/development/idris-modules/with-packages.nix
@@ -1,46 +1,20 @@
 # Build a version of idris with a set of packages visible
 # packages: The packages visible to idris
-{ stdenv, idris }: packages: stdenv.mkDerivation {
-  inherit (idris) name;
+{ stdenv, idris, symlinkJoin, makeWrapper }: packages:
 
-  buildInputs = packages;
+let paths = stdenv.lib.closePropagation packages;
+in
+symlinkJoin {
 
-  preHook = ''
-    mkdir -p $out/lib/${idris.name}
+  name = idris.name + "-with-packages";
 
-    installIdrisLib () {
-      if [ -d $1/lib/${idris.name} ]; then
-        ln -fsv $1/lib/${idris.name}/* $out/lib/${idris.name}
-      fi
-    }
+  paths = paths ++ [idris] ;
 
-    envHostTargetHooks+=(installIdrisLib)
-  '';
+  buildInputs = [ makeWrapper ];
 
-  unpackPhase = ''
-    cat >idris.c <<EOF
-    #include <stdlib.h>
-    #include <unistd.h>
-    #include <stdio.h>
+  postBuild = ''
+    wrapProgram $out/bin/idris \
+      --set IDRIS_LIBRARY_PATH $out/libs
+      '';
 
-    int main (int argc, char ** argv) {
-      /* idris currently only supports a single library path, so respect it if the user set it */
-      setenv("IDRIS_LIBRARY_PATH", "$out/lib/${idris.name}", 0);
-      execv("${idris}/bin/idris", argv);
-      perror("executing ${idris}/bin/idris");
-      return 127;
-    }
-    EOF
-  '';
-
-  buildPhase = ''
-    $CC -O3 -o idris idris.c
-  '';
-
-  installPhase = ''
-    mkdir -p $out/bin
-    mv idris $out/bin
-  '';
-
-  stripAllList = [ "bin" ];
 }
diff --git a/pkgs/development/idris-modules/wl-pprint.nix b/pkgs/development/idris-modules/wl-pprint.nix
index 12e9b28d81c..7e6d77a19a2 100644
--- a/pkgs/development/idris-modules/wl-pprint.nix
+++ b/pkgs/development/idris-modules/wl-pprint.nix
@@ -6,7 +6,8 @@
 , idris
 }:
 build-idris-package {
-  name = "wl-pprint-2016-09-28";
+  pkName = "wl-pprint";
+  version = "2016-09-28";
 
   src = fetchFromGitHub {
     owner = "shayan-najd";
@@ -19,7 +20,7 @@ build-idris-package {
   # updating this package again.
   doCheck = false;
 
-  propagatedBuildInputs = [ prelude base ];
+  idrisDeps = [ prelude base ];
 
   meta = {
     description = "Wadler-Leijen pretty-printing library";