From 8d55538f973813c8db45e9434bc7f742290a1fd0 Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Sat, 3 Feb 2018 10:12:43 +0000 Subject: [PATCH 1/2] Revert "idris: Move library setup to the setup hook." This reverts commit 69d4adee1f8b6278a19708a9051f3290f8f13e04. --- .../idris-modules/build-idris-package.nix | 27 ++++++++++++++++--- .../idris-modules/idris-wrapper.nix | 3 --- pkgs/development/idris-modules/setup-hook.sh | 16 ----------- 3 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 pkgs/development/idris-modules/setup-hook.sh diff --git a/pkgs/development/idris-modules/build-idris-package.nix b/pkgs/development/idris-modules/build-idris-package.nix index 0048634f5b4..66eddd0e360 100644 --- a/pkgs/development/idris-modules/build-idris-package.nix +++ b/pkgs/development/idris-modules/build-idris-package.nix @@ -3,21 +3,40 @@ # 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 + ''; + buildPhase = '' - idris --build *.ipkg + ${idris}/bin/idris --build *.ipkg ''; doCheck = true; checkPhase = '' if grep -q test *.ipkg; then - idris --testpkg *.ipkg + ${idris}/bin/idris --testpkg *.ipkg fi ''; installPhase = '' - idris --install *.ipkg --ibcsubdir $IBCSUBDIR + ${idris}/bin/idris --install *.ipkg --ibcsubdir $IBCSUBDIR ''; - buildInputs = [ gmp idris ]; + buildInputs = [ gmp ]; } // args) diff --git a/pkgs/development/idris-modules/idris-wrapper.nix b/pkgs/development/idris-modules/idris-wrapper.nix index 155098a4625..fcd02c4da24 100644 --- a/pkgs/development/idris-modules/idris-wrapper.nix +++ b/pkgs/development/idris-modules/idris-wrapper.nix @@ -10,8 +10,5 @@ symlinkJoin { wrapProgram $out/bin/idris \ --suffix PATH : ${ stdenv.lib.makeBinPath path } \ --suffix LIBRARY_PATH : ${stdenv.lib.makeLibraryPath lib} - - mkdir -p $out/nix-support - substituteAll ${./setup-hook.sh} $out/nix-support/setup-hook ''; } diff --git a/pkgs/development/idris-modules/setup-hook.sh b/pkgs/development/idris-modules/setup-hook.sh deleted file mode 100644 index 30a487ea80d..00000000000 --- a/pkgs/development/idris-modules/setup-hook.sh +++ /dev/null @@ -1,16 +0,0 @@ -# Library import path -export IDRIS_LIBRARY_PATH=$PWD/idris-libs -mkdir -p $IDRIS_LIBRARY_PATH - -# Library install path -export IBCSUBDIR=$out/lib/@name@ -mkdir -p $IBCSUBDIR - -addIdrisLibs () { - if [ -d $1/lib/@name@ ]; then - ln -sv $1/lib/@name@/* $IDRIS_LIBRARY_PATH - fi -} - -# All run-time deps -addEnvHooks 1 addIdrisLibs From 947e7d80b41d9dea1739c23bf512f26d1c30703b Mon Sep 17 00:00:00 2001 From: Matthew Pickering Date: Mon, 6 Nov 2017 18:18:59 +0000 Subject: [PATCH 2/2] 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. --- .../idris-modules/build-builtin-package.nix | 12 ++--- .../idris-modules/build-idris-package.nix | 54 ++++++++++--------- pkgs/development/idris-modules/default.nix | 31 ++++++++--- pkgs/development/idris-modules/httpclient.nix | 14 +++-- pkgs/development/idris-modules/lightyear.nix | 9 ++-- pkgs/development/idris-modules/specdris.nix | 20 ++----- .../idris-modules/with-packages.nix | 48 ++++------------- pkgs/development/idris-modules/wl-pprint.nix | 5 +- 8 files changed, 90 insertions(+), 103 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 +{ stdenv, idrisPackages, gmp }: + { idrisDeps ? [] + , name + , version + , src + , meta + , extraBuildInputs ? [] + , postUnpack ? "" + , doCheck ? true + }: +let + idris-with-packages = idrisPackages.with-packages idrisDeps; +in +stdenv.mkDerivation ({ - # Library install path - export IBCSUBDIR=$out/lib/${idris.name} - mkdir -p $IBCSUBDIR + name = "${name}-${version}"; - addIdrisLibs () { - if [ -d $1/lib/${idris.name} ]; then - ln -sv $1/lib/${idris.name}/* $IDRIS_LIBRARY_PATH - fi - } + inherit postUnpack src doCheck meta; - # All run-time deps - addEnvHooks 0 addIdrisLibs + + # 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 < - #include - #include + 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";