Andy Wingo <wi...@pobox.com> writes: > Hi Neil, > > Thanks for the feedback! > > On Sun 22 Jan 2012 00:17, Neil Jerram <n...@ossau.homelinux.net> writes: > >> Thing 1 is that (current-filename) can return a relative filename, or a >> filename with a "./" in its middle > [...] >> >> Would there be any downside from putting [canonicalize-path] inside >> current-filename, so that current-filename always returns a canonical >> file name? > > No, and I think that is the right thing to do in this case, because it > avoids embedding assumptions about the current working directory into > compiled .go files. I have made this change.
Thanks. >> Thing 2 is that it remains slightly inelegant to cater for both 1.8 and >> 2.0. I think the minimal complete solution is to write >> >> (cond-expand (guile-2 (include "setup-load-path.scm")) >> (else (load "setup-load-path.scm"))) >> >> at top level in every uninstalled script, and then something like >> >> (cond-expand (guile-2 >> (add-to-load-path >> (dirname >> (dirname >> (canonicalize-path (current-filename)))))) >> (else >> ;; Less elegant code for 1.8... >> (let* ((bindir (dirname (car (command-line)))) >> (absdir (cond ((string=? bindir ".") >> (getcwd)) >> ((string-match "^/" bindir) >> bindir) >> (else >> (in-vicinity (getcwd) bindir))))) >> (set! %load-path (cons (in-vicinity absdir "..") >> %load-path))))) >> >> in setup-load-path.scm. >> >> But without a time machine I don't think anything can be done to make >> either of those fragments more concise. > > Well, you could instead do: > > (cond-expand ((not guile-2) (load "guile-2.0-compat.scm"))) Well it seems it has to be (cond-expand (guile-2) (else (load "guile-2.0-compat.scm"))) because cond-expand errors if no clause is satisfied. > (add-to-load-path (dirname (dirname (current-filename)))) > > Then in guile-2.0-compat.scm you have shims to make guile 1.8 offer a > 2.0 interface (in this case, current-filename and add-to-load-path). But yes, indeed that is nicer, and it obviously generalises to other compatibility issues too. Thanks for the idea! Regards, Neil