Hi Guix

I have problems of finding a reliable way to access the current
directory from a guile script.

My setup is the following: I have a channels.scm file and a manifest.scm
file at my project root directory. Additionally I have
.guix/modules/my-package.scm file describing my package, which I
reference in my manifest file like

    (package->development-manifest (load "guix.scm"))

where guix.scm is a symlink to .guix/modules/my-package.scm.

Now in .guix/modules/my-package.scm I want to have the absolute path of
my project root. I used to use

    (define %source-dir (string-append (current-source-directory) "/../.."))

which works fine until you call something like this:

    guix time-machine -C channels.scm -- repl manifest.scm

in the project root. This fails because current-source-directory returns
the path to the manifest.scm file. Now I started to use

    (define %source-dir (canonicalize-path (dirname (dirname (dirname 
(current-filename))))))

and this seemed to work fine until I included the package as a
dependency  into another package where it fails with the (not helpful at
all) error message

    In procedure scm_to_utf8_stringn: Wrong type argument in position 1 
(expecting string): #f

which seems to stem from the factthat current-filename resolved to #f
and dirname threw an exception
Now I am using

    (define %source-dir (or (canonicalize-path (dirname (dirname (dirname 
(current-filename)))))
                            (string-append (current-source-directory) 
"/../..")))

which covers my two needs, but it just feels ridiculously. Is there no
easy and reliable way to get the path of the current script in guile?

Best,
Reza


Reply via email to