Tomas Volf <~@wolfsden.cz> writes: > Hi, > > first let me have a meta comment. Your client seems to embed \r > characters (0x0D, CR) into your emails. Not sure if that is > intentional.
Not really, but it makes me wonder what is causing this, I am using notmuch with emacs...? > reza <r...@housseini.me> writes: > >> 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? > > I am not away of reliable way to get "path of the current script", > however for use in Guix, there is fairly simple pattern to get a root of > your repository. You just need to look for a known file unique to your > setup. I am using something similar to the following: > > --8<---------------cut here---------------start------------->8--- > (define %root > ;; I am pretty sure this file will not be in any other directory. > (dirname (dirname (canonicalize-path > (search-path %load-path > "my-system/files/channels.scm"))))) > --8<---------------cut here---------------end--------------->8--- thanks for the tip, will try it out, though it has some ambiguity to it which I'd like to avoid... > And then I am just basing everything on %root. > > Hope this helps, > Tomas > > -- > There are only two hard things in Computer Science: > cache invalidation, naming things and off-by-one errors.