Here is what according to me might be a portable way to catch the source 
pathname: 

```
 (defmacro source-pathname () 

  `,(or *compile-file-truename* *load-truename*))
```


Then at the top of your file that you want to know what was the source 
directory:


```
(defparameter *project-dir* 
  (make-pathname :name nil :type nil :defaults (source-pathname)))

```

This source-pathname is a standard function or macro defined for Gendl in its 
so-called "glisp" portability layer.  I use that actual macro for SBCL because 
I couldn't find a built in thing to do it. Most of the other CLs have a 
built-in way e.g. Allegro's excl:*source-pathname* or CCL's 
ccl:*loading-file-source-file*. 

I think the macro should be portable though so maybe I should just be using it 
across the board.  





Dave Cooper






 >
 > On Sat, Dec 13, 2025 at 4:16 PM Marco Antoniotti < 
 > mailto:[email protected] > wrote:
 >>
 >> Thanks but no.
 >>
 >> That would create a dependency from ASDF in the code.
 >>
 >> MA
 >>
 >>
 >>
 >> On Sat, Dec 13, 2025 at 1:50 PM Robert P. Goldman < 
 >> mailto:[email protected] > wrote:
 >>>
 >>> ASDF:SYSTEM-RELATIVE-PATHNAME is probably what you want
 >>> Sent from my iPhone
 >>>
 >>> > On Dec 13, 2025, at 06:11, Marco Antoniotti < 
 >>> > mailto:[email protected] > wrote:
 >>> >
 >>> > 
 >>> > Hi
 >>> >
 >>> > I am getting old and I get confused.
 >>> >
 >>> > Here is the thing (a followup to the "wild" ASDF module question).
 >>> >
 >>> > I am writing something that will have, at run time, a variable 
 >>> > *the-directory-where-stuff-is*.
 >>> >
 >>> > Now, I want to initialize this variable automagically, with no "outside" 
 >>> > references.  I thought I could do something like
 >>> >
 >>> > (defvar the-directory-where-stuff-is*
 >>> >    (merge-pathnames (make-pathname :directory '(:relative "stuff")
 >>> >                                    :name nil :type nil)
 >>> >                     (make-pathname :name nil :type nil
 >>> >                                    :defaults *load-pathname*)))
 >>> >
 >>> > Alas, ASDF and other things may move the compiled file to a cache 
 >>> > folder, which, in the end misaligns *load-pathname* w.r.t. where "stuff" 
 >>> > actually is (and should be).
 >>> >
 >>> > This is something that build systems like cmake achieve with the notion 
 >>> > of "source", "install", etc folders.
 >>> >
 >>> > Any ideas, suggestions, incantations, workarounds, even at the ASDF 
 >>> > level to get this done?
 >>> >
 >>> > Thanks
 >>> >
 >>> >
 >>> > --
 >>> > Marco Antoniotti
 >>>
 >>
 >>
 >> --
 >> Marco Antoniotti, Professor, Director         tel. +39 - 02 64 48 79 01
 >> DISCo, University of Milan-Bicocca U14 2043    http://dcb.disco.unimib.it 
 >> Viale Sarca 336
 >> I-20126 Milan (MI) ITALY
 >>
 >> REGAINS: https://regains.disco.unimib.it/ 
 >
 >
 >
 > --
 > Marco Antoniotti, Professor, Director         tel. +39 - 02 64 48 79 01
 > DISCo, University of Milan-Bicocca U14 2043    http://dcb.disco.unimib.it 
 > Viale Sarca 336
 > I-20126 Milan (MI) ITALY
 >
 > REGAINS: https://regains.disco.unimib.it/

Reply via email to