emacs-devel
[Top][All Lists]
Advanced

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

Re: address@hidden: strange Emacs 22.1 failure due to utf-8-compose-scri


From: Joe Wells
Subject: Re: address@hidden: strange Emacs 22.1 failure due to utf-8-compose-scripts when --no-window-system used]
Date: Thu, 19 Jul 2007 19:08:25 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Joe Wells <address@hidden> writes:

> Kenichi Handa <address@hidden> writes:
>
>> In article <address@hidden>, Joe Wells <address@hidden> writes:
>>
>>> I have reverified the bug.  I tested in a dummy account to make sure
>>> none of my account settings affected things.  I have also verified
>>> that I get the bug when using the console (no X windows).
>>
>>> Here are some more details on my configuration.  I am using
>>> Ubuntu 6.06 LTS (“Dapper Drake”) with all packages fully updated.
>>> Everything I am using is standard Ubuntu except for my kernel and
>>> Emacs.  I am using a custom Linux kernel version 2.6.17 (this version
>>> was fairly current a year ago) with a few extra patches applied by my
>>> hardware middleman.  As I reported in my original report, I built
>>> Emacs with these options:
>>
>>>   export CFLAGS='-O0 -g3 -ggdb'
>>>   ./configure --prefix=$HOME/local2 --enable-debug --disable-nls 
>>> --with-x-toolkit=gtk
>>
>>> I suppose that the “--disable-nls” or “--with-x-toolkit=gtk” options
>>> might contribute to the bug.
>>
>> I configured Emacs 21.1 with the same options, but still
>> can't reproduce the bug (my distribution is Debian).  After
>> starting Emacs, the *Messsage* buffer contains this:
>>
>> ("/home/handa/local2/bin/emacs" "--quick" "--eval" "(setq 
>> utf-8-compose-scripts\ t)" "--load" "lao-util")
>> Loading encoded-kb...done
>> For information about the GNU Project and its goals, type C-h C-p.
>> Loading regexp-opt...done
>> Loading thai-util...
>> Loading mule-util...done
>> Loading thai-util...done
>> Loading devan-util...
>> Loading ind-util...done
>> Loading devan-util...done
>> Loading mlm-util...done
>> Loading tml-util...done
>
> Here is the *Messages* buffer for me which shows the error:
>
> ----------------------------------------------------------------------
> ("/home/jbw/local2/bin/emacs" "--quick" "--eval" "(setq utf-8-compose-scripts 
> t)" "--load" "lao-util")
> Loading encoded-kb...done
> For information about the GNU Project and its goals, type C-h C-p.
> Loading thai-util... [2 times]
> Loading mule-util...
> Loading lao-util... [2 times]
> Loading regexp-opt...
> Loading lao-util... [2 times]
> Loading regexp-opt...
> Loading lao-util... [2 times]
> Loading regexp-opt...
> Loading lao-util...
> utf-8-post-read-conversion: Recursive load: 
> "/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc", 
> "/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc"
> ----------------------------------------------------------------------
>
> There are several differences.  Your *Messages* buffer shows
> regexp-opt being loaded just once and before the other files.  Mine
> shows regexp-opt not being loaded until after several other files, and
> it is loaded repeatedly as part of the recursive load loop.
>
> Mine shows thai-util being loaded _twice_, with the second time
> apparently happening during the first time.
>
> Yours _never_ loads lao-util.
>
>> If you don't supply "--load lao-util", does your emacs work
>> well?
>
> No, sooner or later something else causes it to be loaded.  It seems
> that any time an attempt is made to load “mule-util”, “lao-util”, or
> “regexp-opt”, a recursive loading loop results.  A quick check reveals
> I get the same error with both of these command lines:
>
>   emacs --no-window-system --quick --eval '(setq utf-8-compose-scripts t)' 
> --load "mule-util"
>
>   emacs --no-window-system --quick --eval '(setq utf-8-compose-scripts t)' 
> --load "regexp-opt"
>
>> How about "--load lao-util.el" instead?
>
> I get the same problem if I load “lao-util.el” instead of “lao-util”.
>
> -- 
> Joe
>
> P.S.  Unfortunately, doing (setq debug-on-error t) before (load
> "lao-util") does not trigger the debugger, which makes it harder to
> figure out just what is happening.

Well, debug-on-error is not working (presumably because the debugger
itself is failing for the same reason), but stack-trace-on-error does
work!  I've appended the full stack trace below.

It seems that an additional ingredient is needed to trigger the bug:
the path to Emacs's installed location must include a symbolic link.
On my system, Emacs is installed under “/home/jbw/local2”, which is a
symbolic link to “/mnt/extra-space-02/jbw/local”.

