clpm issueshttps://gitlab.common-lisp.net/clpm/clpm/-/issues2024-03-15T02:47:14Zhttps://gitlab.common-lisp.net/clpm/clpm/-/issues/59The CLPI mirror of Quicklisp is outdated2024-03-15T02:47:14Zbb010gThe CLPI mirror of Quicklisp is outdatedPackages from <https://clpi.ultralisp.org/ultralisp/> are at least a year out of date. For example, `usocket` is still at v0.8.3, whereas it's at v0.8.6 in Quicklisp. #58 makes this more of a problem—trying to use Quicklisp directly cras...Packages from <https://clpi.ultralisp.org/ultralisp/> are at least a year out of date. For example, `usocket` is still at v0.8.3, whereas it's at v0.8.6 in Quicklisp. #58 makes this more of a problem—trying to use Quicklisp directly crashes CLPM. You're stuck with old packages unless you vendor or set up your own mirror.https://gitlab.common-lisp.net/clpm/clpm/-/issues/58SBCL's dynamic space size can't be set2024-03-15T02:47:15Zbb010gSBCL's dynamic space size can't be setWhen trying to sync <https://dist.ultralisp.org/ultralisp.txt> on Windows, CLPM crashes with `Heap exhausted during garbage collection`. I'd like to be able to pass `--dynamic-space-size <MiB>` to `clpm`, like I can with `sbcl`. (`--cont...When trying to sync <https://dist.ultralisp.org/ultralisp.txt> on Windows, CLPM crashes with `Heap exhausted during garbage collection`. I'd like to be able to pass `--dynamic-space-size <MiB>` to `clpm`, like I can with `sbcl`. (`--control-stack-size <MiB>` should probably also be supported.)https://gitlab.common-lisp.net/clpm/clpm/-/issues/57Windows build crashes when using Quicklisp2023-07-03T17:55:54ZAndrew KravchukWindows build crashes when using QuicklispHey. There's a problem with Windows build of CLPM, it fails with heap exhausted when using Quicklisp source of `:type :quicklisp`, even though the memory usage is modest (below 1Gb of RSS).
Steps to reproduce:
1. Have a Windows environme...Hey. There's a problem with Windows build of CLPM, it fails with heap exhausted when using Quicklisp source of `:type :quicklisp`, even though the memory usage is modest (below 1Gb of RSS).
Steps to reproduce:
1. Have a Windows environment (I've confirmed the problem on both WINE 8.0.1 and Windows 11 Enterprise Evaluation version).
2. Install CLPM with MSI from [here](https://www.clpm.dev/#installing).
3. Create the following `clpmfile`:
```lisp
(:api-version "0.4")
(:source "quicklisp"
:url "https://beta.quicklisp.org/dist/quicklisp.txt"
:type :quicklisp)
```
4. Run `clpm bundle install` in directory where `clpmfile` resides.
This results in something like
```
Heap exhausted during garbage collection: 112 bytes available, 304 requested.
Gen Boxed Code Raw LgBox LgCode LgRaw Pin Alloc Waste Trig WP GCs Mem-age
2 2459 1 5502 0 0 0 29 516205600 5592032 2000000 7962 0 0.8832
3 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
4 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
5 0 0 0 0 0 0 0 0 0 2000000 0 0 0.0000
6 689 327 437 62 0 10 0 96999424 2942976 2000000 1525 0 0.0000
7 2026 1 4869 0 0 0 0 446515568 5420688 2000000 6896 0 0.0000
Total bytes allocated = 1059720592
Dynamic-space-size bytes = 1073741824
GC control variables:
*GC-INHIBIT* = true
*GC-PENDING* = true
*STOP-FOR-GC-PENDING* = false
fatal error encountered in SBCL pid 260264:
Heap exhausted, game over.
```
Perhaps specifying `dynamic-space-size` when building Windows binary would help?https://gitlab.common-lisp.net/clpm/clpm/-/issues/55broken pipe error2023-12-17T17:11:06ZCameron Pittmanbroken pipe errorI'm reporting this issue from a thread [here](https://gist.github.com/MuhammedZakir/1a51da09dfa0e0578f0f056abf740d7c). The following is from another CLPM user, Muhammed Zakir, which I've copied and formatted a little bit. He is apparentl...I'm reporting this issue from a thread [here](https://gist.github.com/MuhammedZakir/1a51da09dfa0e0578f0f056abf740d7c). The following is from another CLPM user, Muhammed Zakir, which I've copied and formatted a little bit. He is apparently having trouble signing up for an account on this GitLab instance (which is probably something else worth reporting but I don't know to whom it should go).
---
* CLPM version: `0.4.2-rc.2`, `0.4.2-rc.1`, `0.4.1`
* SBCL version: `2.2.5`
* OS: Manjaro
CLPM installed from [AUR](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=clpm) and manually.
### Expected Behavior
CLPM downloads dependencies and returns `0`
### Observed Behavior
CLPM returns a broken pipe error. (See the bottom of this issue)
### Actions Taken
Yesterday, when I first ran `clpm bundle install --verbose`, it didn't give any output. After sometime, seeing that no output was shown even though I passed `--verbose` flag, and thinking that I might have misconfigured something, I killed it using `ctrl-c`. This error started happening *after that*. I suspect this may has something to do with what I've done, but I also tried deleting `~/.cache/clpm`, and this still happens, so I am not sure.
I am getting [the error] even for [clpm-demo](https://gitlab.common-lisp.net/clpm/clpm-demo) repo.
After rebooting my machine, I just tried this using CLPM `v0.4.1` and got the same error:
```
git clone --depth 1 https://gitlab.common-lisp.net/clpm/clpm-demo
cd clpm-demo
clpm bundle init -a clpm-demo.asd -a clpm-demo-test.asd
# created `clpmfile` successfully.
clpm bundle install
```
This is the `clpmfile` generated by `clpm bundle init`:
```
;;; -*- Mode: common-lisp; -*-
(:api-version "0.4")
(:source "ultralisp" :url "https://clpi.ultralisp.org/" :type :clpi)
(:source "quicklisp" :url "https://quicklisp.common-lisp-project-index.org/" :type :ql-clpi)
(:asd "clpm-demo-test.asd")
(:asd "clpm-demo.asd")
```
The actual error:
```
Warning: --shell feature has been deprecated
Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1000BE0103}>
0: ((LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE))
1: ((FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))
2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<FUNCTION (FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {7F3B8C90F1DB}>)
3: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<FUNCTION (LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE) {100676AE9B}> :PACKAGE :CL)
4: (UIOP/IMAGE:PRINT-CONDITION-BACKTRACE #<SB-INT:BROKEN-PIPE "~@<~?~@[: ~2I~_~A~]~:>" {100676ADF3}> :STREAM NIL :COUNT NIL)
5: ((FLET "H2" :IN CLPM-CLI/ENTRY:MAIN) #<SB-INT:BROKEN-PIPE "~@<~?~@[: ~2I~_~A~]~:>" {100676ADF3}>)
6: (SB-KERNEL::%SIGNAL #<SB-INT:BROKEN-PIPE "~@<~?~@[: ~2I~_~A~]~:>" {100676ADF3}>)
7: (ERROR SB-INT:BROKEN-PIPE :STREAM #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}> :FORMAT-CONTROL "~@<~?~@[: ~2I~_~A~]~:>" :FORMAT-ARGUMENTS ("Couldn't write to ~S" (#<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}>) "Broken pipe"))
8: (SB-IMPL::FLUSH-OUTPUT-BUFFER #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}>)
9: (SB-IMPL::OUTPUT-BYTES/UTF-8 #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}> #<(SIMPLE-ARRAY CHARACTER (8177)) ;;;; ASDF System Groveler Helper
;;;;
;;;; This software is part of asdf-system-grovler. See README.org for more
;;;; information. See LICENSE for license information.
;;;;
;;;; This file is written i... {100171800F}> NIL 0 8177)
10: (SB-IMPL::FD-SOUT #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}> #<(SIMPLE-ARRAY CHARACTER (8177)) ;;;; ASDF System Groveler Helper
;;;;
;;;; This software is part of asdf-system-grovler. See README.org for more
;;;; information. See LICENSE for license information.
;;;;
;;;; This file is written i... {100171800F}> 0 8177)
11: (SB-IMPL::%WRITE-STRING #<(SIMPLE-ARRAY CHARACTER (8177)) ;;;; ASDF System Groveler Helper
;;;;
;;;; This software is part of asdf-system-grovler. See README.org for more
;;;; information. See LICENSE for license information.
;;;;
;;;; This file is written i... {100171800F}> #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}> 0 NIL)
12: ((LAMBDA NIL :IN ASDF-SYSTEM-GROVELER/GROVELER::GROVELER-INIT))
13: ((FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))
14: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<FUNCTION (FLET "THUNK" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {7F3B8C90F56B}>)
15: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<FUNCTION (LAMBDA NIL :IN ASDF-SYSTEM-GROVELER/GROVELER::GROVELER-INIT) {10067695BB}> :PACKAGE :CL)
16: ((:METHOD ASDF-SYSTEM-GROVELER/GROVELER::GROVELER-INIT (ASDF-SYSTEM-GROVELER/GROVELER::GROVELER)) #<ASDF-SYSTEM-GROVELER/GROVELER::GROVELER {1006768743}>) [fast-method]
17: (ASDF-SYSTEM-GROVELER/GROVELER:MAKE-GROVELER :SBCL :ASDF-PATHNAME NIL :ASDF-PRESERVE-CONFIGURATION NIL :ASDF-ALLOW-SELF-UPGRADE NIL :ASDF-FASL-CACHE-DIR #P"/tmp/clpmNPfnKP/" :KEEP-ASDF-FASL-CACHE-DIR NIL :LAUNCH-PROGRAM-ARGS NIL :LISP-PATH NIL :LISP-ARGS NIL :REWRITE-ARGUMENTS-CALLBACK #<FUNCTION (FLET CLPM/GROVELER::REWRITE :IN CLPM/GROVELER:MAKE-GROVELER) {10062892CB}>)
18: (CLPM/GROVELER:MAKE-GROVELER)
19: ((LAMBDA NIL :IN CLPM/RESOLVE:RESOLVE-REQUIREMENTS))
20: (CLPM/SOURCE::CALL-WITH-SOURCES (#<CLPM/SOURCES/FS:FS-SOURCE {1005C475F3}> #<CLPM/SOURCES/CLPI:CLPI-DUAL-SOURCE {1005156693}> #<CLPM/SOURCES/QL-CLPI:QL-CLPI-DUAL-SOURCE {1005ADFF63}>) #<FUNCTION (LAMBDA NIL :IN CLPM/RESOLVE:RESOLVE-REQUIREMENTS) {100628545B}>)
21: ((LAMBDA (CLPM/INSTALL::NEW-CONTEXT) :IN CLPM/INSTALL:INSTALL-REQUIREMENTS) #<unavailable argument>)
22: (CLPM/CONTEXT::CALL-WITH-CONTEXT #<FUNCTION (LAMBDA (CLPM/INSTALL::NEW-CONTEXT) :IN CLPM/INSTALL:INSTALL-REQUIREMENTS) {10061725AB}> #<CLPM/CONTEXT:CONTEXT {1006284443}>)
23: (CLPM/CONTEXT::CALL-WITH-CONTEXT #<FUNCTION (LAMBDA (CLPM/INSTALL::ORIG-CONTEXT) :IN CLPM/INSTALL:INSTALL-REQUIREMENTS) {10061715CB}> #<CLPM/CONTEXT:CONTEXT {1004E27ED3}>)
24: ((LAMBDA (CLPM/BUNDLE::LOCKFILE) :IN CLPM/BUNDLE:BUNDLE-INSTALL) #<unavailable argument>)
25: (CLPM/CONFIG::CALL-WITH-CONFIG-SOURCE #<FUNCTION (LAMBDA NIL :IN CLPM/CONTEXT::CALL-WITH-CONTEXT) {1004CFBADB}> :CONFIG-SOURCE NIL :PATHNAME #P"/tmp/on-lisp/.clpm/bundle.conf" :OPTIONS-HT NIL)
26: (CLPM/CONTEXT::CALL-WITH-CONTEXT #<FUNCTION (LAMBDA (CLPM/BUNDLE::LOCKFILE) :IN CLPM/BUNDLE:BUNDLE-INSTALL) {1004CF550B}> #P"/tmp/on-lisp/clpmfile")
27: ((LAMBDA ()))
28: (CLPM/SESSION::CALL-WITH-CLPM-SESSION #<FUNCTION (LAMBDA NIL) {53D44FAB}> :OVERRIDE NIL :KEY NIL)
29: (SB-INT:SIMPLE-EVAL-IN-LEXENV (CLPM/SESSION:WITH-CLPM-SESSION NIL (CLPM/BUNDLE:BUNDLE-INSTALL :CLPMFILE #1=#P"/tmp/on-lisp/clpmfile" :VALIDATE (LAMBDA (CLPM/CLPM::DIFF) (PRINT (CLPM/CONTEXT-DIFF:CONTEXT-DIFF-TO-PLIST CLPM/CLPM::DIFF)) (TERPRI) (FINISH-OUTPUT) (READ)) :NO-RESOLVE NIL) (LIST (CLPM/CONTEXT-QUERIES:SOURCE-REGISTRY :CONTEXT #1# :IGNORE-INHERITED-SOURCE-REGISTRY T) (CLPM/CONTEXT-QUERIES:INSTALLED-PRIMARY-SYSTEM-NAMES :CONTEXT #1#) (CLPM/CONTEXT-QUERIES:VISIBLE-PRIMARY-SYSTEM-NAMES :CONTEXT #1#) (CLPM/CONTEXT-QUERIES:EDITABLE-PRIMARY-SYSTEM-NAMES :CONTEXT #1#))) #<NULL-LEXENV>)
30: (EVAL (CLPM/SESSION:WITH-CLPM-SESSION NIL (CLPM/BUNDLE:BUNDLE-INSTALL :CLPMFILE #1=#P"/tmp/on-lisp/clpmfile" :VALIDATE (LAMBDA (CLPM/CLPM::DIFF) (PRINT (CLPM/CONTEXT-DIFF:CONTEXT-DIFF-TO-PLIST CLPM/CLPM::DIFF)) (TERPRI) (FINISH-OUTPUT) (READ)) :NO-RESOLVE NIL) (LIST (CLPM/CONTEXT-QUERIES:SOURCE-REGISTRY :CONTEXT #1# :IGNORE-INHERITED-SOURCE-REGISTRY T) (CLPM/CONTEXT-QUERIES:INSTALLED-PRIMARY-SYSTEM-NAMES :CONTEXT #1#) (CLPM/CONTEXT-QUERIES:VISIBLE-PRIMARY-SYSTEM-NAMES :CONTEXT #1#) (CLPM/CONTEXT-QUERIES:EDITABLE-PRIMARY-SYSTEM-NAMES :CONTEXT #1#))))
31: ((FLET "THUNK" :IN CLPM-CLI/COMMANDS/CLIENT/REPL::CLI/CLIENT/REPL))
32: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<FUNCTION (FLET "THUNK" :IN CLPM-CLI/COMMANDS/CLIENT/REPL::CLI/CLIENT/REPL) {52FAA82B}>)
33: (CLPM-CLI/COMMANDS/CLIENT/REPL::CLI/CLIENT/REPL #<unused argument> #<unused argument>)
34: ((LAMBDA NIL :IN "/builds/clpm/clpm/cli/entry.lisp"))
35: (CLPM/CONFIG::CALL-WITH-CONFIG-SOURCE #<FUNCTION (LAMBDA NIL :IN "/builds/clpm/clpm/cli/entry.lisp") {10046DAABB}> :CONFIG-SOURCE NIL :PATHNAME NIL :OPTIONS-HT #<HASH-TABLE :TEST EQL :COUNT 0 {10046DA853}>)
36: (CLPM-CLI/ENTRY:MAIN)
37: ((LAMBDA NIL :IN UIOP/IMAGE:RESTORE-IMAGE))
38: (UIOP/IMAGE:CALL-WITH-FATAL-CONDITION-HANDLER #<FUNCTION (LAMBDA NIL :IN UIOP/IMAGE:RESTORE-IMAGE) {10005A573B}>)
39: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP))
40: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-IMPL::START-LISP))
41: (SB-IMPL::START-LISP)
Above backtrace due to this condition:
Couldn't write to #<SB-SYS:FD-STREAM for "descriptor 5" {1006578483}>: Broken pipe
```https://gitlab.common-lisp.net/clpm/clpm/-/issues/54Installing dependencies local to the source tree and loading them without req...2022-05-03T13:06:47ZDiego MundoInstalling dependencies local to the source tree and loading them without requiring CLPMI really like the ideas and design of CLPM. One thing that would be really convenient is to be able to do the same thing as Quicklisp bundles:
> Quicklisp library bundles are self-contained sets of systems that are exported from Quickli...I really like the ideas and design of CLPM. One thing that would be really convenient is to be able to do the same thing as Quicklisp bundles:
> Quicklisp library bundles are self-contained sets of systems that are exported from Quicklisp and loadable without involving Quicklisp. A library bundle has a directory structure that includes software archives, an index file, and a Lisp file that can be loaded to configure ASDF to understand how to load systems from the bundle.
I think making a project not depend on "the outside world" can be desirable for a number of reasons. In my case, I just want an easy way for me to manage and update deps without the rest of my team needing to worry about it. (We include them in the source tree now, but are as of now unmaanged)https://gitlab.common-lisp.net/clpm/clpm/-/issues/53CLPM fails with contexts that start with `~`2022-06-27T20:57:57ZCameron PittmanCLPM fails with contexts that start with `~`The problem is either that CLPM fails to warn users when it cannot find the clpmfile given as context, or that it fails to properly handle contexts that use `~` instead of a full path to the home directory.
Steps to reproduce:
1. Go to...The problem is either that CLPM fails to warn users when it cannot find the clpmfile given as context, or that it fails to properly handle contexts that use `~` instead of a full path to the home directory.
Steps to reproduce:
1. Go to a repo. Change dependencies in an .asd file
2. `(clpm-client:activate-context #p"~/foo/bar/clpmfile")`
3. `(clpm-client:install)`
4. Observe that CLPM wants to remove dependencies
5. In a terminal in the same repo, run `clpm bundle install`. Note that it will not prompt to uninstall dependencies
Re-running step 2 with the full path (no `~`) will result in expected behavior.https://gitlab.common-lisp.net/clpm/clpm/-/issues/51Esrap submodule commit in clpm repo doesn't compile after new sbcl update2021-12-24T21:53:35ZOscar BellettiEsrap submodule commit in clpm repo doesn't compile after new sbcl updateWhen I attempt to run clpm from source I get the error "_* is not permitted as an argument to the FUNCTION type specifier_" related to esrap.
I found the same error reported [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=99962...When I attempt to run clpm from source I get the error "_* is not permitted as an argument to the FUNCTION type specifier_" related to esrap.
I found the same error reported [here](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=999625):
> This failure is caused by the new version of sbcl being more strict
regarding syntax conformance.
In a newer commit esrap [fixed this](https://github.com/scymtym/esrap/commit/c99c33a33ff58ca85e8ba73912eba45d458eaa72), however it also [introduced a dependency](https://github.com/scymtym/esrap/commit/4034df872c2b1b8e91adbccab491645c8138253b) on trivial-with-current-source-formhttps://gitlab.common-lisp.net/clpm/clpm/-/issues/50Support for quicklisp style sources with no "-versions" file2021-12-07T11:59:07ZOscar BellettiSupport for quicklisp style sources with no "-versions" fileI've noticed that some quicklisp distributions don't have a "-versions" file as required by clpm. I suppose that ideally the maintainers of those distributions should be encouraged to provide one. However, what are your thoughts on addin...I've noticed that some quicklisp distributions don't have a "-versions" file as required by clpm. I suppose that ideally the maintainers of those distributions should be encouraged to provide one. However, what are your thoughts on adding the ability to work with those distributions to clpm for the sake of compatibility (and to make clpm closer to a drop-in replacement to quicklisp)?
Some examples of such distributions are:
- https://github.com/borodust/trivial-gamekit
- https://shirakumo.github.io/radiance/https://gitlab.common-lisp.net/clpm/clpm/-/issues/49Activating a context after cache has been wiped should "just work"2021-10-20T18:36:19ZEric TimmonsActivating a context after cache has been wiped should "just work"Replicate by creating a bundle with a git repo. Clear the cache. Activate the context and see the error.
Fix will probably involve the equivalent of `install --no-resolve` during activation. Additionally, the separation of git repo as s...Replicate by creating a bundle with a git repo. Clear the cache. Activate the context and see the error.
Fix will probably involve the equivalent of `install --no-resolve` during activation. Additionally, the separation of git repo as source instead of a requirement (#40) might make this easier as well.v0.5https://gitlab.common-lisp.net/clpm/clpm/-/issues/48CLPM install as Lisp library?2021-10-20T18:57:54ZLuke GorrieCLPM install as Lisp library?The official documentation describes how to install CLPM as a command-line program and configure it via files in $HOME. Is it also possible to install CLPM as a Lisp library and to access it using a Lisp API with all directories specifie...The official documentation describes how to install CLPM as a command-line program and configure it via files in $HOME. Is it also possible to install CLPM as a Lisp library and to access it using a Lisp API with all directories specified explicitly?
This could make it easier to build further packaging infrastructure on top of CLPM such as a Nix package generator (#47).https://gitlab.common-lisp.net/clpm/clpm/-/issues/47clpm2nix?2021-10-21T07:30:11ZLuke Gorrieclpm2nix?Musing: Is CLPM the Right Thing for generating Lisp library package descriptions for the Nix package manager?
I think that it is. Nix wants a data structure describing a complete Lisp package ecosystem: the packages, their versions, the...Musing: Is CLPM the Right Thing for generating Lisp library package descriptions for the Nix package manager?
I think that it is. Nix wants a data structure describing a complete Lisp package ecosystem: the packages, their versions, the exact source locations, the Lisp systems that each package provides, and the dependency graph between the systems. CLPM seems to be capable of producing exactly this, if I understand correctly?
The process of creating or updating a Lisp library ecosystem for Nix would then be:
1. Run CLPM to generate a complete snapshot of library metadata in files (e.g. S-expressions.)
2. Compile this snapshot into the Nix expression format e.g. using a custom Lisp program.
3. Build and install the libraries using standard Nix tooling (without involving CLPM.)
The practical steps to make this happen might be:
- [ ] Package CLPM for Nix. Ideally as a Lisp library rather than a command-line program.
- [ ] Write Lisp client code to make CLPM produce the metadata snapshot.
- [ ] Write Lisp code to translate the database into Nix expressions.
- [ ] Build the packages using the existing `development/lisp-modules` tooling in Nix.
EDIT: Let me add some snippets and links to the concrete implementation in the upstream Nix package repository.
- [lisp-packages.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lisp-modules/lisp-packages.nix) contains hand-written descriptions of certain Lisp packages e.g. that are not included in Quicklisp.
- [quicklisp-to-nix-output/](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lisp-modules/quicklisp-to-nix-output) contains automatically generated package descriptions, each one an individual file specifying the package name, version, source location, and systems provided. These are the "nodes" of the package graph.
- [quicklisp-to-nix.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lisp-modules/quicklisp-to-nix.nix) contains automatically generated dependency information between packages. These are the "edges" of the package graph.
- [quicklisp-to-nix-overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/lisp-modules/quicklisp-to-nix-overrides.nix) contains manual tweaks to be applied to the automatically generated packages e.g. patches required to make them work in the Nix environment and information about dependencies on external programs and shared libraries (which typically have already been manually packaged for Nix by someone else.) This mechanism is also available to end-users e.g. if their project depends on patches being applied to a dependency.
- [quicklisp-to-nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lisp-modules/quicklisp-to-nix) is the Lisp application that grovels Quicklisp to create the auto-generated files mentioned above.
So what's the role for CLPM in all of this? The potential I see is a replacement for `quicklisp-to-nix` built on the CLPM API. This could potentially be more flexible (able to address curated CLPM package collections), and more efficient (running the groveller seems to take about one hour for me), and more maintainable (reuse the groveller from CLPM instead of maintaining a separate one.) This seems worth considering to me.
I should also note that there's a similar project called [ql2nix](https://github.com/SquircleSpace/ql2nix) that is an out-of-tree solution. I have been using that for the past year or so and it works well too, only takes a couple of minutes to bootstrap from Quicklisp for me. However since people seem to be actively working on the Lisp package collection in upstream nixpkgs that seems worth engaging with now.https://gitlab.common-lisp.net/clpm/clpm/-/issues/45How do to debug calls to the command line `clpm client`?2021-10-19T16:14:03ZAlexander ArtemenkoHow do to debug calls to the command line `clpm client`?When you are running clpm-client's function from the REPL, it sends some forms to the separate process `clpm`.
During development it is inconvenient to receive back just a backtrace. I want to get a full featured SLY/SLIME's debugger wh...When you are running clpm-client's function from the REPL, it sends some forms to the separate process `clpm`.
During development it is inconvenient to receive back just a backtrace. I want to get a full featured SLY/SLIME's debugger when something goes wrong in this `clpm client` subprocess.
How do you debug the interaction between processes?
P.S. - Probably the answer to this question deserves to be placed into `README-dev.org`.https://gitlab.common-lisp.net/clpm/clpm/-/issues/43Consider some sort of style warning when using an out of date clpmfile api ve...2021-10-07T22:01:45ZEric TimmonsConsider some sort of style warning when using an out of date clpmfile api versionhttps://gitlab.common-lisp.net/clpm/clpm/-/issues/41Consider checking out git working tree instead of using git archive to instal...2021-09-06T14:26:45ZEric TimmonsConsider checking out git working tree instead of using git archive to install depsAs pointed out by lukego on IRC, it's nice to use `git blame` and similar tools on your dependencies.
Additionally, this may solve borodust's request to have CLPM support submodules and LFS.As pointed out by lukego on IRC, it's nice to use `git blame` and similar tools on your dependencies.
Additionally, this may solve borodust's request to have CLPM support submodules and LFS.https://gitlab.common-lisp.net/clpm/clpm/-/issues/40Specify git repositories as a source, not requirement2021-10-20T18:36:20ZEric TimmonsSpecify git repositories as a source, not requirementI was working on #39 but realized that because of how things are structured, it's going to be more difficult to solve than simply making sure it's persisted to the lock file.
This made me realize that the clpmfile specification unfortun...I was working on #39 but realized that because of how things are structured, it's going to be more difficult to solve than simply making sure it's persisted to the lock file.
This made me realize that the clpmfile specification unfortunately blends together a couple of concepts that really should be separate in `:git`, `:gitlab`, and `:github` forms. Namely, something like the following:
```common-lisp
(:gitlab "asdf-release-ops"
:path "daewok/asdf-release-ops"
:branch "main")
```
goes in the "requirements" section of the clpmfile (after all the sources), but logically it defines *both* a source and a requirement. The requirement is that every system present in the repository is included in the bundle (and therefore also has its dependencies satisfied).
I'd like to split this up so that you would instead write:
```common-lisp
(:source "asdf-release-ops"
:type :gitlab
:path "daewok/asdf-release-ops"
:branch "main")
```
in the sources section. Then, if you want to include any system from that repo, you need to include them either explicitly (like `(:system "asdf-release-ops")`) or transitively (e.g., through an `(:asd "my-system.asd")`).
I think the upsides to this approach are:
+ Much cleaner code. Right now, the VCS handling is a nightmare. I believe this will clean it up significantly.
+ Much cleaner story conceptually. I think this change will make it easier to explain what's going on under the hood.
+ Less time groveling on average. Users don't specify `:systems` for `:git*` requirements right now (or if they do, they have no effect, see: #39). This means that we always grovel for information from *every* system in a repo. This change will not grovel a system unless it is actually needed.
The major downside to this approach is that it is incompatible with earlier clpmfile versions and in order to take advantage of the cleaner concepts, I really do not want to support reading both the older and newer clpmfile versions.Eric TimmonsEric Timmonshttps://gitlab.common-lisp.net/clpm/clpm/-/issues/39:systems argument to :git, :github, and :gitlab requirements ignored when rea...2021-09-03T21:43:04ZEric Timmons:systems argument to :git, :github, and :gitlab requirements ignored when reading lock filesIf I specify `:systems` on a `:git`, `:gitlab`, or `:github` requirement, then that is not persisted to the lock file and is thus ignored when reading the lock file, bringing more systems into the bundle than intended.If I specify `:systems` on a `:git`, `:gitlab`, or `:github` requirement, then that is not persisted to the lock file and is thus ignored when reading the lock file, bringing more systems into the bundle than intended.https://gitlab.common-lisp.net/clpm/clpm/-/issues/38Add an FAQ section to website2021-08-30T01:01:08ZEric TimmonsAdd an FAQ section to websiteA good starting point would be to address issues #17 and #21.A good starting point would be to address issues #17 and #21.v0.4https://gitlab.common-lisp.net/clpm/clpm/-/issues/35Possibility of cross context contamination2021-09-03T20:59:06ZEric TimmonsPossibility of cross context contaminationBy default, CLPM creates separate fasl caches for each bundle in order to prevent cross contamination (particularly of macros). However, this precaution is not sufficient to prevent all cross contamination.
The case this does not cover ...By default, CLPM creates separate fasl caches for each bundle in order to prevent cross contamination (particularly of macros). However, this precaution is not sufficient to prevent all cross contamination.
The case this does not cover is if a bundle is updated to depend on a release that has already been installed. In such a case, the mtimes may not work out such that ASDF detects a recompilation is necessary.
We should implement two options to mitigate this and let the user override the default if they want.
1. Clear the bundle's fasl cache on install or update.
2. Unpack dependency tarballs to a path that is bundle dependent.
I think 2 should be the default because disk space is cheaper than time for most people.
An upside of implementing 2 is also that it makes implementing vendoring of dependencies easier.https://gitlab.common-lisp.net/clpm/clpm/-/issues/29Better document cleaning up clpm-client2021-08-19T22:16:11ZEric TimmonsBetter document cleaning up clpm-clientIt should be documented that clpm-client expects some functions to be called on image dump (and on image start). Some of these functions are not exported and are instead simply pushed onto UIOP's lists of hooks. We should definitely docu...It should be documented that clpm-client expects some functions to be called on image dump (and on image start). Some of these functions are not exported and are instead simply pushed onto UIOP's lists of hooks. We should definitely document these (and recommend calling the appropriate UIOP functions at the appropriate times). We can also look at exported these functions so that users can call them directly if they do not want to also call all of UIOP's hooks.https://gitlab.common-lisp.net/clpm/clpm/-/issues/17What is the best way to deal with libraries that use Quicklisp?2021-08-30T01:01:09ZJason LeglerWhat is the best way to deal with libraries that use Quicklisp?I pulled in a library that has a bunch of tests with `(ql:quickload "lisp-unit")` and I can't figure out how to deal with it without modifying the code. What is the best way to deal with that?I pulled in a library that has a bunch of tests with `(ql:quickload "lisp-unit")` and I can't figure out how to deal with it without modifying the code. What is the best way to deal with that?