Merge pull request #218870 from Uthar/lisp2
lisp-modules: replace with an implementation based on github:uthar/nix-cl
This commit is contained in:
commit
8ce248a734
@ -25,6 +25,7 @@
|
||||
<xi:include href="ios.section.xml" />
|
||||
<xi:include href="java.section.xml" />
|
||||
<xi:include href="javascript.section.xml" />
|
||||
<xi:include href="lisp.section.xml" />
|
||||
<xi:include href="lua.section.xml" />
|
||||
<xi:include href="maven.section.xml" />
|
||||
<xi:include href="nim.section.xml" />
|
||||
|
304
doc/languages-frameworks/lisp.section.md
Normal file
304
doc/languages-frameworks/lisp.section.md
Normal file
@ -0,0 +1,304 @@
|
||||
# lisp-modules {#lisp}
|
||||
|
||||
This document describes the Nixpkgs infrastructure for building Common Lisp
|
||||
libraries that use ASDF (Another System Definition Facility). It lives in
|
||||
`pkgs/development/lisp-modules`.
|
||||
|
||||
## Overview {#lisp-overview}
|
||||
|
||||
The main entry point of the API are the Common Lisp implementation packages
|
||||
(e.g. `abcl`, `ccl`, `clasp-common-lisp`, `clisp` `ecl`, `sbcl`)
|
||||
themselves. They have the `pkgs` and `withPackages` attributes, which can be
|
||||
used to discover available packages and to build wrappers, respectively.
|
||||
|
||||
The `pkgs` attribute set contains packages that were automatically imported from
|
||||
Quicklisp, and any other manually defined ones. Not every package works for all
|
||||
the CL implementations (e.g. `nyxt` only makes sense for `sbcl`).
|
||||
|
||||
The `withPackages` function is of primary utility. It is used to build runnable
|
||||
wrappers, with a pinned and pre-built ASDF FASL available in the `ASDF`
|
||||
environment variable, and `CL_SOURCE_REGISTRY`/`ASDF_OUTPUT_TRANSLATIONS`
|
||||
configured to find the desired systems on runtime.
|
||||
|
||||
With a few exceptions, the primary thing that the infrastructure does is to run
|
||||
`asdf:load-system` for each system specified in the `systems` argument to
|
||||
`build-asdf-system`, and save the FASLs to the Nix store. Then, it makes these
|
||||
FASLs available to wrappers. Any other use-cases, such as producing SBCL
|
||||
executables with `sb-ext:save-lisp-and-die`, are achieved via overriding the
|
||||
`buildPhase` etc.
|
||||
|
||||
In addition, Lisps have the `withOverrides` function, which can be used to
|
||||
substitute any package in the scope of their `pkgs`. This will be useful
|
||||
together with `overrideLispAttrs` when dealing with slashy ASDF systems, because
|
||||
they should stay in the main package and be build by specifying the `systems`
|
||||
argument to `build-asdf-system`.
|
||||
|
||||
## The 90% use case example {#lisp-use-case-example}
|
||||
|
||||
The most common way to use the library is to run ad-hoc wrappers like this:
|
||||
|
||||
`nix-shell -p 'sbcl.withPackages (ps: with ps; [ alexandria ])'`
|
||||
|
||||
Then, in a shell:
|
||||
|
||||
```
|
||||
$ result/bin/sbcl
|
||||
* (load (sb-ext:posix-getenv "ASDF"))
|
||||
* (asdf:load-system 'alexandria)
|
||||
```
|
||||
|
||||
Also one can create a `pkgs.mkShell` environment in `shell.nix`/`flake.nix`:
|
||||
|
||||
```
|
||||
let
|
||||
sbcl' = sbcl.withPackages (ps: [ ps.alexandria ]);
|
||||
in mkShell {
|
||||
buildInputs = [ sbcl' ];
|
||||
}
|
||||
```
|
||||
|
||||
Such a Lisp can be now used e.g. to compile your sources:
|
||||
|
||||
```
|
||||
buildPhase = ''
|
||||
${sbcl'}/bin/sbcl --load my-build-file.lisp
|
||||
''
|
||||
```
|
||||
|
||||
## Importing packages from Quicklisp {#lisp-importing-packages-from-quicklisp}
|
||||
|
||||
The library is able to very quickly import all the packages distributed by
|
||||
Quicklisp by parsing its `releases.txt` and `systems.txt` files. These files are
|
||||
available from [http://beta.quicklisp.org/dist/quicklisp.txt].
|
||||
|
||||
The import process is implemented in the `import` directory as Common Lisp
|
||||
functions in the `org.lispbuilds.nix` ASDF system. To run the script, one can
|
||||
execute `ql-import.lisp`:
|
||||
|
||||
```
|
||||
nix-shell --run 'sbcl --script ql-import.lisp'
|
||||
```
|
||||
|
||||
The script will:
|
||||
|
||||
1. Download the latest Quicklisp `systems.txt` and `releases.txt` files
|
||||
2. Generate an SQLite database of all QL systems in `packages.sqlite`
|
||||
3. Generate an `imported.nix` file from the database
|
||||
|
||||
The maintainer's job there is to:
|
||||
|
||||
1. Re-run the `ql-import.lisp` script
|
||||
2. Add missing native dependencies in `ql.nix`
|
||||
3. For packages that still don't build, package them manually in `packages.nix`
|
||||
|
||||
Also, the `imported.nix` file **must not be edited manually**! It should only be
|
||||
generated as described in this section.
|
||||
|
||||
### Adding native dependencies {#lisp-quicklisp-adding-native-dependencies}
|
||||
|
||||
The Quicklisp files contain ASDF dependency data, but don't include native
|
||||
library (CFFI) dependencies, and, in the case of ABCL, Java dependencies.
|
||||
|
||||
The `ql.nix` file contains a long list of overrides, where these dependencies
|
||||
can be added.
|
||||
|
||||
Packages defined in `packages.nix` contain these dependencies naturally.
|
||||
|
||||
### Trusting `systems.txt` and `releases.txt` {#lisp-quicklisp-trusting}
|
||||
|
||||
The previous implementation of `lisp-modules` didn't fully trust the Quicklisp
|
||||
data, because there were times where the dependencies specified were not
|
||||
complete, and caused broken builds. It instead used a `nix-shell` environment to
|
||||
discover real dependencies by using the ASDF APIs.
|
||||
|
||||
The current implementation has chosen to trust this data, because it's faster to
|
||||
parse a text file than to build each system to generate its Nix file, and
|
||||
because that way packages can be mass-imported. Because of that, there may come
|
||||
a day where some packages will break, due to bugs in Quicklisp. In that case,
|
||||
the fix could be a manual override in `packages.nix` and `ql.nix`.
|
||||
|
||||
A known fact is that Quicklisp doesn't include dependencies on slashy systems in
|
||||
its data. This is an example of a situation where such fixes were used, e.g. to
|
||||
replace the `systems` attribute of the affected packages. (See the definition of
|
||||
`iolib`).
|
||||
|
||||
### Quirks {#lisp-quicklisp-quirks}
|
||||
|
||||
During Quicklisp import:
|
||||
|
||||
- `+` in names are converted to `_plus{_,}`: `cl+ssl`->`cl_plus_ssl`, `alexandria+`->`alexandria_plus`
|
||||
- `.` to `_dot_`: `iolib.base`->`iolib_dot_base`
|
||||
- names starting with a number have a `_` prepended (`3d-vectors`->`_3d-vectors`)
|
||||
- `_` in names is converted to `__` for reversibility
|
||||
|
||||
|
||||
## Defining packages manually inside Nixpkgs {#lisp-defining-packages-inside}
|
||||
|
||||
New packages, that for some reason are not in Quicklisp, and so cannot be
|
||||
auto-imported, can be written in the `packages.nix` file.
|
||||
|
||||
In that file, use the `build-asdf-system` function, which is a wrapper around
|
||||
`mkDerivation` for building ASDF systems. Various other hacks are present, such
|
||||
as `build-with-compile-into-pwd` for systems which create files during
|
||||
compilation.
|
||||
|
||||
The `build-asdf-system` function is documented with comments in
|
||||
`nix-cl.nix`. Also, `packages.nix` is full of examples of how to use it.
|
||||
|
||||
## Defining packages manually outside Nixpkgs {#lisp-defining-packages-outside}
|
||||
|
||||
Lisp derivations (`abcl`, `sbcl` etc.) also export the `buildASDFSystem`
|
||||
function, which is the same as `build-asdf-system`, except for the `lisp`
|
||||
argument which is set to the given CL implementation.
|
||||
|
||||
It can be used to define packages outside Nixpkgs, and, for example, add them
|
||||
into the package scope with `withOverrides` which will be discussed later on.
|
||||
|
||||
### Including an external package in scope {#lisp-including-external-pkg-in-scope}
|
||||
|
||||
A package defined outside Nixpkgs using `buildASDFSystem` can be woven into the
|
||||
Nixpkgs-provided scope like this:
|
||||
|
||||
```
|
||||
let
|
||||
alexandria = sbcl.buildASDFSystem rec {
|
||||
pname = "alexandria";
|
||||
version = "1.4";
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.common-lisp.net";
|
||||
owner = "alexandria";
|
||||
repo = "alexandria";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-1Hzxt65dZvgOFIljjjlSGgKYkj+YBLwJCACi5DZsKmQ=";
|
||||
};
|
||||
};
|
||||
sbcl' = sbcl.withOverrides (self: super: {
|
||||
inherit alexandria;
|
||||
});
|
||||
in sbcl'.pkgs.alexandria
|
||||
```
|
||||
|
||||
## Overriding package attributes {#lisp-overriding-package-attributes}
|
||||
|
||||
Packages export the `overrideLispAttrs` function, which can be used to build a
|
||||
new package with different parameters.
|
||||
|
||||
Example of overriding `alexandria`:
|
||||
|
||||
```
|
||||
sbcl.pkgs.alexandria.overrideLispAttrs (oldAttrs: rec {
|
||||
version = "1.4";
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.common-lisp.net";
|
||||
owner = "alexandria";
|
||||
repo = "alexandria";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-1Hzxt65dZvgOFIljjjlSGgKYkj+YBLwJCACi5DZsKmQ=";
|
||||
};
|
||||
})
|
||||
```
|
||||
|
||||
## Overriding packages in scope {#lisp-overriding-packages-in-scope}
|
||||
|
||||
Packages can be woven into a new scope by using `withOverrides`:
|
||||
|
||||
```
|
||||
let
|
||||
sbcl' = sbcl.withOverrides (self: super: {
|
||||
alexandria = super.alexandria.overrideLispAttrs (oldAttrs: rec {
|
||||
pname = "alexandria";
|
||||
version = "1.4";
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.common-lisp.net";
|
||||
owner = "alexandria";
|
||||
repo = "alexandria";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-1Hzxt65dZvgOFIljjjlSGgKYkj+YBLwJCACi5DZsKmQ=";
|
||||
};
|
||||
});
|
||||
});
|
||||
in builtins.elemAt sbcl'.pkgs.bordeaux-threads.lispLibs 0
|
||||
```
|
||||
|
||||
### Dealing with slashy systems {#lisp-dealing-with-slashy-systems}
|
||||
|
||||
Slashy (secondary) systems should not exist in their own packages! Instead, they
|
||||
should be included in the parent package as an extra entry in the `systems`
|
||||
argument to the `build-asdf-system`/`buildASDFSystem` functions.
|
||||
|
||||
The reason is that ASDF searches for a secondary system in the `.asd` of the
|
||||
parent package. Thus, having them separate would cause either one of them not to
|
||||
load cleanly, because one will contains FASLs of itself but not the other, and
|
||||
vice versa.
|
||||
|
||||
To package slashy systems, use `overrideLispAttrs`, like so:
|
||||
|
||||
```
|
||||
ecl.pkgs.alexandria.overrideLispAttrs (oldAttrs: {
|
||||
systems = oldAttrs.systems ++ [ "alexandria/tests" ];
|
||||
lispLibs = oldAttrs.lispLibs ++ [ ecl.pkgs.rt ];
|
||||
})
|
||||
```
|
||||
|
||||
See the respective section on using `withOverrides` for how to weave it back
|
||||
into `ecl.pkgs`.
|
||||
|
||||
Note that sometimes the slashy systems might not only have more dependencies
|
||||
than the main one, but create a circular dependency between `.asd`
|
||||
files. Unfortunately, in this case an adhoc solution becomes necessary.
|
||||
|
||||
## Building Wrappers {#lisp-building-wrappers}
|
||||
|
||||
Wrappers can be built using the `withPackages` function of Common Lisp
|
||||
implementations (`abcl`, `ecl`, `sbcl` etc.):
|
||||
|
||||
```
|
||||
sbcl.withPackages (ps: [ ps.alexandria ps.bordeaux-threads ])
|
||||
```
|
||||
|
||||
Such a wrapper can then be executed like this:
|
||||
|
||||
```
|
||||
result/bin/sbcl
|
||||
```
|
||||
|
||||
### Loading ASDF {#lisp-loading-asdf}
|
||||
|
||||
For best results, avoid calling `(require 'asdf)` When using the
|
||||
library-generated wrappers.
|
||||
|
||||
Use `(load (ext:getenv "ASDF"))` instead, supplying your implementation's way of
|
||||
getting an environment variable for `ext:getenv`. This will load the
|
||||
(pre-compiled to FASL) Nixpkgs-provided version of ASDF.
|
||||
|
||||
### Loading systems {#lisp-loading-systems}
|
||||
|
||||
There, you can simply use `asdf:load-system`. This works by setting the right
|
||||
values for the `CL_SOURCE_REGISTRY`/`ASDF_OUTPUT_TRANSLATIONS` environment
|
||||
variables, so that systems are found in the Nix store and pre-compiled FASLs are
|
||||
loaded.
|
||||
|
||||
## Adding a new Lisp {#lisp-adding-a-new-lisp}
|
||||
|
||||
The function `wrapLisp` is used to wrap Common Lisp implementations. It adds the
|
||||
`pkgs`, `withPackages`, `withOverrides` and `buildASDFSystem` attributes to the
|
||||
derivation.
|
||||
|
||||
`wrapLisp` takes these arguments:
|
||||
|
||||
- `pkg`: the Lisp package
|
||||
- `faslExt`: Implementation-specific extension for FASL files
|
||||
- `program`: The name of executable file in `${pkg}/bin/` (Default: `pkg.pname`)
|
||||
- `flags`: A list of flags to always pass to `program` (Default: `[]`)
|
||||
- `asdf`: The ASDF version to use (Default: `pkgs.asdf_3_3`)
|
||||
- `packageOverrides`: Package overrides config (Default: `(self: super: {})`)
|
||||
|
||||
This example wraps CLISP:
|
||||
|
||||
```
|
||||
wrapLisp {
|
||||
pkg = clisp;
|
||||
faslExt = "fas";
|
||||
flags = ["-E" "UTF8"];
|
||||
}
|
||||
```
|
@ -367,6 +367,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- `boot.initrd.luks.device.<name>` has a new `tryEmptyPassphrase` option, this is useful for OEM's who need to install an encrypted disk with a future settable passphrase
|
||||
|
||||
- Lisp gained a [manual section](https://nixos.org/manual/nixpkgs/stable/#lisp), documenting a new and backwards incompatible interface. The previous interface will be removed in a future release.
|
||||
|
||||
## Detailed migration information {#sec-release-23.05-migration}
|
||||
|
||||
### Pipewire configuration overrides {#sec-release-23.05-migration-pipewire}
|
||||
|
@ -15,10 +15,10 @@ in
|
||||
services.xserver.windowManager.session = singleton {
|
||||
name = "stumpwm";
|
||||
start = ''
|
||||
${pkgs.lispPackages.stumpwm}/bin/stumpwm &
|
||||
${pkgs.sbclPackages.stumpwm}/bin/stumpwm &
|
||||
waitPID=$!
|
||||
'';
|
||||
};
|
||||
environment.systemPackages = [ pkgs.lispPackages.stumpwm ];
|
||||
environment.systemPackages = [ pkgs.sbclPackages.stumpwm ];
|
||||
};
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenv, lib, lispPackages
|
||||
{ stdenv, lib, sbclPackages
|
||||
, makeWrapper, wrapGAppsHook, gst_all_1
|
||||
, glib, gdk-pixbuf, cairo
|
||||
, mailcap, pango, gtk3
|
||||
@ -8,9 +8,9 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "nyxt";
|
||||
inherit (lispPackages.nyxt.meta) version;
|
||||
inherit (sbclPackages.nyxt) version;
|
||||
|
||||
src = lispPackages.nyxt;
|
||||
src = sbclPackages.nyxt;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
|
||||
gstBuildInputs = with gst_all_1; [
|
||||
@ -32,10 +32,10 @@ stdenv.mkDerivation rec {
|
||||
dontWrapGApps = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/applications/
|
||||
sed "s/VERSION/$version/" $src/lib/common-lisp/nyxt/assets/nyxt.desktop > $out/share/applications/nyxt.desktop
|
||||
sed "s/VERSION/$version/" $src/assets/nyxt.desktop > $out/share/applications/nyxt.desktop
|
||||
for i in 16 32 128 256 512; do
|
||||
mkdir -p "$out/share/icons/hicolor/''${i}x''${i}/apps/"
|
||||
cp -f $src/lib/common-lisp/nyxt/assets/nyxt_''${i}x''${i}.png "$out/share/icons/hicolor/''${i}x''${i}/apps/nyxt.png"
|
||||
cp -f $src/assets/nyxt_''${i}x''${i}.png "$out/share/icons/hicolor/''${i}x''${i}/apps/nyxt.png"
|
||||
done
|
||||
|
||||
mkdir -p $out/bin && makeWrapper $src/bin/nyxt $out/bin/nyxt \
|
||||
|
@ -0,0 +1,60 @@
|
||||
diff --git a/repos.sexp b/repos.sexp
|
||||
index 2b2459655..ad346d8e5 100644
|
||||
--- a/repos.sexp
|
||||
+++ b/repos.sexp
|
||||
@@ -7,15 +7,15 @@
|
||||
((:name :ansi-test
|
||||
:repository "https://gitlab.common-lisp.net/yitzchak/ansi-test"
|
||||
:directory "dependencies/ansi-test/"
|
||||
- :branch "add-expected-failures")
|
||||
+ :commit "346cf2eb1133942054df8ce2125ed7e999b6d82b")
|
||||
(:name :cl-bench
|
||||
:repository "https://gitlab.common-lisp.net/ansi-test/cl-bench.git"
|
||||
:directory "dependencies/cl-bench/"
|
||||
- :branch "master")
|
||||
+ :commit "7d184b4ef2a6272f0e3de88f6c243edb20f7071a")
|
||||
(:name :cl-who
|
||||
:repository "https://github.com/edicl/cl-who.git"
|
||||
:directory "dependencies/cl-who/"
|
||||
- :branch "master")
|
||||
+ :commit "07dafe9b351c32326ce20b5804e798f10d4f273d")
|
||||
(:name :quicklisp-client
|
||||
:repository "https://github.com/quicklisp/quicklisp-client.git"
|
||||
:directory "dependencies/quicklisp-client/"
|
||||
@@ -23,15 +23,15 @@
|
||||
(:name :shasht
|
||||
:repository "https://github.com/yitzchak/shasht.git"
|
||||
:directory "dependencies/shasht/"
|
||||
- :branch "master")
|
||||
+ :commit "f38e866990c6b5381a854d63f7ea0227c87c2f6d")
|
||||
(:name :trivial-do
|
||||
:repository "https://github.com/yitzchak/trivial-do.git"
|
||||
:directory "dependencies/trivial-do/"
|
||||
- :branch "master")
|
||||
+ :commit "a19f93227cb80a6bec8846655ebcc7998020bd7e")
|
||||
(:name :trivial-gray-streams
|
||||
:repository "https://github.com/trivial-gray-streams/trivial-gray-streams.git"
|
||||
:directory "dependencies/trivial-gray-streams/"
|
||||
- :branch "master")
|
||||
+ :commit "2b3823edbc78a450db4891fd2b566ca0316a7876")
|
||||
(:name :acclimation
|
||||
:repository "https://github.com/robert-strandh/Acclimation.git"
|
||||
:directory "src/lisp/kernel/contrib/Acclimation/"
|
||||
@@ -128,7 +128,7 @@
|
||||
(:name :lparallel
|
||||
:repository "https://github.com/yitzchak/lparallel.git"
|
||||
:directory "src/lisp/kernel/contrib/lparallel/"
|
||||
- :branch "fix-asdf-feature"
|
||||
+ :commit "9c98bf629328b27a5a3fbb7a637afd1db439c00f"
|
||||
:extension :cando)
|
||||
(:name :parser.common-rules
|
||||
:repository "https://github.com/scymtym/parser.common-rules.git"
|
||||
@@ -152,7 +152,7 @@
|
||||
(:name :trivial-features ; Needed both by the host and eclasp
|
||||
:repository "https://github.com/yitzchak/trivial-features.git"
|
||||
:directory "src/lisp/kernel/contrib/trivial-features/"
|
||||
- :branch "asdf-feature")
|
||||
+ :commit "0008ef4f3376fb76f63c35ecee6573d0d0f98d57")
|
||||
(:name :trivial-garbage
|
||||
:repository "https://github.com/trivial-garbage/trivial-garbage.git"
|
||||
:directory "src/lisp/kernel/contrib/trivial-garbage/"
|
@ -1,129 +1,98 @@
|
||||
{ lib, stdenv, fetchFromGitHub, fetchFromGitLab
|
||||
, llvmPackages
|
||||
, cmake, boehmgc, gmp, zlib, ncurses, boost, libelf
|
||||
, python3, git, sbcl
|
||||
, wafHook
|
||||
}:
|
||||
{ pkgs, lib, fetchFromGitHub, llvmPackages_15 }:
|
||||
|
||||
|
||||
let
|
||||
sicl = fetchFromGitHub {
|
||||
owner = "Bike";
|
||||
repo = "SICL";
|
||||
rev = "78052fb5f02a3814eb7295f3dcac09f21f98702b";
|
||||
sha256 = "0wnmp40310ls6q9gkr5ysfkj2qirq26ljjicnkqifc53mm0ghz4i";
|
||||
};
|
||||
cst = fetchFromGitHub {
|
||||
owner = "robert-strandh";
|
||||
repo = "Concrete-Syntax-Tree";
|
||||
rev = "8d8c5abf8f1690cb2b765241d81c2eb86d60d77e";
|
||||
sha256 = "1rs8a5nbfffdyli126sccd0z1a8h5axp222b4pgwvgfxsb9w7g3s";
|
||||
};
|
||||
c2mop = fetchFromGitHub {
|
||||
owner = "pcostanza";
|
||||
repo = "closer-mop";
|
||||
rev = "d4d1c7aa6aba9b4ac8b7bb78ff4902a52126633f";
|
||||
sha256 = "1amcv0f3vbsq0aqhai7ki5bi367giway1pbfxyc47r7q3hq5hw3c";
|
||||
};
|
||||
acclimation = fetchFromGitHub {
|
||||
owner = "robert-strandh";
|
||||
repo = "Acclimation";
|
||||
rev = "dd15c86b0866fc5d8b474be0da15c58a3c04c45c";
|
||||
sha256 = "0ql224qs3zgflvdhfbca621v3byhhqfb71kzy70bslyczxv1bsh2";
|
||||
};
|
||||
eclector = fetchFromGitHub {
|
||||
owner = "robert-strandh";
|
||||
repo = "Eclector";
|
||||
rev = "287ce817c0478668bd389051d2cc6b26ddc62ec9";
|
||||
sha256 = "0v7mgkq49ddyx5vvsradcp772y5l7cv9xrll3280hyginpm8w6q3";
|
||||
};
|
||||
alexandria = fetchFromGitHub {
|
||||
owner = "clasp-developers";
|
||||
repo = "alexandria";
|
||||
rev = "e5c54bc30b0887c237bde2827036d17315f88737";
|
||||
sha256 = "14h7a9fwimiw9gqxjm2h47d95bfhrm7b81f6si7x8vy18d78fn4g";
|
||||
};
|
||||
mps = fetchFromGitHub {
|
||||
owner = "Ravenbrook";
|
||||
repo = "mps";
|
||||
rev = "b8a05a3846430bc36c8200f24d248c8293801503";
|
||||
sha256 = "1q2xqdw832jrp0w9yhgr8xihria01j4z132ac16lr9ssqznkprv6";
|
||||
};
|
||||
asdf = fetchFromGitLab {
|
||||
domain = "gitlab.common-lisp.net";
|
||||
owner = "asdf";
|
||||
repo = "asdf";
|
||||
rev = "3.3.1.2";
|
||||
sha256 = "0ljr2vc0cb2wrijcyjmp9hcaj2bdhh05ci3zf4f43hdq6i2fgg6g";
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "clasp";
|
||||
version = "0.8.99.20181128";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "drmeister";
|
||||
owner = "clasp-developers";
|
||||
repo = "clasp";
|
||||
rev = "2f2b52ccb750048460562b5987a7eaf7a1aa4445";
|
||||
sha256 = "0ra55vdnk59lygwzlxr5cg16vb9c45fmg59wahaxclwm461w7fwz";
|
||||
fetchSubmodules = true;
|
||||
rev = "2.2.0";
|
||||
hash = "sha256-gvUqUb0dftW1miiBcAPJur0wOunox4y2SUYeeJpR9R4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake python3 git sbcl wafHook ] ++
|
||||
(with llvmPackages; [ llvm clang ]);
|
||||
|
||||
buildInputs = with llvmPackages;
|
||||
(
|
||||
builtins.map (x: lib.overrideDerivation x
|
||||
(x: {NIX_CFLAGS_COMPILE= (x.NIX_CFLAGS_COMPILE or "") + " -frtti"; }))
|
||||
[ llvm clang clang-unwrapped clang ]) ++
|
||||
[
|
||||
gmp zlib ncurses
|
||||
boost boehmgc libelf
|
||||
(boost.override {enableStatic = true; enableShared = false;})
|
||||
(lib.overrideDerivation boehmgc
|
||||
(x: {configureFlags = (x.configureFlags or []) ++ ["--enable-static"];}))
|
||||
reposDirs = [
|
||||
"dependencies"
|
||||
"src/lisp/kernel/contrib"
|
||||
"src/lisp/modules/asdf"
|
||||
"src/mps"
|
||||
"src/bdwgc"
|
||||
"src/libatomic_ops"
|
||||
];
|
||||
|
||||
NIX_CXXSTDLIB_COMPILE = " -frtti ";
|
||||
reposTarball = llvmPackages_15.stdenv.mkDerivation {
|
||||
pname = "clasp-repos";
|
||||
version = "tarball";
|
||||
inherit src;
|
||||
patches = [ ./clasp-pin-repos-commits.patch ];
|
||||
nativeBuildInputs = with pkgs; [
|
||||
sbcl
|
||||
git
|
||||
cacert
|
||||
];
|
||||
buildPhase = ''
|
||||
export SOURCE_DATE_EPOCH=1
|
||||
export ASDF_OUTPUT_TRANSLATIONS=$(pwd):$(pwd)/__fasls
|
||||
sbcl --script koga --help
|
||||
for x in {${lib.concatStringsSep "," reposDirs}}; do
|
||||
find $x -type d -name .git -exec rm -rvf {} \; || true
|
||||
done
|
||||
'';
|
||||
installPhase = ''
|
||||
tar --owner=0 --group=0 --numeric-owner --format=gnu \
|
||||
--sort=name --mtime="@$SOURCE_DATE_EPOCH" \
|
||||
-czf $out ${lib.concatStringsSep " " reposDirs}
|
||||
'';
|
||||
outputHashMode = "flat";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = "sha256-vgwThjn2h3nKnShtKoHgaPdH/FDHv28fLMQvKFEwG6o=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
echo "
|
||||
PREFIX = '$out'
|
||||
" | sed -e 's/^ *//' > wscript.config
|
||||
|
||||
mkdir -p src/lisp/kernel/contrib/sicl
|
||||
mkdir -p src/lisp/kernel/contrib/Concrete-Syntax-Tree
|
||||
mkdir -p src/lisp/kernel/contrib/closer-mop
|
||||
mkdir -p src/lisp/kernel/contrib/Acclimation
|
||||
mkdir -p src/lisp/kernel/contrib/Eclector
|
||||
mkdir -p src/lisp/kernel/contrib/alexandria
|
||||
mkdir -p src/mps
|
||||
mkdir -p src/lisp/modules/asdf
|
||||
|
||||
cp -rfT "${sicl}" src/lisp/kernel/contrib/sicl
|
||||
cp -rfT "${cst}" src/lisp/kernel/contrib/Concrete-Syntax-Tree
|
||||
cp -rfT "${c2mop}" src/lisp/kernel/contrib/closer-mop
|
||||
cp -rfT "${acclimation}" src/lisp/kernel/contrib/Acclimation
|
||||
cp -rfT "${eclector}" src/lisp/kernel/contrib/Eclector
|
||||
cp -rfT "${alexandria}" src/lisp/kernel/contrib/alexandria
|
||||
cp -rfT "${mps}" src/mps
|
||||
cp -rfT "${asdf}" src/lisp/modules/asdf
|
||||
|
||||
chmod -R u+rwX src
|
||||
( cd src/lisp/modules/asdf; make )
|
||||
'';
|
||||
|
||||
buildTargets = "build_cboehm";
|
||||
installTargets = "install_cboehm";
|
||||
|
||||
CLASP_SRC_DONTTOUCH = "true";
|
||||
in llvmPackages_15.stdenv.mkDerivation {
|
||||
pname = "clasp";
|
||||
version = "2.2.0";
|
||||
inherit src;
|
||||
nativeBuildInputs = (with pkgs; [
|
||||
sbcl
|
||||
git
|
||||
pkg-config
|
||||
fmt
|
||||
gmpxx
|
||||
libelf
|
||||
boost
|
||||
libunwind
|
||||
ninja
|
||||
]) ++ (with llvmPackages_15; [
|
||||
llvm
|
||||
libclang
|
||||
]);
|
||||
configurePhase = ''
|
||||
export SOURCE_DATE_EPOCH=1
|
||||
export ASDF_OUTPUT_TRANSLATIONS=$(pwd):$(pwd)/__fasls
|
||||
tar xf ${reposTarball}
|
||||
sbcl --script koga \
|
||||
--skip-sync \
|
||||
--cc=$NIX_CC/bin/cc \
|
||||
--cxx=$NIX_CC/bin/c++ \
|
||||
--reproducible-build \
|
||||
--package-path=/ \
|
||||
--bin-path=$out/bin \
|
||||
--lib-path=$out/lib \
|
||||
--share-path=$out/share
|
||||
'';
|
||||
buildPhase = ''
|
||||
ninja -C build
|
||||
'';
|
||||
installPhase = ''
|
||||
ninja -C build install
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "A Common Lisp implementation based on LLVM with C++ integration";
|
||||
license = lib.licenses.lgpl21Plus ;
|
||||
maintainers = [lib.maintainers.raskin];
|
||||
maintainers = [lib.maintainers.raskin lib.maintainers.uthar];
|
||||
platforms = lib.platforms.linux;
|
||||
# Large, long to build, a private build of clang is needed, a prerelease.
|
||||
hydraPlatforms = [];
|
||||
homepage = "https://github.com/drmeister/clasp";
|
||||
homepage = "https://github.com/clasp-developers/clasp";
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,8 @@ let
|
||||
#
|
||||
# Wrapper around stdenv.mkDerivation for building ASDF systems.
|
||||
#
|
||||
build-asdf-system = makeOverridableLispPackage (
|
||||
build-asdf-system =
|
||||
(makeOverridableLispPackage (
|
||||
{ pname,
|
||||
version,
|
||||
src ? null,
|
||||
@ -256,7 +257,7 @@ let
|
||||
(builtins.concatLists
|
||||
(lib.catAttrs "propagatedBuildInputs"
|
||||
(builtins.concatLists [[args] lispLibs nativeLibs javaLibs])));
|
||||
})));
|
||||
}))));
|
||||
|
||||
# Build the set of lisp packages using `lisp`
|
||||
# These packages are defined manually for one reason or another:
|
38
pkgs/development/lisp-modules-obsolete/asdf/2.26.nix
Normal file
38
pkgs/development/lisp-modules-obsolete/asdf/2.26.nix
Normal file
@ -0,0 +1,38 @@
|
||||
{ lib, stdenv, fetchurl, texinfo, texLive, perl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "asdf";
|
||||
version = "2.26";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://common-lisp.net/project/asdf/archives/asdf-${version}.tar.gz";
|
||||
sha256 = "sha256-tuUuIlZcS+a0izXeJl3Ckp+/PYAWkZ0+Cw7blwkh9+M=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs = [
|
||||
texinfo
|
||||
texLive
|
||||
perl
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
make asdf.lisp
|
||||
mkdir build
|
||||
ln -s ../asdf.lisp build
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p "$out"/lib/common-lisp/asdf/
|
||||
mkdir -p "$out"/share/doc/asdf/
|
||||
cp -r ./* "$out"/lib/common-lisp/asdf/
|
||||
cp -r doc/* "$out"/share/doc/asdf/
|
||||
ln -s "$out"/lib/common-lisp/{asdf/uiop,uiop}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Standard software-system definition library for Common Lisp";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ raskin ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
37
pkgs/development/lisp-modules-obsolete/asdf/3.1.nix
Normal file
37
pkgs/development/lisp-modules-obsolete/asdf/3.1.nix
Normal file
@ -0,0 +1,37 @@
|
||||
{ lib, stdenv, fetchurl, texinfo, texLive, perl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "asdf";
|
||||
version = "3.1.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://common-lisp.net/project/asdf/archives/asdf-${version}.tar.gz";
|
||||
sha256 = "sha256-+P+FLM1mr2KRdj7bfhWq4ync86bJS/uE0Jm/E/e4HL0=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs = [
|
||||
texinfo
|
||||
texLive
|
||||
perl
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
make build/asdf.lisp
|
||||
make -C doc asdf.info asdf.html
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p "$out"/lib/common-lisp/asdf/
|
||||
mkdir -p "$out"/share/doc/asdf/
|
||||
cp -r ./* "$out"/lib/common-lisp/asdf/
|
||||
cp -r doc/* "$out"/share/doc/asdf/
|
||||
ln -s "$out"/lib/common-lisp/{asdf/uiop,uiop}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Standard software-system definition library for Common Lisp";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ raskin ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
37
pkgs/development/lisp-modules-obsolete/asdf/default.nix
Normal file
37
pkgs/development/lisp-modules-obsolete/asdf/default.nix
Normal file
@ -0,0 +1,37 @@
|
||||
{ lib, stdenv, fetchurl, texinfo, texLive, perl }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "asdf";
|
||||
version = "3.3.4";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://common-lisp.net/project/asdf/archives/asdf-${version}.tar.gz";
|
||||
sha256 = "sha256-/k7cmN0ymZUgpP4K+IWfhq85TkzfPjTR4QdUgV9n1x4=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs = [
|
||||
texinfo
|
||||
texLive
|
||||
perl
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
make build/asdf.lisp
|
||||
make -C doc asdf.info asdf.html
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p "$out"/lib/common-lisp/asdf/
|
||||
mkdir -p "$out"/share/doc/asdf/
|
||||
cp -r ./* "$out"/lib/common-lisp/asdf/
|
||||
cp -r doc/* "$out"/share/doc/asdf/
|
||||
ln -s "$out"/lib/common-lisp/{asdf/uiop,uiop}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Standard software-system definition library for Common Lisp";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ raskin ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user