Sorry for chipping in late to this discussion.

l...@gnu.org (Ludovic Courtès) writes:

> I think it’s often undesirable.
>
> Suppose you want to use ‘current-filename’ in an ‘assert’ macro, for
> instance: what you want is a hint, not an absolute path, since that path
> is likely to be invalid at the time you see it (for instance, it could
> point to the source tree on a build machine of your distro.)

Or suppose that a script and accompanying module set is compiled in the
build tree, then installed or relocated elsewhere.  In this case, what
I'd be looking for, with this

 (add-to-load-path ...)

stuff, would be to discover the location of the running script file
_now_, and to construct a load path element relative to that.  If I'm
understanding correctly, 'current-filename' would give me the wrong
answer in that case too, because it would have the
pre-install/relocation location.

Perhaps after all the right thing, for my use case, is something based
on (car (command-line)) and (getcwd).  I currently have this
'compatibility definition' for Guile 1.8.x:

      (define (current-filename)
        (let* ((script (car (command-line)))
               (scriptdir (dirname script))
               (absdir (cond ((string=? scriptdir ".")
                              (getcwd))
                             ((string-match "^/" scriptdir)
                              scriptdir)
                             (else
                              (in-vicinity (getcwd) scriptdir)))))
          (in-vicinity scriptdir (basename script))))

But maybe that's the better solution for 2.x as well.

Regards,
      Neil

Reply via email to