Frank
Frank

Reputation: 433

Win10: ASDF can't load system (ASDF_OUTPUT_TRANSLATION error)

Update 2

I think @faré is right, it's an output translation problem.

So I declared the evironment variable ASDF_OUTPUT_TRANSLATIONS and set it to E:/. Now (asdf:require-system "my-system") yields a different error: Uneven number of components in source to destination mapping: "E:/" which led me to this SO-topic.

Unfortunately, his solution doesn't work for me. So I tried the other answer and set ASDF_OUTPUT_TRANSLATIONS to (:output-translations (t "E:/")). Now I get yet another error:

Invalid source registry (:OUTPUT-TRANSLATIONS (T "E:/")).
One and only one of
    :INHERIT-CONFIGURATION or
    :IGNORE-INHERITED-CONFIGURATION
is required.
(will be skipped)

Original Posting

I have a simple system definition but can't get ASDF to load it.
(asdf-version 3.1.5, sbcl 1.3.12 (upgraded to 1.3.18 AMD64), slime 2.19, Windows 10)

What I have tried so far

Following the ASDF manual: "4.1 Configuring ASDF to find your systems"

There it says:

For Windows users, and starting with ASDF 3.1.5, start from your %LOCALAPPDATA%, which is usually ~/AppData/Local/ (but you can ask in a CMD.EXE terminal echo %LOCALAPPDATA% to make sure) and underneath create a subpath config/common-lisp/source-registry.conf.d/

That's exactly what I did:

  1. Echoing %LOCALAPPDATA% which evaluates to C:\Users\my-username\AppData\Local
  2. Underneath I created the subfolders config\common-lisp\source-registry.conf.d\ (In total: C:\Users\my-username\AppData\Local\config\common-lisp\source-registry.conf.d\

The manual continues:

there create a file with any name of your choice but with the type conf, for instance 50-luser-lisp.conf; in this file, add the following line to tell ASDF to recursively scan all the subdirectories under /home/luser/lisp/ for .asd files: (:tree "/home/luser/lisp/") That’s enough. You may replace /home/luser/lisp/ by wherever you want to install your source code.

In the source-registry.conf.d folder I created the file my.conf and put in it (:tree "C:/Users/my-username/my-systems/"). This folder contains a my-system.asd.

And here comes the weird part:

If I now type (asdf:require-system "my-system") in the REPL I get the following error:
Can't create directory C:\Users\my-username\AppData\Local\common-lisp\sbcl-1.3.12-win-x86\C\Users\my-username\my-systems\C:\

So the problem is not that ASDF doesn't find the file, it does -- but (whatever the reason) it tries to create a really weird subfolder hierarchy which ultimately fails because at the end it tries to create the folder C: but Windows doesn't allow foldernames containing a colon.

Another approach: (push path asdf:*central-registry*)

If I try

> (push #P"C:/Users/my-username/my-systems/" asdf:*central-registry*)
(#P"C:/Users/my-username/my-systems/"
 #P"C:/Users/my-username/AppData/Roaming/quicklisp/quicklisp/")

> (asdf:require-system "my-system")

I get the exact same error.

I don't know what to do.

Update

Because of the nature of the weird path ASDF was trying to create I thought maybe I could bypass the problem by specifying a relative path instead of an absolute one. So I tried
  (:tree "\\Users\\my-username\\my-systems")
in my conf file. Still the same error.

Upvotes: 1

Views: 837

Answers (1)

Faré
Faré

Reputation: 960

Ahem. It looks like an output-translations problem.

I don't have a Windows machine right now, but this all used to work last time I tried.

Can you setup some ad hoc output-translations for now that will make it work?

Upvotes: 2

Related Questions