On 18 Jan 2021, at 17:37, Wilfredo Velazquez wrote:
Hello all,
Moving this question from
https://gitlab.common-lisp.net/asdf/asdf/-/issues/52
To reiterate, I believe that the instructions in
https://common-lisp.net/project/asdf/asdf/Upgrading-ASDF.html 'Upgrading
ASDF' could use some clarification.
I am attempting to run a newer version of ASDF than that provided by my
impl. The text I'm having issue with is:
If your implementation already provides ASDF 3 or later (and it should),
but you want a more recent ASDF version than your implementation provides,
then you just need to ensure the more recent ASDF is installed in a
configured path, like any other system. We recommend you download an
official tarball or checkout a release from git into ~/common-lisp/asdf/.
Once the source code for ASDF is installed, you don’t need any extra step
to load it beyond the usual (require "asdf"): ASDF 3 will automatically
look whether an updated version of itself is available amongst the
regularly configured systems, before it compiles anything else.
First, it says I should download an official tarball. I looked to the best
of my ability and could not find one. Even if I had found one, I don't know
what I'd do with it.
There should be tarballs here:
https://common-lisp.net/project/asdf/
Look for the "Getting it" section.
So I moved to the second option and cloned ASDF to `~/common-lisp/asdf/`
and built it successfully.
I verify that indeed I am running a newer ASDF. However, I noticed
`~/comon-lisp/asdf/ext/` includes certain third-party libraries bundled in
the repo. These are being prioritized over Quicklisp libraries, and it's
causing conflicts.
So my question is:
May I get clarification on how I may build & install ASDF such that the
implementation-bundled one will automatically find the newer version, while
omitting the libraries ext/ directory from being picked up?
As far as I can tell, if you put a directory tree into ~/common-lisp/
, ASDF will traverse it looking for system definitions, and there is nothing you can do to override this. I have come to dislike the ~/common-lisp/
solution for this reason.
There are other ways you can make the new directory visible to ASDF without exposing ext/
:
The libraries in ext/
are there so that ASDF can be downloaded in isolation and tested without any external dependencies. If you don't pull the git submodules for the ASDF repository, they won't be there, and you won't have the problem you are having. You could do "git get rid of my submodules" somehow, but this is the ASDF list, not the git help list -- you'll have to figure that out on your own!
You can make the directory find-able using Faré's configuration language either directly in your lisp init file, or by using the environment variables. I'm not a fan of environment variables, because they add more complexity to my lisp configuration. I like to keep all of the configuration in my lisp init file, so I don't have to worry about where a setting is made. If you add (:directory <my asdf directory>)
to the configuration, then ASDF will not search it recursively (the alternative is the :tree
keyword, which tells ASDF you do want it to search recursively). There's a way of making this same distinction in the environment variables: it's explained in the manual.
If you are old school and don't want to fuss with debugging the configuration DSL, you can just do: (push <my asdf directory> asdf:*central-registry*)
-- again, ASDF will not search this directory recursively.
I hope that will solve your problem!