Hey Blake, for that workflow you describe, I think the closest candidate would be clpm:
You can add sources such as quicklisp a url, git repo, etc. and it sets this up locally to your project.
Unfortunately, I don't have much experience with it since I found out about it until I stopped working with CL.
Hopefully that helps!
On Sat, Sep 23, 2023 at 10:52 AM Pascal Bourguignon pjb@informatimago.com wrote:
Le 23/09/2023 à 16:56, Blake McBride a écrit :
Thanks for all of the replies! Although I have been playing with Lisp for many years, I do not have much experience with ASDF or QuickLisp.
I appreciate all of the suggestions and explanations, however, with respect, they all seem like work-arounds or hacks for my purposes. I am not suggesting, however, that your input wasn't valid, helpful, or there is a better way.
I understand the idea that QuickLisp is not a package manager but a system manager. In that case, it delivers completed system easily and conveniently. It's a great tool.
I think a true package manager option in QuickLisp would be incredibly useful. Here is the scenario.
It's a question of terminology actually. Since Common Lisp has a namespace type called PACKAGE, we use the name system for what is called package in other ecosystems. But quicklisp is a true "package" manager, ie system manager in that sense.
I am building a system. It has dependencies X, Y, and Z. I complete my system and package it up as a QuickLisp system.
There's no "Quicklisp system" per se. There are asdf system (and other kind of systems, using older defsystem macros, but rarely used anymore, since those that are used, have been upgraded to asdf).
In this part, Quicklisp is used as a distribution mechanism for asdf systems. To have an asdf system included in the Quicklisp distribution, you would make an issue to the quicklisp-projects github repository, and wait for Xach to do include it.
Note an important and regretable property of Quicklisp: it distributes system sources pruned of any version management data. Some system may come from tarballs, without version management, but most systems come from various distributed version management collections.
You can use the following tool to retrieve the origin of a quicklisp distributed system:
cl-user> (com.informatimago.tools.quicklisp:quick-where-from :alexandria)
(:system "alexandria" :distribution "quicklisp" :directory #P"/Users/pjb/quicklisp/dists/quicklisp/software/alexandria-20230618-git/" :where-from ("git" "https://gitlab.common-lisp.net/alexandria/alexandria.git")) ; No value cl-user>
it's in https://github.com/informatimago/lisp
Later, I'd like to work on my system. I'd like to work on a local copy in a directory of my choosing. I'd like it to load its dependencies (X, Y, and Z) yet work on my part of the system without loading the version in the QuickLisp
repo.
While some of your suggestions will allow me to do that, they are real clunky. Either I have to work in specific directories or I have to have special code specific to the particular directory I choose to work in.
All of this is contrary to the way all other system I've used work. In general, I can clone a repo to any directory and do:
./configure make sudo make install
and it works! I can put the clone anywhere I want. I can change it anyway I want. The system doesn't fight me.
I wouldn't think this would be hard at all to make ASDF and QuickLisp have this capability.
Just put the directory on asdf:*central-registry* or ql:*local-project-directories*.
Now, for the alternatives (to quicklisp), there's the ergo vaporware: https://gitlab.com/informatimago/ergo irc://libera.chat/#clergo
And in practice, one alternative that could be used right now, is google repo. It uses a manifest.xml file to specify the repositories and commit IDs of the various git repositories to clone to get a system and its dependencies.
I've started to write some code to extract the origins and dependencies of a quicklisp distributed system, to clone them into a directory, where you could edit and push modifications upstream (or in your forks). See the work in progress:
https://gitlab.com/com-informatimago/com-informatimago/-/blob/master/tools/d...
That could serve as basis to generate a manifest.xml for google repo, or to configure an ergo project.
-- __Pascal Bourguignon__