[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#66046: Relative includes in R7RS define-library seem broken
From: |
Daphne Preston-Kendal |
Subject: |
bug#66046: Relative includes in R7RS define-library seem broken |
Date: |
Sun, 17 Sep 2023 10:22:20 +0200 |
A standard layout for R7RS libraries is to have an .sld file
containing the library import and export declarations with a parallel
.scm file with the same name in the same directory, which the .sld
file (include ...)s.
E.g. lib/dpk/mylibrary.sld:
(define-library (dpk mylibrary)
(import (scheme base))
(export make-frob #;etc)
(include "mylibrary.scm"))
and then mylibrary.scm is also in the same lib/dpk directory as
mylibrary.scm and includes the actual code.
Guile supports looking for .sld files before .scm files if started in
--r7rs mode. However, in this case, it will not find the .scm file if
it’s included from the .sld file.
Starting Guile with: guile --r7rs -L './lib'
or by setting the GUILE_LOAD_PATH environment variable, (in both cases
with absolute paths or relative ones) and attempting to import
libraries such as this results in a file not found error for the
included .scm file, e.g.:
scheme@(guile-user)> (import (chibi shell))
;;; note: source file /Users/dpk/Projects/r7rs/lib/chibi/shell.sld
;;; newer than compiled
/Users/dpk/.cache/guile/ccache/3.0-LE-8-4.6/Users/dpk/Projects/r7rs/lib/chibi/shell.sld.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /Users/dpk/Projects/r7rs/lib/chibi/shell.sld
;;; WARNING: compilation of /Users/dpk/Projects/r7rs/lib/chibi/shell.sld failed:
;;; In procedure open-file: No such file or directory: "chibi/shell.scm"
scheme@(guile-user)>
Curiously, including a file which *actually* doesn’t exist results in
two different, one of which correctly reports the full path of the
file it’s purportedly trying to include:
scheme@(guile-user)> (import (chibi shell))
;;; note: source file /Users/dpk/Projects/r7rs/lib/chibi/shell.sld
;;; newer than compiled
/Users/dpk/.cache/guile/ccache/3.0-LE-8-4.6/Users/dpk/Projects/r7rs/lib/chibi/shell.sld.go
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /Users/dpk/Projects/r7rs/lib/chibi/shell.sld
;;; WARNING: compilation of /Users/dpk/Projects/r7rs/lib/chibi/shell.sld failed:
;;; In procedure open-file: No such file or directory: "chibi/wonderpants.scm"
While compiling expression:
In procedure open-file: No such file or directory:
"/Users/dpk/Projects/r7rs/lib/chibi/wonderpants.scm"
scheme@(guile-user)>
So this smells like a bug where the part of the R7RS library code
looks in the wrong place and fails, but after it’s already failed, a
second part of the code looks again in the correct location and
reports another error if the file really didn’t exist. This is a
strange hypothesis but it’s the only thing I can think of.
Changing the path in the include declaration to be absolute fixes the
problem, but then it no longer works on other people’s machines.
Guile version: 3.0.9
installed from nix-unstable
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug#66046: Relative includes in R7RS define-library seem broken,
Daphne Preston-Kendal <=