From 205b0f2c5e8216827126ddb73fd25c96d39d4b29 Mon Sep 17 00:00:00 2001
From: wchresta <34962284+wchresta@users.noreply.github.com>
Date: Sat, 8 Jan 2022 22:12:04 +0100
Subject: [PATCH] Idris2: Refactor default.nix
We take the idris2 projects version of the derivation. Originally,
Idris2 did not maintain their own nix derivation, so we created our
own. Now they maintain their own derivation, so we should try to
keep ours as close to theirs.
This change comes with the following differences:
* support files are in its own output, instead of packaged with idris2
- This makes it necessary to provide --package for contrib and network
!!! This is a breaking change !!!
* IDIRS2_PREFIX is set to ~/.idris2 instead of pointing to nix-store
- This makes --install work as expected for the user
* Properly set IDRIS2_PACKAGE_PATH
* non-linux platform uses chez-racket instead of chez
---
.../from_md/release-notes/rl-2205.section.xml | 9 +++
.../manual/release-notes/rl-2205.section.md | 2 +
pkgs/development/compilers/idris2/default.nix | 67 ++++++++++---------
pkgs/development/compilers/idris2/tests.nix | 1 +
4 files changed, 46 insertions(+), 33 deletions(-)
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index 67c5a13421b..c49cf223383 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -252,6 +252,15 @@
set autoSubUidGidRange = true.
+
+
+ idris2 now requires
+ --package when using packages
+ contrib and network,
+ while previously these idris2 packages were automatically
+ loaded.
+
+
services.thelounge.private was removed in
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index 35316a28319..4903774ad6e 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -83,6 +83,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- Normal users (with `isNormalUser = true`) which have non-empty `subUidRanges` or `subGidRanges` set no longer have additional implicit ranges allocated. To enable automatic allocation back set `autoSubUidGidRange = true`.
+- `idris2` now requires `--package` when using packages `contrib` and `network`, while previously these idris2 packages were automatically loaded.
+
- `services.thelounge.private` was removed in favor of `services.thelounge.public`, to follow with upstream changes.
## Other Notable Changes {#sec-release-22.05-notable-changes}
diff --git a/pkgs/development/compilers/idris2/default.nix b/pkgs/development/compilers/idris2/default.nix
index 4bf8f7e4af6..9c7a9e53a2e 100644
--- a/pkgs/development/compilers/idris2/default.nix
+++ b/pkgs/development/compilers/idris2/default.nix
@@ -1,18 +1,27 @@
-{ lib
-, stdenv
+# Almost 1:1 copy of idris2's nix/platform.nix. Some work done in their flake.nix
+# we do here instead.
+{ stdenv
+, lib
+, chez
+, chez-racket
+, clang
+, gmp
, fetchFromGitHub
, makeWrapper
-, clang
-, chez
-, gmp
+, gambit
+, nodejs
, zsh
, callPackage
}:
# NOTICE: An `idris2WithPackages` is available at: https://github.com/claymager/idris2-pkgs
+let
+ # Taken from Idris2/idris2/flake.nix. Check if the idris2 project does it this
+ # way, still, every now and then.
+ platformChez = if stdenv.system == "x86_64-linux" then chez else chez-racket;
# Uses scheme to bootstrap the build of idris2
-stdenv.mkDerivation rec {
+in stdenv.mkDerivation rec {
pname = "idris2";
version = "0.5.1";
@@ -23,14 +32,10 @@ stdenv.mkDerivation rec {
sha256 = "sha256-6CTn8o5geWSesXO7vTrrV/2EOQ3f+nPQ2M5cem13ZSY=";
};
- # We do not add any propagatedNativeBuildInputs because we do not want the
- # executables idris2 produces to depend on the nix-store. As such, it is left
- # to the user to guarantee chez (or any other codgen dependency) is available
- # in the path during compilation of programs with idris2.
strictDeps = true;
- nativeBuildInputs = [ makeWrapper clang chez ]
+ nativeBuildInputs = [ makeWrapper clang platformChez ]
++ lib.optional stdenv.isDarwin [ zsh ];
- buildInputs = [ gmp ];
+ buildInputs = [ platformChez gmp ];
prePatch = ''
patchShebangs --build tests
@@ -43,44 +48,40 @@ stdenv.mkDerivation rec {
buildFlags = [ "bootstrap" "SCHEME=scheme" ];
checkTarget = "test";
+ checkInputs = [ gambit nodejs ]; # racket ];
+ checkFlags = [ "INTERACTIVE=" ];
# TODO: Move this into its own derivation, such that this can be changed
# without having to recompile idris2 every time.
postInstall = let
- includedLibs = [ "base" "contrib" "network" "prelude" ];
name = "${pname}-${version}";
- packagePaths =
- builtins.map (l: "$out/${name}/${l}-${version}") includedLibs;
- additionalIdris2Paths = builtins.concatStringsSep ":" packagePaths;
+ globalLibraries = [
+ "\\$HOME/.nix-profile/lib/${name}"
+ "/run/current-system/sw/lib/${name}"
+ "$out/${name}"
+ ];
+ globalLibrariesPath = builtins.concatStringsSep ":" globalLibraries;
in ''
# Remove existing idris2 wrapper that sets incorrect LD_LIBRARY_PATH
rm $out/bin/idris2
- # Move actual idris2 binary
+ # The only thing we need from idris2_app is the actual binary
mv $out/bin/idris2_app/idris2.so $out/bin/idris2
-
- # After moving the binary, there is nothing left in idris2_app that isn't
- # either contained in lib/ or is useless to us.
rm $out/bin/idris2_app/*
rmdir $out/bin/idris2_app
-
# idris2 needs to find scheme at runtime to compile
- # idris2 installs packages with --install into the path given by PREFIX.
- # Since PREFIX is in nix-store, it is immutable so --install does not work.
- # If the user redefines PREFIX to be able to install packages, idris2 will
- # not find the libraries and packages since all paths are relative to
- # PREFIX by default.
- # We explicitly make all paths to point to nix-store, such that they are
- # independent of what IDRIS2_PREFIX is. This allows the user to redefine
- # IDRIS2_PREFIX and use --install as expected.
+ # idris2 installs packages with --install into the path given by
+ # IDRIS2_PREFIX. We set that to a default of ~/.idris2, to mirror the
+ # behaviour of the standard Makefile install.
# TODO: Make support libraries their own derivation such that
# overriding LD_LIBRARY_PATH is unnecessary
- # TODO: Maybe set IDRIS2_PREFIX to the users home directory
wrapProgram "$out/bin/idris2" \
- --set-default CHEZ "${chez}/bin/scheme" \
+ --set-default CHEZ "${platformChez}/bin/scheme" \
+ --run 'export IDRIS2_PREFIX=''${IDRIS2_PREFIX-"$HOME/.idris2"}' \
--suffix IDRIS2_LIBS ':' "$out/${name}/lib" \
--suffix IDRIS2_DATA ':' "$out/${name}/support" \
- --suffix IDRIS2_PATH ':' "${additionalIdris2Paths}" \
- --suffix ${if stdenv.isDarwin then "DYLD_LIBRARY_PATH" else "LD_LIBRARY_PATH"} ':' "$out/${name}/lib"
+ --suffix IDRIS2_PACKAGE_PATH ':' "${globalLibrariesPath}" \
+ --suffix DYLD_LIBRARY_PATH ':' "$out/${name}/lib" \
+ --suffix LD_LIBRARY_PATH ':' "$out/${name}/lib"
'';
# Run package tests
diff --git a/pkgs/development/compilers/idris2/tests.nix b/pkgs/development/compilers/idris2/tests.nix
index 1e84ca6b77a..a8d48c26ca6 100644
--- a/pkgs/development/compilers/idris2/tests.nix
+++ b/pkgs/development/compilers/idris2/tests.nix
@@ -50,6 +50,7 @@ in {
# Data.Vect.Sort is available via --package contrib
use-contrib = testCompileAndRun {
testName = "use-contrib";
+ packages = [ "contrib" ];
code = ''
module Main