Hey Blake, for that workflow you describe, I think the closest candidate would be clpm:

https://www.clpm.dev/

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/dependencies.lisp?ref_type=heads

That could serve as basis to generate a manifest.xml for google repo, or
to configure an ergo project.

--
__Pascal Bourguignon__



--
Wilfredo Velázquez-Rodríguez