Loading is canonicalizing paths using the function file-truename which
invokes file-symlink-p which uses the macro DECODE_FILE which invokes
code_convert_string_norecord using the value of
default-file-name-coding-system which is mule-utf-8.  The function
code_convert_string_norecord makes an attempt to prevent character
composition with the line “coding.composing = COMPOSITION_DISABLED;”,
but this seems to be ignored (or be affecting a completely different
code path for character composition).  The function
code_convert_string_norecord invokes decode_coding_string which
invokes run_pre_post_conversion_on_str if the coding system has a
post-read-conversion property.  The coding system mule-utf-8 has as
its value of its post-read-conversion property the function
utf-8-post-read-conversion.  The function
run_pre_post_conversion_on_str then invokes
utf-8-post-read-conversion, which attempts to run lao-compose-region.
The function lao-compose-region is autoloaded from “lao-util.el”, and
loading that file defines the initial value of a variable by invoking
“regexp-opt” which is autoloaded from “regexp-opt.el”.  There is some
additional complication.  See the stack trace below.

What seems to be needed is some way of telling the
post-read-conversion function to do all of its usual work except for
any work for character composition.

Joe

----------------------------------------------------------------------
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/debug.elc")
  debug(error (error "Recursive load" 
"/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" 
"/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc"))
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  
file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc")
  regexp-opt(("ngh" "kh" "qh" "ng" "th" "dh" "hp" "fh" "ph" "gn" "hh" "nh" "mh" 
"lh" "yh" "wh" "hl" "hy" "hn" "hm" "k" "j" "s" "x" "y" "d" "t" "n" "b" "p" "f" 
"m" "l" "r" "v" "w" "O" "h"))
  byte-code("\306\307\310\311\"!\312\307\310\311       \"!\313\307\310\311
\"!\312\307\310\311\"!\314\307\310\311\"!\315\307\310\311
\"!\260\207" [lao-transcription-consonant-alist 
lao-transcription-semi-vowel-alist lao-transcription-vowel-alist 
lao-transcription-maa-sakod-alist lao-transcription-tone-alist 
lao-transcription-punctuation-alist "\\(" regexp-opt mapcar car "\\)\\(" 
"\\)?\\(\\(" "\\)?\\(" "\\)?\\)?\\|"] 15)
  (defconst lao-transcription-pattern (byte-code 
"\306\307\310\311\"!\312\307\310\311  \"!\313\307\310\311
\"!\312\307\310\311\"!\314\307\310\311\"!\315\307\310\311
\"!\260\207" [lao-transcription-consonant-alist 
lao-transcription-semi-vowel-alist lao-transcription-vowel-alist 
lao-transcription-maa-sakod-alist lao-transcription-tone-alist 
lao-transcription-punctuation-alist "\\(" regexp-opt mapcar car "\\)\\(" 
"\\)?\\(\\(" "\\)?\\(" "\\)?\\)?\\|"] 15) 
("/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" . 10639))
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/language" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc")
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  
file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc")
  regexp-opt(("ngh" "kh" "qh" "ng" "th" "dh" "hp" "fh" "ph" "gn" "hh" "nh" "mh" 
"lh" "yh" "wh" "hl" "hy" "hn" "hm" "k" "j" "s" "x" "y" "d" "t" "n" "b" "p" "f" 
"m" "l" "r" "v" "w" "O" "h"))
  byte-code("\306\307\310\311\"!\312\307\310\311       \"!\313\307\310\311
\"!\312\307\310\311\"!\314\307\310\311\"!\315\307\310\311
\"!\260\207" [lao-transcription-consonant-alist 
lao-transcription-semi-vowel-alist lao-transcription-vowel-alist 
lao-transcription-maa-sakod-alist lao-transcription-tone-alist 
lao-transcription-punctuation-alist "\\(" regexp-opt mapcar car "\\)\\(" 
"\\)?\\(\\(" "\\)?\\(" "\\)?\\)?\\|"] 15)
  (defconst lao-transcription-pattern (byte-code 
"\306\307\310\311\"!\312\307\310\311  \"!\313\307\310\311
\"!\312\307\310\311\"!\314\307\310\311\"!\315\307\310\311
\"!\260\207" [lao-transcription-consonant-alist 
lao-transcription-semi-vowel-alist lao-transcription-vowel-alist 
lao-transcription-maa-sakod-alist lao-transcription-tone-alist 
lao-transcription-punctuation-alist "\\(" regexp-opt mapcar car "\\)\\(" 
"\\)?\\(\\(" "\\)?\\(" "\\)?\\)?\\|"] 15) 
("/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc" . 10639))
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/language" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/language/lao-util.elc")
  lao-compose-region(30 1)
  utf-8-post-read-conversion(29)
  file-symlink-p("/home/jbw/local2")
  file-truename("/home/jbw/local2" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share" (91) ((("/home/jbw/" . "/home/jbw/") 
("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp" (91) ((("/home/jbw/" . 
"/home/jbw/") ("/home/" . "/home/"))))
  file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp" (91) 
((("/home/jbw/" . "/home/jbw/") ("/home/" . "/home/"))))
  
file-truename("/home/jbw/local2/share/emacs/22.1/lisp/emacs-lisp/regexp-opt.elc")
  load("regexp-opt")
  eval((load "regexp-opt"))
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp)
----------------------------------------------------------------------




reply via email to

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