diff options
author | Kasper Gałkowski <k@galkowski.xyz> | 2023-03-10 23:13:53 +0100 |
---|---|---|
committer | Kasper Gałkowski <k@galkowski.xyz> | 2023-03-11 15:11:38 +0100 |
commit | 84eea85ad99ac2dd4c30d22dc32004888ea73b03 (patch) | |
tree | 0f77951c06b0cb94ef8a7e7d6d0dc1a5fecd2592 /pkgs/development/lisp-modules | |
parent | 653ba458347e33ce31fce1c7402678bcdb5bed87 (diff) | |
download | nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar.gz nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar.bz2 nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar.lz nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar.xz nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.tar.zst nixpkgs-84eea85ad99ac2dd4c30d22dc32004888ea73b03.zip |
lisp-modules: use wrapLisp to wrap Lisps
The previous approach of manually repeating a complex pattern inside Common Lisp implementation package declarations was fragile and hard to change. After reading python and lua modules code in Nixpkgs, I was able to come up with something better. The function `wrapLisp` doesn't need to be inside package declarations so all the code for wrapping Lisps can be in `all-packages.nix`. This works by wrapping the `override` function created from `mkDerivation` to accept a new argument `packageOverrides`. One problem with this is that `override.__functionArgs` disappears. But one can look at the source code of a package to discover what can be overridden.
Diffstat (limited to 'pkgs/development/lisp-modules')
-rw-r--r-- | pkgs/development/lisp-modules/import/database/sqlite.lisp | 2 | ||||
-rw-r--r-- | pkgs/development/lisp-modules/nix-cl.nix | 27 |
2 files changed, 23 insertions, 6 deletions
diff --git a/pkgs/development/lisp-modules/import/database/sqlite.lisp b/pkgs/development/lisp-modules/import/database/sqlite.lisp index c25c5c7d47c..fb502e42452 100644 --- a/pkgs/development/lisp-modules/import/database/sqlite.lisp +++ b/pkgs/development/lisp-modules/import/database/sqlite.lisp @@ -170,4 +170,4 @@ in lib.makeScope pkgs.newScope (self: {") ,@(when (or (find #\/ name) (find name +broken-packages+ :test #'string=)) '(("meta" (:attrs ("broken" (:symbol "true"))))))))))))) - (format f "~%})")))) + (format f "~%})~%")))) diff --git a/pkgs/development/lisp-modules/nix-cl.nix b/pkgs/development/lisp-modules/nix-cl.nix index 208ca7559d8..7e671e7cc63 100644 --- a/pkgs/development/lisp-modules/nix-cl.nix +++ b/pkgs/development/lisp-modules/nix-cl.nix @@ -286,8 +286,25 @@ let ''; }); -in { - inherit commonLispPackagesFor; - inherit lispWithPackages; - inherit build-asdf-system; -} + wrapLisp = { pkg, faslExt, program ? pkg.pname, flags ? [], asdf ? pkgs.asdf_3_3 }: + let + spec = { inherit pkg faslExt program flags asdf; }; + pkgs = commonLispPackagesFor spec; + withPackages = lispWithPackages pkgs; + override = + { packageOverrides ? (self: super: {}) , ... } @ attrs: + let + pkg' = spec.pkg.override attrs; + spec' = spec // { pkg = pkg'; }; + pkgs = (commonLispPackagesFor spec').overrideScope' packageOverrides; + withPackages = lispWithPackages pkgs; + in pkg' // { + inherit pkgs withPackages override; + buildASDFSystem = args: build-asdf-system (args // spec'); + }; + in pkg // { + inherit pkgs withPackages override; + buildASDFSystem = args: build-asdf-system (args // spec); + }; + +in wrapLisp |