bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#12887: Broken pipe while generating guile-procedures.texi


From: Ludovic Courtès
Subject: bug#12887: Broken pipe while generating guile-procedures.texi
Date: Fri, 07 Dec 2012 22:59:55 +0100
User-agent: Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.2 (gnu/linux)

Hi,

Thanks for your feedback!

DNS <address@hidden> skribis:

> sorry for my late reply, and thx a lot for your help.
> i was compiling 2.0.7 and had the same issue, then i was finally lookin
> at the log and figured out that it is because of a "umlaut" char in the
> parent directory-name where i tried to build guile.
> The directory was called "Arbeitsfläche" ("desktop" in german) and in
> the log i saw the files could not be found because the dir-name was not
> correctly converted (into UTF-8 i guess). The dir name was shown as
> "Arbeitsf??che"...

Ooh, I see.  This is related to commit ed4c3739 (see
<http://lists.gnu.org/archive/html/guile-devel/2011-12/msg00160.html>).

What happens is that the directory name may be correctly decoded when
passed as an argument:

--8<---------------cut here---------------start------------->8---
address@hidden:~/tmp/Courtès]$ strace -f -o ,,s ~/src/guile/meta/guile -L $PWD 
-c '(set-port-encoding! (current-output-port) "UTF-8")(pk %load-path)'

;;; (("/home/ludo/tmp/Courtès" ...))
--8<---------------cut here---------------end--------------->8---

But then ‘scm_stat’ calls ‘scm_to_locale_string’, which uses the wrong
encoding at this point, leading to this:

--8<---------------cut here---------------start------------->8---
address@hidden:~/tmp/Courtès]$ strace -f -o ,,s ~/src/guile/meta/guile -L $PWD 
-c '(use-modules (t))'

[...]

ERROR: In procedure scm-error:
ERROR: no code for module (t)

address@hidden:~/tmp/Courtès]$ grep Court ,,s | head -10
24237 execve("/home/ludo/src/guile/meta/guile", 
["/home/ludo/src/guile/meta/guile", "-L", "/home/ludo/tmp/Court\303\250s", 
"-c", "(use-modules (t))"], [/* 74 vars */]) = 0
24237 stat("/home/ludo/tmp/Court\303\250s", {st_mode=S_IFDIR|0755, 
st_size=4096, ...}) = 0
24237 execve("/home/ludo/src/guile/meta/uninstalled-env", 
["/home/ludo/src/guile/meta/uninst"..., "/home/ludo/src/guile/libguile/gu"..., 
"-L", "/home/ludo/tmp/Court\303\250s", "-c", "(use-modules (t))"], [/* 73 vars 
*/]) = 0
24237 stat("/home/ludo/tmp/Court\303\250s", {st_mode=S_IFDIR|0755, 
st_size=4096, ...}) = 0
24237 execve("/home/ludo/src/guile/libguile/guile", 
["/home/ludo/src/guile/libguile/gu"..., "-L", "/home/ludo/tmp/Court\303\250s", 
"-c", "(use-modules (t))"], [/* 78 vars */]) = 0
24237 stat("/home/ludo/tmp/Court\303\250s", {st_mode=S_IFDIR|0755, 
st_size=4096, ...}) = 0
24256 read(3, "ludo\0x\0Ludovic Courtes\0/home/lud"..., 70) = 70
24237 execve("/home/ludo/src/guile/libguile/.libs/guile", 
["/home/ludo/src/guile/libguile/.l"..., "-L", "/home/ludo/tmp/Court\303\250s", 
"-c", "(use-modules (t))"], [/* 80 vars */]) = 0
24237 stat("/home/ludo/tmp/Court?s/t.scm", 0x7fff16fda150) = -1 ENOENT (No such 
file or directory)
24237 stat("/home/ludo/tmp/Court?s/t", 0x7fff16fda150) = -1 ENOENT (No such 
file or directory)
--8<---------------cut here---------------end--------------->8---

The problem is even worse when the directory is passed through an
environment variable, because in that case even the input decoding is
broken:

--8<---------------cut here---------------start------------->8---
address@hidden:~/tmp/Courtès]$ GUILE_LOAD_PATH=$PWD:... ~/src/guile/meta/guile 
-c '(set-port-encoding! (current-output-port) "UTF-8")(pk %load-path)'

;;; (("/home/ludo/src/guile/guile-readline" "/home/ludo/src/guile/module" 
"/home/ludo/tmp/Court??s"))
--8<---------------cut here---------------end--------------->8---

Ouch!

So, as mentioned in the thread above, 2.2 will not have this problem.
But for 2.0, I can’t even imagine an ugly hack that would help.

Thoughts?

Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]