unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Current CVS doesn't bootstrap
@ 2004-11-06 11:25 Eli Zaretskii
  2004-11-06 14:16 ` Andreas Schwab
  2004-11-06 14:40 ` Andreas Schwab
  0 siblings, 2 replies; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-06 11:25 UTC (permalink / raw)


With today's CVS, I get this error message from "make bootstrap":

    Compiling /home/e/eliz/emacs.cvs/emacs/lisp/./printing.el

    In toplevel form:
    printing.el:2474:1:Error: Malformed menu in easy-menu: (keymap)
    make[1]: *** [compile] Error 1
    make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/lisp'
    make: *** [bootstrap] Error 2

This is a freshly-checkedout tree, so I don't think stale files can be
the culprit.

TIA

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 11:25 Eli Zaretskii
@ 2004-11-06 14:16 ` Andreas Schwab
  2004-11-06 14:40 ` Andreas Schwab
  1 sibling, 0 replies; 53+ messages in thread
From: Andreas Schwab @ 2004-11-06 14:16 UTC (permalink / raw)
  Cc: emacs-devel

"Eli Zaretskii" <eliz@gnu.org> writes:

> With today's CVS, I get this error message from "make bootstrap":
>
>     Compiling /home/e/eliz/emacs.cvs/emacs/lisp/./printing.el
>
>     In toplevel form:
>     printing.el:2474:1:Error: Malformed menu in easy-menu: (keymap)
>     make[1]: *** [compile] Error 1
>     make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/lisp'
>     make: *** [bootstrap] Error 2
>
> This is a freshly-checkedout tree, so I don't think stale files can be
> the culprit.

It works again when reverting the last change to easymenu.el.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 11:25 Eli Zaretskii
  2004-11-06 14:16 ` Andreas Schwab
@ 2004-11-06 14:40 ` Andreas Schwab
  2004-11-06 16:16   ` Eli Zaretskii
  1 sibling, 1 reply; 53+ messages in thread
From: Andreas Schwab @ 2004-11-06 14:40 UTC (permalink / raw)
  Cc: Stefan Monnier, emacs-devel

"Eli Zaretskii" <eliz@gnu.org> writes:

> With today's CVS, I get this error message from "make bootstrap":
>
>     Compiling /home/e/eliz/emacs.cvs/emacs/lisp/./printing.el
>
>     In toplevel form:
>     printing.el:2474:1:Error: Malformed menu in easy-menu: (keymap)
>     make[1]: *** [compile] Error 1
>     make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/lisp'
>     make: *** [bootstrap] Error 2

Should work again.

Stefan, I have made up a change log entry from your commit message.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 14:40 ` Andreas Schwab
@ 2004-11-06 16:16   ` Eli Zaretskii
  2004-11-06 22:48     ` Luc Teirlinck
  0 siblings, 1 reply; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-06 16:16 UTC (permalink / raw)
  Cc: monnier, emacs-devel

> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org
> From: Andreas Schwab <schwab@suse.de>
> Date: Sat, 06 Nov 2004 15:40:23 +0100
> 
> >     Compiling /home/e/eliz/emacs.cvs/emacs/lisp/./printing.el
> >
> >     In toplevel form:
> >     printing.el:2474:1:Error: Malformed menu in easy-menu: (keymap)
> >     make[1]: *** [compile] Error 1
> >     make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/lisp'
> >     make: *** [bootstrap] Error 2
> 
> Should work again.

Thanks, it does.

Btw, when I did a "cvs up" and tried to continue the failed bootstrap,
it failed.  The commands I typed after "cvs up" were:

   ./configure
   make bootstrap.

The last portion of the Make output is attached below.  I worked
around the problem by doing a "make maintainer-clean" and then
"make bootstrap".

Any ideas, anyone?

    Finding pointers to doc strings...
    Finding pointers to doc strings...done
    Dumping under names emacs and emacs-21.3.50
    67252 pure bytes used
    mv -f emacs bootstrap-emacs
    make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/src'
    (cd lisp; make  bootstrap EMACS=../src/bootstrap-emacs)
    make[1]: Entering directory `/home/e/eliz/emacs.cvs/emacs/lisp'
    wd=/home/e/eliz/emacs.cvs/emacs/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* ) ;; *) wins="$wins $wd/$file" ;; esac; done; \
    for file in $wins; do \
       /home/e/eliz/emacs.cvs/emacs/lisp/../update-subdirs $file; \
    done;
    wd=/home/e/eliz/emacs.cvs/emacs/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* ) ;; *) wins="$wins $wd/$file" ;; esac; done; \
    echo Directories: $wins; \
    ../src/bootstrap-emacs -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/home/e/eliz/emacs.cvs/emacs/lisp/loaddefs.el")' -f batch-update-autoloads $wins
    Directories: /home/e/eliz/emacs.cvs/emacs/lisp/. /home/e/eliz/emacs.cvs/emacs/lisp/./calc /home/e/eliz/emacs.cvs/emacs/lisp/./gnus /home/e/eliz/emacs.cvs/emacs/lisp/./calendar /home/e/eliz/emacs.cvs/emacs/lisp/./emacs-lisp /home/e/eliz/emacs.cvs/emacs/lisp/./emulation /home/e/eliz/emacs.cvs/emacs/lisp/./eshell /home/e/eliz/emacs.cvs/emacs/lisp/./international /home/e/eliz/emacs.cvs/emacs/lisp/./language /home/e/eliz/emacs.cvs/emacs/lisp/./mail /home/e/eliz/emacs.cvs/emacs/lisp/./mh-e /home/e/eliz/emacs.cvs/emacs/lisp/./net /home/e/eliz/emacs.cvs/emacs/lisp/./obsolete /home/e/eliz/emacs.cvs/emacs/lisp/./play /home/e/eliz/emacs.cvs/emacs/lisp/./progmodes /home/e/eliz/emacs.cvs/emacs/lisp/./term /home/e/eliz/emacs.cvs/emacs/lisp/./textmodes /home/e/eliz/emacs.cvs/emacs/lisp/./toolbar /home/e/eliz/emacs.cvs/emacs/lisp/./url
    Cannot open load file: cl-macs
    make[1]: *** [autoloads] Error 255
    make[1]: Leaving directory `/home/e/eliz/emacs.cvs/emacs/lisp'
    make: *** [bootstrap] Error 2

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 16:16   ` Eli Zaretskii
@ 2004-11-06 22:48     ` Luc Teirlinck
  2004-11-07  0:35       ` Andreas Schwab
  2004-11-07  5:07       ` Eli Zaretskii
  0 siblings, 2 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-06 22:48 UTC (permalink / raw)
  Cc: schwab, monnier, emacs-devel

Eli Zaretskii wrote:

   Btw, when I did a "cvs up" and tried to continue the failed bootstrap,
   it failed.  The commands I typed after "cvs up" were:

      ./configure
      make bootstrap.

   The last portion of the Make output is attached below.  I worked
   around the problem by doing a "make maintainer-clean" and then
   "make bootstrap".

   Any ideas, anyone?

I believe we discussed this before.  We either have to document in
INSTALL.CVS that you have to do `make maintainer-clean' before `make
bootstrap' or we have to make sure that `make bootstrap' removes the
.elc files automatically, as it used to do.  In the previous
discussion, I believe I understood that we decided on the latter and
that Kim planned to implement it, but I might have misunderstood.

Note that the problems with failing to do `make maintainer-clean' are
not just that bootstrapping may fail.  Sometimes one is able to
bootstrap without any problems, but the compiled files that Emacs is
using are not the same as the source files.  This is actually worse,
because one usually will not notice this and it can lead to plenty of
confusion when trying to debug stuff.  That is why I always run `make
maintainer-clean' before `make bootstrap'.  I ran into problems
continuously before I started doing so.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 22:48     ` Luc Teirlinck
@ 2004-11-07  0:35       ` Andreas Schwab
  2004-11-07  1:25         ` Luc Teirlinck
                           ` (2 more replies)
  2004-11-07  5:07       ` Eli Zaretskii
  1 sibling, 3 replies; 53+ messages in thread
From: Andreas Schwab @ 2004-11-07  0:35 UTC (permalink / raw)
  Cc: eliz, monnier, emacs-devel

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> I believe we discussed this before.  We either have to document in
> INSTALL.CVS that you have to do `make maintainer-clean' before `make
> bootstrap' or we have to make sure that `make bootstrap' removes the
> .elc files automatically, as it used to do.

Alternatively, we could implement an option that tells load to ignore
*.elc files that are out of date and load the *.el file instead.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  0:35       ` Andreas Schwab
@ 2004-11-07  1:25         ` Luc Teirlinck
  2004-11-07  1:45           ` Andreas Schwab
  2004-11-07  1:33         ` Luc Teirlinck
  2004-11-07 18:04         ` Richard Stallman
  2 siblings, 1 reply; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07  1:25 UTC (permalink / raw)
  Cc: eliz, monnier, emacs-devel

Andreas Schwab wrote:

   Alternatively, we could implement an option that tells load to ignore
   *.elc files that are out of date and load the *.el file instead.

This would actually be a change that would be far more drastic and
general than the two alternatives.  Its effect would not be limited to
bootstrapping.

I believe we discussed this before and the reasons for not doing so
still remain valid.  If I make changes to a .el file, then at a given
moment I have to save these to disk.  But that does not mean that the
file is ready for use.  It only is when I compile and take a look at
what the compiler has to say.

Also, it could lead to a slowdown in the functions in the file, which
might be confusing to the user, who might not know that the .el file
is being used.

Moreover, if a .el file is newer than the .elc file, then I _believe_
that the present version of make bootstrap _already_ recompiles
anyway.  (It is a long time ago that I did a `make bootstrap' without
a prior `make maintainer-clean', however.) 

I believe that your proposed solution would not help with some of the
most common problems that arise with the current version of `make
bootstrap' (without prior `make maintainer-clean').  One of these is
changes in byte compilation.

Another problem (that can lead to very confusing results) is if you
make changes to a bunch of files, revert the changes and forget to
manually recompile some of the reverted files.  Now the out of date
.elc files are _newer_ than the source files and thus are not out of
date in as far as the computer is concerned.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  0:35       ` Andreas Schwab
  2004-11-07  1:25         ` Luc Teirlinck
@ 2004-11-07  1:33         ` Luc Teirlinck
  2004-11-07  2:07           ` Andreas Schwab
  2004-11-07 18:04         ` Richard Stallman
  2 siblings, 1 reply; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07  1:33 UTC (permalink / raw)
  Cc: eliz, monnier, emacs-devel

Andreas Schwab wrote:

   Alternatively, we could implement an option that tells load to ignore
   *.elc files that are out of date and load the *.el file instead.

I believe that I forgot to read the word "option".  But that would
mean that we would still have to choose one of the two other
alternatives for users who did not want the option.  Also, as I
already pointed out, I do not believe that the option would solve the
most common present problems with `make bootstrap' without `make
maintainer-clean', even for those users who might choose to use the
option.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  1:25         ` Luc Teirlinck
@ 2004-11-07  1:45           ` Andreas Schwab
  2004-11-07  2:42             ` Satyaki Das
  0 siblings, 1 reply; 53+ messages in thread
From: Andreas Schwab @ 2004-11-07  1:45 UTC (permalink / raw)
  Cc: eliz, monnier, emacs-devel

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> Andreas Schwab wrote:
>
>    Alternatively, we could implement an option that tells load to ignore
>    *.elc files that are out of date and load the *.el file instead.
>
> This would actually be a change that would be far more drastic and
> general than the two alternatives.  Its effect would not be limited to
> bootstrapping.

It's only an option, maybe even hidden.  I never proposed to enable that
by default.

> Moreover, if a .el file is newer than the .elc file, then I _believe_
> that the present version of make bootstrap _already_ recompiles
> anyway.  (It is a long time ago that I did a `make bootstrap' without
> a prior `make maintainer-clean', however.) 

But the problem is that the file to be compiled may require other files
with a out-of-date elc files.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  1:33         ` Luc Teirlinck
@ 2004-11-07  2:07           ` Andreas Schwab
  0 siblings, 0 replies; 53+ messages in thread
From: Andreas Schwab @ 2004-11-07  2:07 UTC (permalink / raw)
  Cc: eliz, monnier, emacs-devel

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> Andreas Schwab wrote:
>
>    Alternatively, we could implement an option that tells load to ignore
>    *.elc files that are out of date and load the *.el file instead.
>
> I believe that I forgot to read the word "option".  But that would
> mean that we would still have to choose one of the two other
> alternatives for users who did not want the option.

I believe that enabling that option unconditionally during "make
bootstrap" will prevent all future occurences of this problem.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  1:45           ` Andreas Schwab
@ 2004-11-07  2:42             ` Satyaki Das
  2004-11-07  3:15               ` Luc Teirlinck
  0 siblings, 1 reply; 53+ messages in thread
From: Satyaki Das @ 2004-11-07  2:42 UTC (permalink / raw)
  Cc: eliz, Luc Teirlinck, monnier, emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> > Moreover, if a .el file is newer than the .elc file, then I _believe_
> > that the present version of make bootstrap _already_ recompiles
> > anyway.  (It is a long time ago that I did a `make bootstrap' without
> > a prior `make maintainer-clean', however.) 
> 
> But the problem is that the file to be compiled may require other files
> with a out-of-date elc files.

Yes, this is exactly the problem, especially if the code that you
are compiling have macros.  Then the old macros are used in the
new .elc files and all hell breaks loose.

We came across this in MH-E.  The solution that we came up with
was to add an advice to require to load the uncompiled file
instead of the .elc file which might be stale.  The code is in
lisp/mh-e/mh-acros.el.  For general use during emacs compilation,
I would vote for something a little more general where we check
the time-stamps of the .el and .elc file and load the .el if the
.elc is older.

Satyaki

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  2:42             ` Satyaki Das
@ 2004-11-07  3:15               ` Luc Teirlinck
  0 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07  3:15 UTC (permalink / raw)
  Cc: schwab, eliz, monnier, emacs-devel

As I already pointed out, the "loading .el if newer than .elc"
solution will solve _some_ problems caused by the change in `make
bootstrap' but not all.  Removing all .elc files during `make
bootstrap', as used to be the case, will solve not only the MH-E type
problems but all other problems created by the unfortunate change to
`make bootstrap' as well.  It would be a lot more solid.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-06 22:48     ` Luc Teirlinck
  2004-11-07  0:35       ` Andreas Schwab
@ 2004-11-07  5:07       ` Eli Zaretskii
  2004-11-07 17:43         ` Luc Teirlinck
                           ` (2 more replies)
  1 sibling, 3 replies; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-07  5:07 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Sat, 6 Nov 2004 16:48:14 -0600 (CST)
> From: Luc Teirlinck <teirllm@dms.auburn.edu>
> CC: schwab@suse.de, monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> Eli Zaretskii wrote:
> 
>    Btw, when I did a "cvs up" and tried to continue the failed bootstrap,
>    it failed.  The commands I typed after "cvs up" were:
> 
>       ./configure
>       make bootstrap.
> 
>    The last portion of the Make output is attached below.  I worked
>    around the problem by doing a "make maintainer-clean" and then
>    "make bootstrap".
> 
>    Any ideas, anyone?
> 
> I believe we discussed this before.

Can you point me to these discussions?  The only one I found by
searching the archives was inconclusive (because the problem
disappeared and the OP couldn't reproduce it anymore).

> We either have to document in INSTALL.CVS that you have to do `make
> maintainer-clean' before `make bootstrap' or we have to make sure
> that `make bootstrap' removes the .elc files automatically, as it
> used to do.

I don't think this is the right solution.  First, either
maintainer-clean or removing *.elc files causes the next bootstrap to
run much longer, so we should avoid that as much as we could.
Ideally, "make maintainer-clean" should be used only if "make
bootstrap" fails (and that is something that we should add to
INSTALL.CVS _right_now_).  We should look for a way to allow the
bootstrap to continue from the point the last one failed, without the
need to recompile all Lisp files.

In any case, I don't believe that stale *.elc files were the reason
for the failure in my case, because all "cvs up" did was to update a
single Lisp file: easymenu.el.  Why should that cause a failure with
loading cl-macs, and how removing *.elc files should fix that is
something I need to understand before I agree that the solutions you
mentioned are reasonable.  After all, the only file that failed to
compile was printing.el, so after updating easymenu.el, I'd expect the
bootstrap to proceed right from that point and thus time succeed,
right?  And yet it fails.  Why?

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  5:07       ` Eli Zaretskii
@ 2004-11-07 17:43         ` Luc Teirlinck
  2004-11-07 18:25           ` Han Boetes
                             ` (2 more replies)
  2004-11-07 18:07         ` Luc Teirlinck
  2004-11-07 18:47         ` Luc Teirlinck
  2 siblings, 3 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 17:43 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:

   > We either have to document in INSTALL.CVS that you have to do `make
   > maintainer-clean' before `make bootstrap' or we have to make sure
   > that `make bootstrap' removes the .elc files automatically, as it
   > used to do.

   I don't think this is the right solution.  First, either
   maintainer-clean or removing *.elc files causes the next bootstrap to
   run much longer, so we should avoid that as much as we could.
   Ideally, "make maintainer-clean" should be used only if "make
   bootstrap" fails (and that is something that we should add to
   INSTALL.CVS _right_now_).

Most of the time the problems caused by omitting `make maintainer-clean'
are not that bootstrapping fails, but that various bugs occur while
running the bootstrapped Emacs.  Usually, people have not the slightest
idea that these bugs are caused by failure to run `make maintainer-clean'.
I remember having seen many examples of fake bug reports caused by this.

I have a 1.7 dual Xeon.  That was a pretty fast machine when I bought
it three years ago, but today, just about any computer I see
advertised is faster and you can easily get something twice as fast.
On my machine, the entire:

make maintainer-clean
./configure
make bootstrap

takes less than 15 minutes.  Omitting the `make maintainer-clean'
probably saves about 7 of those 15 minutes and (to me) that is not
worth worrying about the potential bugs it introduces.  It are 7
minutes of my computer's time, not of my time.  I noticed on several
sites that many people are _trying_ to do the above procedure, but are
using `make-distclean', mistakenly believing that it will do what
`make maintainer-clean' does.

I realize that on older machines, and especially on operating systems
that can only run one process at a time, the situation may be very
different.

I propose, for now, the following patch to INSTALL.CVS.  Andreas'
proposed change would eliminate one of the three problems listed in
that patch, but not the two others.  I do not know whether that list
is exhaustive.  (I would guess not).

If the last added paragraph would seem to long or technical, it could
be replaced by one line saying: "`make distclean' is not a valid
substitute for `make maintainer-clean'".

===File ~/INSTALL.CVS-diff==================================
*** INSTALL.CVS	02 Apr 2004 12:04:32 -0600	1.3
--- INSTALL.CVS	07 Nov 2004 10:44:55 -0600	
***************
*** 11,19 ****
  The bootstrap process makes sure all necessary files are rebuilt
  before it builds the final Emacs binary.
  
  Normally, it is not necessary to use "make bootstrap" after every CVS
! update.  Unless there are problems, we suggest the following
! procedure:
  
    $ ./configure
    $ make
--- 11,23 ----
  The bootstrap process makes sure all necessary files are rebuilt
  before it builds the final Emacs binary.
  
+ The best way to proceed after a CVS update depends on how fast or busy
+ your computer is, whether your operating system can run more than one
+ job at a time and on how badly you want to avoid potential bugs.
+ 
  Normally, it is not necessary to use "make bootstrap" after every CVS
! update.  Thus, if you have a slow computer, or if you can only run one
! process at a time, we suggest the following procedure:
  
    $ ./configure
    $ make
***************
*** 39,44 ****
--- 43,73 ----
  
  If either of above procedures fails, try "make bootstrap".
  
+ If this still fails, do:
+ 
+ make maintainer-clean
+ ./configure
+ make bootstrap
+ 
+ You may also want to do this if you report bugs that other people can
+ not reproduce.  In fact, if you have a reasonably fast computer that
+ can run more than one process at a time you may always want to do the
+ above straight away, as it is the only way to be totally sure that
+ your Emacs is completely up to date.  However, `make maintainer-clean'
+ can slow down `make bootstrap' considerably on slower computers.
+ 
+ `make maintainer-clean' removes all .elc files, so that the subsequent
+ `make bootstrap' will recompile them.  Note that just doing `make
+ distclean' does not do this.  Even without prior `make maintainer-clean',
+ `make bootstrap' will automatically recompile all files whose .elc
+ file is newer than their .el files.  But this does not prevent all
+ problems.  For instance, problems arise when a file requires an out of
+ date file that has not been recompiled yet, when changes to byte
+ compiling are made, when the file that should be loaded is actually
+ older than the wrong file and similar situations.  All C files are
+ automatically recompiled by all procedures listed above, so there is
+ no need to worry about them.
+ 
  Users of non-Posix systems (MS-Windows etc.) should run the
  platform-specific configuration scripts (nt/configure.bat, config.bat,
  etc.) before "make bootstrap" or "make"; the rest of the procedure is
============================================================

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  0:35       ` Andreas Schwab
  2004-11-07  1:25         ` Luc Teirlinck
  2004-11-07  1:33         ` Luc Teirlinck
@ 2004-11-07 18:04         ` Richard Stallman
  2004-11-07 18:55           ` Luc Teirlinck
  2 siblings, 1 reply; 53+ messages in thread
From: Richard Stallman @ 2004-11-07 18:04 UTC (permalink / raw)
  Cc: eliz, teirllm, monnier, emacs-devel

    > I believe we discussed this before.  We either have to document in
    > INSTALL.CVS that you have to do `make maintainer-clean' before `make
    > bootstrap' or we have to make sure that `make bootstrap' removes the
    > .elc files automatically, as it used to do.

What was the motive for changing it not to do that?

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  5:07       ` Eli Zaretskii
  2004-11-07 17:43         ` Luc Teirlinck
@ 2004-11-07 18:07         ` Luc Teirlinck
  2004-11-07 18:47         ` Luc Teirlinck
  2 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 18:07 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:

   >    The last portion of the Make output is attached below.  I worked
   >    around the problem by doing a "make maintainer-clean" and then
   >    "make bootstrap".
   > 
   >    Any ideas, anyone?
   > 
   > I believe we discussed this before.

   Can you point me to these discussions?  The only one I found by
   searching the archives was inconclusive (because the problem
   disappeared and the OP couldn't reproduce it anymore).

To avoid confusion:  I was talking about removing or not removing
.elc files at the beginnning of bootstrapping.

We discussed this in the thread that started talking about this at:

http://lists.gnu.org/archive/html/emacs-devel/2004-09/msg00151.html

That one concrete message in question is characteristic of the fact
that many (I believe most) people mistakenly seem to believe that
`make bootstrap" and "certainly" `make distclean' do remove all .elc
files.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 17:43         ` Luc Teirlinck
@ 2004-11-07 18:25           ` Han Boetes
  2004-11-07 19:05             ` Luc Teirlinck
  2004-11-07 18:38           ` David Kastrup
  2004-11-07 22:28           ` Eli Zaretskii
  2 siblings, 1 reply; 53+ messages in thread
From: Han Boetes @ 2004-11-07 18:25 UTC (permalink / raw)


Luc Teirlinck wrote:
> I noticed on several sites that many people are _trying_ to do
> the above procedure, but are using `make-distclean', mistakenly
> believing that it will do what `make maintainer-clean' does.

Would it be an idea to replace the distclean target with the
maintainer-clean target?



# Han

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 17:43         ` Luc Teirlinck
  2004-11-07 18:25           ` Han Boetes
@ 2004-11-07 18:38           ` David Kastrup
  2004-11-07 19:33             ` Luc Teirlinck
  2004-11-07 22:28           ` Eli Zaretskii
  2 siblings, 1 reply; 53+ messages in thread
From: David Kastrup @ 2004-11-07 18:38 UTC (permalink / raw)
  Cc: eliz, emacs-devel

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> I have a 1.7 dual Xeon.  That was a pretty fast machine when I
> bought it three years ago, but today, just about any computer I see
> advertised is faster and you can easily get something twice as fast.

If you pay for it.  My laptop is a 600MHz single Pentium III, and my
desktop is a 200MHz AMD K6II.

Both are perfectly fine running Emacs/LaTeX and quite a few add-ons
(including the interactive preview-latex) for text processing.  There
is little point in acquiring more demanding hardware (and in the
laptop area, you nowadays have to choose between ridiculously small
and ridiculously heavy ones, either completely unsuitable for work or
for transportation).  And I am living in a country with quite more
than average income when compared with the rest of the world that
could be interested in running Emacs.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07  5:07       ` Eli Zaretskii
  2004-11-07 17:43         ` Luc Teirlinck
  2004-11-07 18:07         ` Luc Teirlinck
@ 2004-11-07 18:47         ` Luc Teirlinck
  2 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 18:47 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:

   > I believe we discussed this before.

   Can you point me to these discussions?

I believe the discussion on the thread I sent before continued on
another one.  I believe that the message below was the final one at
that time and represented a consensus of people involved in the
discussion at the time.  It never got implemented.

http://lists.gnu.org/archive/html/emacs-devel/2004-09/msg00720.html

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 18:04         ` Richard Stallman
@ 2004-11-07 18:55           ` Luc Teirlinck
  2004-11-07 22:10             ` Luc Teirlinck
  2004-11-07 23:26             ` Kim F. Storm
  0 siblings, 2 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 18:55 UTC (permalink / raw)
  Cc: schwab, eliz, monnier, emacs-devel

Richard Stallman wrote:

       > I believe we discussed this before.  We either have to document in
       > INSTALL.CVS that you have to do `make maintainer-clean' before `make
       > bootstrap' or we have to make sure that `make bootstrap' removes the
       > .elc files automatically, as it used to do.

   What was the motive for changing it not to do that?

To make bootstrapping run faster.  We discussed this before and
decided to have `make bootstrap' remove the .elc files once again, but
provide some alternate version bootstrap-build that does not do that.

Essentially:

http://lists.gnu.org/archive/html/emacs-devel/2004-09/msg00720.html

Again, this was never implemented.  I am not familiar enough with the
Makefiles to do this myself.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 18:25           ` Han Boetes
@ 2004-11-07 19:05             ` Luc Teirlinck
  0 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 19:05 UTC (permalink / raw)
  Cc: emacs-devel

Han Boetes wrote:

   Would it be an idea to replace the distclean target with the
   maintainer-clean target?

I believe that the argument for not doing that is that the .elc files
are included with Emacs releases, and hence should not be removed by
`make distclean'.  .elc files are not included with CVS Emacs (hence
the problems and the confusion), but CVS Emacs is technically not a
"distribution".

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 18:38           ` David Kastrup
@ 2004-11-07 19:33             ` Luc Teirlinck
  2004-11-07 19:42               ` David Kastrup
                                 ` (2 more replies)
  0 siblings, 3 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 19:33 UTC (permalink / raw)
  Cc: eliz, emacs-devel

David Kastrup wrote:

   If you pay for it.  My laptop is a 600MHz single Pentium III, and my
   desktop is a 200MHz AMD K6II.

There are two points I wanted to make:

1.  The main recommended procedure described in INSTALL.CVS does not
remove the .elc files.  It only recommends to do `make bootstrap' in
case of problems.  But the current version of `make bootstrap' is not
likely to solve these problems, most of which are caused by failing to
recompile .el files.

2.  The second point I was trying to make, which I guess is what you
reacted to, is that for people that _do_ have reasonably fast
machines, _always_ doing a `make maintainer-clean' might be better
than the procedure recommended in INSTALL.CVS.  It can save many
people a lot of time worrying about fake bugs.  If you do have
resources, you might as well take advantage of them.

INSTALL.CVS already describes a procedure for people with slower
computers to use.  The proposed `make bootstrap-build' would preserve
the current `make-bootstrap' behavior as a second alternative for slow
computers.

But currently people are mislead into believing that `make bootstrap'
is guaranteed to produce something completely equivalent to a fresh
checkout.  This very far from the case with the current version.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 19:33             ` Luc Teirlinck
@ 2004-11-07 19:42               ` David Kastrup
  2004-11-07 20:21                 ` Luc Teirlinck
  2004-11-07 20:34               ` Piet van Oostrum
  2004-11-07 20:37               ` Piet van Oostrum
  2 siblings, 1 reply; 53+ messages in thread
From: David Kastrup @ 2004-11-07 19:42 UTC (permalink / raw)
  Cc: eliz, emacs-devel

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> David Kastrup wrote:
>
>    If you pay for it.  My laptop is a 600MHz single Pentium III, and my
>    desktop is a 200MHz AMD K6II.
>
> There are two points I wanted to make:
>
> 1.  The main recommended procedure described in INSTALL.CVS does not
> remove the .elc files.  It only recommends to do `make bootstrap' in
> case of problems.  But the current version of `make bootstrap' is
> not likely to solve these problems, most of which are caused by
> failing to recompile .el files.
>
> 2.  The second point I was trying to make, which I guess is what you
> reacted to, is that for people that _do_ have reasonably fast
> machines, _always_ doing a `make maintainer-clean' might be better
> than the procedure recommended in INSTALL.CVS.  It can save many
> people a lot of time worrying about fake bugs.  If you do have
> resources, you might as well take advantage of them.

Well, if that were the points you were trying to make, you watered
them down unnecessarily with introducing your hardware.  It is ok to
tell people what bargains in reliability versus performance they can
make.  It is not ok to assume that performance may never be an issue.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 19:42               ` David Kastrup
@ 2004-11-07 20:21                 ` Luc Teirlinck
  2004-11-08  0:15                   ` Robert J. Chassell
  0 siblings, 1 reply; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 20:21 UTC (permalink / raw)
  Cc: eliz, emacs-devel

David Kastrup wrote:

   Well, if that were the points you were trying to make, you watered
   them down unnecessarily with introducing your hardware.

I did that to give concrete idea of the times that were involved on
fast computers, with concrete numbers.

   It is ok to tell people what bargains in reliability versus
   performance they can make.  It is not ok to assume that performance
   may never be an issue.

I believe that in my proposed patch to INSTALL.CVS, I did the former
and not the latter.  Both in my patch and in my preceding remarks I
mentioned that the OS may only be able to run one job at a time, in
which case performance is obviously a big issue.

I believe that you read things in my message that were not in there.

Maybe part of my message implied a conjecture that the majority of new
computers bought _today_ would be fast enough.  Maybe that conjecture
was wrong, but anyway, it is irrelevant since people do not buy a new
computer every year.  The only conclusion I made out of that was that
it would be good to mention the _possibility_ of always using `make
maintainer-clean', since the number of people for which it makes sense
is already non-trivial and will be growing over time.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 19:33             ` Luc Teirlinck
  2004-11-07 19:42               ` David Kastrup
@ 2004-11-07 20:34               ` Piet van Oostrum
  2004-11-07 20:37               ` Piet van Oostrum
  2 siblings, 0 replies; 53+ messages in thread
From: Piet van Oostrum @ 2004-11-07 20:34 UTC (permalink / raw)


>>>>> Luc Teirlinck <teirllm@dms.auburn.edu> (LT) wrote:

LT> David Kastrup wrote:
LT>    If you pay for it.  My laptop is a 600MHz single Pentium III, and my
LT>    desktop is a 200MHz AMD K6II.

LT> There are two points I wanted to make:

LT> 1.  The main recommended procedure described in INSTALL.CVS does not
LT> remove the .elc files.  It only recommends to do `make bootstrap' in
LT> case of problems.  But the current version of `make bootstrap' is not
LT> likely to solve these problems, most of which are caused by failing to
LT> recompile .el files.

Why not include a `make -C lisp recompile' as the first step of
 make bootstrap? 
-- 
Piet van Oostrum <piet@cs.uu.nl>
URL: http://www.cs.uu.nl/~piet [PGP]
Private email: P.van.Oostrum@hccnet.nl

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 19:33             ` Luc Teirlinck
  2004-11-07 19:42               ` David Kastrup
  2004-11-07 20:34               ` Piet van Oostrum
@ 2004-11-07 20:37               ` Piet van Oostrum
  2004-11-07 21:09                 ` Luc Teirlinck
  2004-11-07 21:20                 ` Luc Teirlinck
  2 siblings, 2 replies; 53+ messages in thread
From: Piet van Oostrum @ 2004-11-07 20:37 UTC (permalink / raw)


Sorry, I see you need to have a working emacs to do the 'make -C lisp
recompile'. An alternative would be to remove only those .elc files that
are older than their corresponding .el files.
-- 
Piet van Oostrum <piet@cs.uu.nl>
URL: http://www.cs.uu.nl/~piet [PGP]
Private email: P.van.Oostrum@hccnet.nl

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 20:37               ` Piet van Oostrum
@ 2004-11-07 21:09                 ` Luc Teirlinck
  2004-11-07 21:20                 ` Luc Teirlinck
  1 sibling, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 21:09 UTC (permalink / raw)
  Cc: emacs-devel

Piet van Oostrum wrote:

   An alternative would be to remove only those .elc files that
   are older than their corresponding .el files.

That, or Andreas' suggestion, could actually be an improvement for the
proposed `make bootstrap-build', assuming our (apparent) consensus from a
previous thread got implemented.  But I believe that two problems
would remain.

It would seem that some changes in byte-compilation may require
recompiling everything.  I believe nothing can be done about that.

Before I started systematically using `make maintainer-clean', I
encountered several problems where the .elc file was wrong even though
_newer_ than the .el file.  For instance, `C-x v u' in VC produces
such situations.  I guess this problem could be avoided by manually
removing the .elc file each time after you do `C-x v u' or otherwise
cause this type of situation.  But this assume that most users are
aware of this danger.  It also is easy to forget, even if you know.
If you run Emacs from the place you built it, then you might want to
recompile instead of deleting the .elc file.  But then you also have
to also manually change the last modification time to ensure that the
.elc will not be considered newer than a changed .el at the next
update.  This starts getting tricky.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 20:37               ` Piet van Oostrum
  2004-11-07 21:09                 ` Luc Teirlinck
@ 2004-11-07 21:20                 ` Luc Teirlinck
  1 sibling, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 21:20 UTC (permalink / raw)
  Cc: emacs-devel

Piet van Oostrum wrote:

   An alternative would be to remove only those .elc files that
   are older than their corresponding .el files.

In addition to what I pointed out in my previous message, recompiling
files to take a look at compiler warnings might also produce falsely
"up to date" .elc files.  So this would be another situation where one
would have to be careful.  There probably are plenty of other similar
situations that I am just not thinking of right now.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 18:55           ` Luc Teirlinck
@ 2004-11-07 22:10             ` Luc Teirlinck
  2004-11-08 16:58               ` Richard Stallman
  2004-11-07 23:26             ` Kim F. Storm
  1 sibling, 1 reply; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 22:10 UTC (permalink / raw)
  Cc: schwab, eliz, monnier, emacs-devel

>From my previous message:

   We discussed this before and
   decided to have `make bootstrap' remove the .elc files once again, but
   provide some alternate version bootstrap-build that does not do that.

   Essentially:

   http://lists.gnu.org/archive/html/emacs-devel/2004-09/msg00720.html

   Again, this was never implemented.  I am not familiar enough with the
   Makefiles to do this myself.

I forgot that you asked me before not to send you urls.  Here is the full
message referred to:

    From: Stefan Monnier
    Subject: Re: bootstrap fails on tty-supports-face-attributes-p
    Date: Tue, 21 Sep 2004 16:09:28 -0400
    User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3.50 (gnu/linux)

    > Let me repeat my proposal that 'make bootstrap' should do
    > maintainer-clean.

    Mostly agreed, with the following caveat: don't just change
    `bootstrap'.  Instead, rename the current `bootstrap' to
    `bootstrap-build' and than create a new `bootstrap' which first does
    `bootstrapclean' and then `bootstrap-build'.


	    Stefan

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 17:43         ` Luc Teirlinck
  2004-11-07 18:25           ` Han Boetes
  2004-11-07 18:38           ` David Kastrup
@ 2004-11-07 22:28           ` Eli Zaretskii
  2004-11-07 23:05             ` Luc Teirlinck
                               ` (3 more replies)
  2 siblings, 4 replies; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-07 22:28 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Sun, 7 Nov 2004 11:43:41 -0600 (CST)
> From: Luc Teirlinck <teirllm@dms.auburn.edu>
> CC: emacs-devel@gnu.org
> 
> Most of the time the problems caused by omitting `make maintainer-clean'
> are not that bootstrapping fails, but that various bugs occur while
> running the bootstrapped Emacs.

The right way to solve this is to make a list of dependencies between
Lisp files.  Perhaps we could have a Lisp function that would glean
such a list and put them into lisp/Makefile.

> Usually, people have not the slightest
> idea that these bugs are caused by failure to run `make maintainer-clean'.
> I remember having seen many examples of fake bug reports caused by this.

Are you saying that a bootstrap should always be preceded by a "make
maintainer-clean"?  If so, why doesn't "make bootstrap" does the
equivalent of "make maintainer-clean" automatically?

> I have a 1.7 dual Xeon.  That was a pretty fast machine when I bought
> it three years ago, but today, just about any computer I see
> advertised is faster and you can easily get something twice as fast.
> On my machine, the entire:
> 
> make maintainer-clean
> ./configure
> make bootstrap
> 
> takes less than 15 minutes.  Omitting the `make maintainer-clean'
> probably saves about 7 of those 15 minutes and (to me) that is not
> worth worrying about the potential bugs it introduces.

Please don't try to convince me that maintainer-clean doesn't slow
down the bootstrap: it does, BIG TIME, at least in my experience.

> I propose, for now, the following patch to INSTALL.CVS.

I think your additions to INSTALL.CVS are too voluminous.  I'd simply
say something like

  Normally, it is not necessary to use "make bootstrap" after every CVS
  update.  Unless there are problems, we suggest the following
  procedure:
  
    $ ./configure
    $ make

  If this fails, do:
 
  make maintainer-clean
  ./configure
  make bootstrap

(Btw, I still didn't see any explanation why a "cvs up" that updates
easymenu.el causes a failure to load cl-macs, which was the specific
problem I reported.  Without seeing such an explanation, this entire
argument sounds a bit academic to me.)

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 22:28           ` Eli Zaretskii
@ 2004-11-07 23:05             ` Luc Teirlinck
  2004-11-08  1:32             ` Lennart Borgman
                               ` (2 subsequent siblings)
  3 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 23:05 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:

   Are you saying that a bootstrap should always be preceded by a "make
   maintainer-clean"?

If you want to be _completely_ sure that your version of Emacs is
fully up to date.  I believe that there are two situations where
people usually run `make bootstrap': if they experience problems or if
they have a fast computer.  In case of problems, I believe it is
advisable to run `make maintainer-clean'.  If your computer is fast
enough, the entire purpose of running the `make bootstrap' sequence is
to be completely safe, so it would be inconsistent not to run `make
maintainer-clean'.  Apparently Stefan knows a counterexample to these
rules.

   If so, why doesn't "make bootstrap" does the equivalent of "make
   maintainer-clean" automatically?

It used to do so.  Then Stefan changed it to speed up bootstrapping.
But we have had plenty of bug reports because of this.  As already
mentioned, we had a discussion on this and I believe that Stefan
agreed that `make bootstrap' should be reverted to its old behavior,
and that a new target `make bootstrap-build' should do what the
current `make bootstrap' does.  Maybe some of the imperfect, but fast,
proposed partial solutions could be applied to this new target.  They
would not make it 100% safe, but much safer than it is now.

   (Btw, I still didn't see any explanation why a "cvs up" that updates
   easymenu.el causes a failure to load cl-macs, which was the specific
   problem I reported.  Without seeing such an explanation, this entire
   argument sounds a bit academic to me.)

It would be, if this were the only instance of the problem, but it is
just the latest in a long list.  It is very far from the first and if
nothing is changed it will be very far from the last.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 18:55           ` Luc Teirlinck
  2004-11-07 22:10             ` Luc Teirlinck
@ 2004-11-07 23:26             ` Kim F. Storm
  2004-11-07 23:45               ` Luc Teirlinck
  1 sibling, 1 reply; 53+ messages in thread
From: Kim F. Storm @ 2004-11-07 23:26 UTC (permalink / raw)
  Cc: schwab, eliz, emacs-devel, rms, monnier

Luc Teirlinck <teirllm@dms.auburn.edu> writes:

> Richard Stallman wrote:
>
>        > I believe we discussed this before.  We either have to document in
>        > INSTALL.CVS that you have to do `make maintainer-clean' before `make
>        > bootstrap' or we have to make sure that `make bootstrap' removes the
>        > .elc files automatically, as it used to do.
>
>    What was the motive for changing it not to do that?
>
> To make bootstrapping run faster.  We discussed this before and
> decided to have `make bootstrap' remove the .elc files once again, but
> provide some alternate version bootstrap-build that does not do that.

I made the change.

So 'make bootstrap' now removes the .elc files.

There is a new 'make bootfast' target that doesn't do this (identical to
the old 'make bootstrap'.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 23:26             ` Kim F. Storm
@ 2004-11-07 23:45               ` Luc Teirlinck
  2004-11-08  7:27                 ` Eli Zaretskii
  0 siblings, 1 reply; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-07 23:45 UTC (permalink / raw)
  Cc: schwab, eliz, rms, monnier, emacs-devel

Kim Storm wrote:

   I made the change.

   So 'make bootstrap' now removes the .elc files.

   There is a new 'make bootfast' target that doesn't do this (identical to
   the old 'make bootstrap'.

I took another look at INSTALL.CVS and, after this change, we can
probably leave INSTALL.CVS unchanged.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 20:21                 ` Luc Teirlinck
@ 2004-11-08  0:15                   ` Robert J. Chassell
  0 siblings, 0 replies; 53+ messages in thread
From: Robert J. Chassell @ 2004-11-08  0:15 UTC (permalink / raw)


   I did that to give concrete idea of the times that were involved on
   fast computers, with concrete numbers.

I did a `make maintainer-clean' this morning and the full build took
me 1.5 hours.  I will spend the time when needed, but not otherwise.

      It is ok to tell people what bargains in reliability versus
      performance they can make.  It is not ok to assume that
      performance may never be an issue.

Yes, very true.

   ... it would be good to mention the _possibility_ of always using
   `make maintainer-clean' ...

Yes, that is reasonable for people with fast machines.  We should
encourage them.  But for others, we should be practical....

-- 
    Robert J. Chassell                         
    bob@rattlesnake.com                         GnuPG Key ID: 004B4AC8
    http://www.rattlesnake.com                  http://www.teak.cc

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 22:28           ` Eli Zaretskii
  2004-11-07 23:05             ` Luc Teirlinck
@ 2004-11-08  1:32             ` Lennart Borgman
  2004-11-08  8:22               ` Eli Zaretskii
  2004-11-08  2:03             ` Luc Teirlinck
  2004-11-08 17:16             ` Drew Adams
  3 siblings, 1 reply; 53+ messages in thread
From: Lennart Borgman @ 2004-11-08  1:32 UTC (permalink / raw)
  Cc: emacs-devel

----- Original Message ----- 
From: "Eli Zaretskii" <eliz@gnu.org>

: The right way to solve this is to make a list of dependencies between
: Lisp files.  Perhaps we could have a Lisp function that would glean
: such a list and put them into lisp/Makefile.

What would in practice have to be checked? (require ...) and it cousins?
What about autoload.el - can it write a dependency list for the autoloaded
objects? Can everything be automatically checked or is an hand-written
supplement needed?

- Lennart

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 22:28           ` Eli Zaretskii
  2004-11-07 23:05             ` Luc Teirlinck
  2004-11-08  1:32             ` Lennart Borgman
@ 2004-11-08  2:03             ` Luc Teirlinck
  2004-11-08  2:31               ` Luc Teirlinck
  2004-11-08  7:20               ` Eli Zaretskii
  2004-11-08 17:16             ` Drew Adams
  3 siblings, 2 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-08  2:03 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:
   
   (Btw, I still didn't see any explanation why a "cvs up" that updates
   easymenu.el causes a failure to load cl-macs, which was the specific
   problem I reported.  Without seeing such an explanation, this entire
   argument sounds a bit academic to me.)

Do you have any evidence that it are the changes to easymenu.el that
caused your problem?  Changes in byte compilation often require
recompilation.  There was a non-trivial change to bytecomp.el five
days ago.  Some of the changes apparently affected cl.  I did not
study the changes in detail and hence I do not really know, but they
could be an explanation for your problem.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08  2:03             ` Luc Teirlinck
@ 2004-11-08  2:31               ` Luc Teirlinck
  2004-11-08  7:20               ` Eli Zaretskii
  1 sibling, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-08  2:31 UTC (permalink / raw)
  Cc: eliz, emacs-devel

>From my previous message:

   There was a non-trivial change to bytecomp.el five days ago.

Seems harmless at second view.

   Some of the changes apparently affected cl.

Apparently just an optical illusion.

But Kim's change solved the problem anyway.

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08  2:03             ` Luc Teirlinck
  2004-11-08  2:31               ` Luc Teirlinck
@ 2004-11-08  7:20               ` Eli Zaretskii
  1 sibling, 0 replies; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-08  7:20 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Sun, 7 Nov 2004 20:03:00 -0600 (CST)
> From: Luc Teirlinck <teirllm@dms.auburn.edu>
> CC: emacs-devel@gnu.org
> 
> Do you have any evidence that it are the changes to easymenu.el that
> caused your problem?

Yes: easymenu.el was one of a very few files updated by "cvs up" that was
immediately followed by

   ./configure
   make bootstrap

The bootstrap attempt before "cvs up" failed while compiling
printing.el, so the new one should have simply continued from that
spot.

The files updated by "cvs up" were: align.el, tempo.el, outline.el,
macros.el, and easymenu.el.  None of the changes to those files seem
to be candidates for causing the trouble I reported, but perhaps I
miss something.

Note that the command that failed after "cvs up" was this:

    ../src/bootstrap-emacs -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/home/e/eliz/emacs.cvs/emacs/lisp/loaddefs.el")' -f batch-update-autoloads $wins

i.e., it failed while generating loaddefs.el.

> Changes in byte compilation often require
> recompilation.  There was a non-trivial change to bytecomp.el five
> days ago.  Some of the changes apparently affected cl.

I'm looking for some change that would explain the effect on cl.
Until now, I didn't find it.

Also note that similar failure was reported in this thread:

  http://lists.gnu.org/archive/html/emacs-devel/2004-09/msg00317.html

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 23:45               ` Luc Teirlinck
@ 2004-11-08  7:27                 ` Eli Zaretskii
  2004-11-09  0:50                   ` Luc Teirlinck
  0 siblings, 1 reply; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-08  7:27 UTC (permalink / raw)
  Cc: emacs-devel

> Date: Sun, 7 Nov 2004 17:45:07 -0600 (CST)
> From: Luc Teirlinck <teirllm@dms.auburn.edu>
> CC: schwab@suse.de, eliz@gnu.org, emacs-devel@gnu.org, rms@gnu.org,
>         monnier@iro.umontreal.ca
> 
> Kim Storm wrote:
> 
>    I made the change.
> 
>    So 'make bootstrap' now removes the .elc files.
> 
>    There is a new 'make bootfast' target that doesn't do this (identical to
>    the old 'make bootstrap'.
> 
> I took another look at INSTALL.CVS and, after this change, we can
> probably leave INSTALL.CVS unchanged.

I don't think so.  I think we should tell when the new bootfast target
should be used.  After all, it is there for a reason.

Could Stefan, or someone else who uses the fast bootstrap, please tell
how do they know when it is safe to use it?  Is there some method
besides trial-and-error?

Here's something about "make bootfast" that I wonder whether it could
cause trouble in specific situations: could the bootstrap-prepare and
bootstrap-clean-before targets that run before it remove some files
which will cause the rest of bootstrap fail in a way similar to what I
saw?

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08  1:32             ` Lennart Borgman
@ 2004-11-08  8:22               ` Eli Zaretskii
  2004-11-14 21:20                 ` Lennart Borgman
  0 siblings, 1 reply; 53+ messages in thread
From: Eli Zaretskii @ 2004-11-08  8:22 UTC (permalink / raw)
  Cc: teirllm, emacs-devel

> From: "Lennart Borgman" <lennart.borgman.073@student.lu.se>
> Cc: <emacs-devel@gnu.org>
> Date: Mon, 8 Nov 2004 02:32:18 +0100
> 
> What would in practice have to be checked? (require ...) and it cousins?

Yes.

> What about autoload.el - can it write a dependency list for the autoloaded
> objects?

Autoloads could be picked up from loaddefs.el, yes.

> Can everything be automatically checked or is an hand-written
> supplement needed?

In principle, it could all be done automatically.

But this is probably not something to do right now, when we are trying
to start a pretest VSN.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-07 22:10             ` Luc Teirlinck
@ 2004-11-08 16:58               ` Richard Stallman
  0 siblings, 0 replies; 53+ messages in thread
From: Richard Stallman @ 2004-11-08 16:58 UTC (permalink / raw)
  Cc: schwab, eliz, monnier, emacs-devel

	Mostly agreed, with the following caveat: don't just change
	`bootstrap'.  Instead, rename the current `bootstrap' to
	`bootstrap-build' and than create a new `bootstrap' which first does
	`bootstrapclean' and then `bootstrap-build'.

I just implemented this, but I see someone beat me to it.
Thanks.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* RE: Current CVS doesn't bootstrap
  2004-11-07 22:28           ` Eli Zaretskii
                               ` (2 preceding siblings ...)
  2004-11-08  2:03             ` Luc Teirlinck
@ 2004-11-08 17:16             ` Drew Adams
  2004-11-08 19:07               ` Stefan Monnier
  3 siblings, 1 reply; 53+ messages in thread
From: Drew Adams @ 2004-11-08 17:16 UTC (permalink / raw)


  -----Original Message-----From: Eli Zaretskii
  ...make a list of dependencies between Lisp files.
  Perhaps we could have a Lisp function that would glean
  such a list and put them into lisp/Makefile.

Good idea. Useful in general by users for distributing their libraries.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08 17:16             ` Drew Adams
@ 2004-11-08 19:07               ` Stefan Monnier
  0 siblings, 0 replies; 53+ messages in thread
From: Stefan Monnier @ 2004-11-08 19:07 UTC (permalink / raw)
  Cc: emacs-devel

>   Perhaps we could have a Lisp function that would glean
>   such a list and put them into lisp/Makefile.

The byte-compiler should probably do that.
It just needs to keep track of the macros it called and maybe the packages
it required.  But this won't help us get to a new release.


        Stefan

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08  7:27                 ` Eli Zaretskii
@ 2004-11-09  0:50                   ` Luc Teirlinck
  0 siblings, 0 replies; 53+ messages in thread
From: Luc Teirlinck @ 2004-11-09  0:50 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii wrote:

   I don't think so.  I think we should tell when the new bootfast target
   should be used.

If I understand Kim's change correctly, it is just the old `make bootstrap'
we all have been using for a while.  I believe it is a version of
`make bootstrap'  that is meant for people who know what they are
doing.  (Which is why making it the default was a mistake.)

Sincerely,

Luc.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2004-11-08  8:22               ` Eli Zaretskii
@ 2004-11-14 21:20                 ` Lennart Borgman
  0 siblings, 0 replies; 53+ messages in thread
From: Lennart Borgman @ 2004-11-14 21:20 UTC (permalink / raw)
  Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1102 bytes --]

----- Original Message ----- 
From: "Eli Zaretskii" <eliz@gnu.org>

> > What would in practice have to be checked? (require ...) and it cousins?
>
> Yes.
>
> > What about autoload.el - can it write a dependency list for the
autoloaded
> > objects?
>
> Autoloads could be picked up from loaddefs.el, yes.
>
> > Can everything be automatically checked or is an hand-written
> > supplement needed?
>
> In principle, it could all be done automatically.
>
> But this is probably not something to do right now, when we are trying
> to start a pretest VSN.

Though this may not be the write time I tried to write some routines that
checks the dependencies. It is not at all integrated with the build process,
I just wrote the routines to check dependencies. I am sending it here for a
review to see if the routines do what they are supposed to do (except for
any errors I might have done). Some more routines may also have to be
written to make it useful.

When the attached file is loaded it will go through the lisp files in the
Emacs tree and write two files lisp\dep.lst and lisp\dep.warnings.

- Lennart

[-- Attachment #2: elisp-dep.el --]
[-- Type: application/octet-stream, Size: 12242 bytes --]

;;; Bugs:
;;
;; - Does not handle file names in require.
;; - Does not handle abs file names in load.

;; From starup.el:
;; 	  (load (concat term-file-prefix
;; 			(symbol-name window-system)
;; 			"-win")

(defconst elisp-dep-autoloads-hash (make-hash-table :test 'equal :size 1500))
(defconst elisp-dep-files-hash     (make-hash-table :test 'equal :size 1500))
(defvar elisp-dep-warnings ())
;;(defvar elisp-dep-processing-file nil)
(defvar elisp-dep-dontcompile ())
  
(defun elisp-dep-warning(msg)
  (save-excursion
    (backward-sexp)
    (let* ((line-no (+ (count-lines (point-min) (point)) 1))
	   (line-no-str (format "line %s" line-no)))
      (message "WARNING (%s): %s" line-no-str msg)
      (add-to-list 'elisp-dep-warnings
		   (cons (cons elisp-dep-processing-module line-no-str) msg)))))

(defun elisp-dep-get-dontcompile()
  (message "Reading DONTCOMPILE in makefile")
  (save-excursion
    (let ((makefile (expand-file-name "../lisp/makefile" exec-directory))
	  (more t))
      (setq elisp-dep-dontcompile nil)
      (find-file makefile)
      (goto-char (point-min))
      (search-forward-regexp "^DONTCOMPILE =")
      (forward-line)
      (while more
	(if (search-forward-regexp "\\=\\s-\\$(lisp).*?/\\([^/]*?\\).el\\(?: \\|$\\)" nil t)
	    (progn
	      (add-to-list 'elisp-dep-dontcompile (match-string-no-properties 1))
	      (forward-line))
	  (setq more nil)))
      (kill-buffer (current-buffer)))))
;;(elisp-dep-get-dontcompile)
;;(member "version" elisp-dep-dontcompile)

(defun elisp-dep-get-autoloads()
  (message "Reading autoloads..")
  (setq elisp-dep-autoloads-hash (make-hash-table :test 'equal :size 1500))
  (find-file (expand-file-name "../lisp/loaddefs.el" exec-directory))
  (goto-char (point-min))
  (let ((sexp)
	(count 1))
    (while (forward-comment 1))
    (while (not (eobp))
      (setq sexp (read (current-buffer)))
      (when (equal (car sexp) 'autoload)
	(let ((objname (car (cdr sexp)))
	      (objmodule (nth 2 sexp)))
	  ;;(error "%s" objmodule)
	  (unless (equal (car objname) 'quote)
	    (error "expected quote"))
	  (setq objname (car (cdr objname)))
	  (puthash objname objmodule elisp-dep-autoloads-hash)
	  (setq count (+ count 1))
	  )
	)
      (while (forward-comment 1))
      )
    (message "Number of autoloads: %s" count)
    (sleep-for 1)
    (kill-buffer (current-buffer)) ) )



(defun elisp-dep-add-1-extra-dep(module extra-dep)
  (let ((depends (gethash module elisp-dep-files-hash)))
    (mapc (lambda(sym) (add-to-list 'depends sym)) extra-dep)
    (message "add-1-extra: %s %s" module depends)
    (puthash module depends elisp-dep-files-hash)))

(defun elisp-dep-add-extra-dep()
  "Add dependencies not found with the static search."
  ;; FIX ME: not completed.
  (message "Adding known dependencies that can not be found by elisp-dep")
  (elisp-dep-add-1-extra-dep "edt" '(edt-lk201 edt-pc edt-vt100))
  )

(defun elisp-dep-warn-load-but-not-string(sexp)
  "Avoid warning for known things."
  ;; FIX ME: not completed.
  (cond 

   ;;(("abbrev" . "line 174") . "load but not string: (load (if (and file (> (length file) 0)) file abbrev-file-name) nil quietly)")
   ((equal sexp
	   '(load (if (and file (> (length file) 0)) file abbrev-file-name) nil quietly)))

   ;;(("battery" . "line 244") . "load but not string: (load file-name nil t t)")
   ((equal sexp
	   '(load file-name nil t t)))

   ;;(("byte-opt" . "line 256") . "load but not string: (load (nth 1 fn))")
   ((equal sexp
	   '(load (nth 1 fn))))

   ;;(("bytecomp" . "line 1323") . "load but not string: (load target-file)")
   ((equal sexp
	   '(load target-file)))

   ;;(("cc-bytecomp" . "line 149") . "load but not string: (load cc-file nil t t)")
   ((equal sexp
	   '(load cc-file nil t t)))

   ;;(("cc-bytecomp" . "line 188") . "load but not string: (load (, cc-part) nil t nil)")
   ((equal sexp
	   '(load ,cc-part nil t nil)))

   ;;(("cl-macs" . "line 2429") . "load but not string: (load (nth 1 (symbol-function func)))")
   ((equal sexp
	   '(load (nth 1 (symbol-function func)))))

   ;;(("cus-edit" . "line 1816") . "load but not string: (load-library load)")
   ((equal sexp
	   '(load-library load)))

   ;;(("cus-edit" . "line 892") . "load but not string: (load file)")
   ((equal sexp
	   '(load file)))

   ;;(("desktop" . "line 565") . "load but not string: (load (expand-file-name desktop-basefilename desktop-dirname) t t t)")
   ((equal sexp
	   '(load (expand-file-name desktop-basefilename desktop-dirname) t t t)))

   ;;(("dired-aux" . "line 717") . "load but not string: (load file nil nil t)")
   ((equal sexp
	   '(load file nil nil t)))

   ;;(("disass" . "line 73") . "load but not string: (load (nth 1 obj))")
   ((equal sexp
	   '(load (nth 1 obj))))

   ;;(("edt" . "line 2141") . "load but not string: (load (concat edt- term) t t)")
   ((equal sexp
	   '(load (concat "edt-" term) t t)))

   ;;(("esh-mode" . "line 292") . "load but not string: (load module-shortname)")
   ((equal sexp
	   '(load module-shortname)))





   (t
    (elisp-dep-warning (format "load but not string: %s" sexp)))))



(defun elisp-dep-get-sexp-depends(sexp &optional let-state)
  ;;(message "get-sexp-depends %s %S" let-state sexp)
  (if (not (consp sexp))
      (progn
	;; This can only happen on top level!
	(elisp-dep-warning (format "top-level sexp is not list: %s" sexp))
	nil)
    (let ((dependon ())
	  (fun (car sexp))
	  (new-let-state))

      (when let-state
	;; Skip let variables:
	(when (= let-state 0)
	  (setq sexp (cdr sexp))
	  ;;(message "new sexp=%S" sexp)
	  )
	(setq new-let-state (- let-state 1))
	(when (< let-state 0)
	  (setq new-let-state nil)))

      (when (or (equal fun 'let)
		(equal fun 'let*))
	(setq new-let-state 1))
      
      (when (equal fun 'require)
	(let ((reqarg (car (cdr sexp))))
	  (if (listp reqarg)
	      (if (equal (car reqarg) 'quote)
		  (let ((mod (car (cdr reqarg))))
		    ;;(message "require.mod=%s" mod)
		    (add-to-list 'dependon mod))
		(elisp-dep-warning (format "require but not quote: %s" sexp)))
	    (elisp-dep-warning (format "require but not listp: %s" sexp))
	    )))
      ;;(message "get-s-d.dependon=%s" dependon)))
      (when (or (equal fun 'load)
		(equal fun 'load-library)
		)
	(let ((mod (car (cdr sexp))))
	  ;;(message "load %s" mod)
	  (if (stringp mod)
	      (cond
	       ((file-name-absolute-p mod)
		(elisp-dep-warning (format "skipping %s - absolute file name" mod)))
	       ;;((> (length (file-name-extension mod)) 0)
		;;(elisp-dep-warning (format "skipping %s - file name has extension" mod)))
	       (t
		(setq mod (file-name-sans-extension (file-name-nondirectory mod)))
		(add-to-list 'dependon mod)))
	    (elisp-dep-warn-load-but-not-string sexp))))

      ;; skip arguments for functions etc
      (let ((has-args (or (equal fun 'defun)
			  (equal fun 'defmacro)))
	    (ord 0)
	    )
	(while sexp
	  (setq ord (+ ord 1))
	  (let ((sym (if (consp sexp) (car sexp) sexp)))
	    (when sym
	      (when (atom sym)
		(let ((mod (gethash sym elisp-dep-autoloads-hash)))
		  (when mod
		    (add-to-list 'dependon mod)
		    ;;(message "sym=%s mod=%s" sym mod)
		    ;;(message "2 get-s-d.dependon=%s" dependon)
		    )))
	      (when (listp sym)
		;;(when (listp (cdr sym)) ;; must use cdr to distinguish cons/list
		;;(message "ord=%s" ord)
		(unless (and has-args (= ord 3))
		  ;;(error ";; FIX-ME: take care of the return value!!!:")
		  (mapc (lambda (sym) 
			  (add-to-list 'dependon sym))
			(elisp-dep-get-sexp-depends sym new-let-state)))
		;; Only the first list after let is declares -> reset counter
		(when (equal new-let-state 1) (setq new-let-state nil)))) ;;)
	    (setq sexp (when (consp sexp) (cdr sexp))))))
      dependon)))


  
(defun elisp-dep-get-buffer-depends()
  ;;(message "get-buffer-depends=%s" (buffer-string))
  (let ((depon ()))
    (goto-char (point-min))
    (while (forward-comment 1))
    (while (not (eobp))
      ;;(message "substring=%s" (buffer-substring (point) (min (point-max) (+ (point) 50))))
      (let* ((sexp (read (current-buffer)))
	     (sexpdep (elisp-dep-get-sexp-depends sexp))
	     )
	(mapc (lambda(sym)
		(add-to-list 'depon sym))
	      sexpdep))
      (while (forward-comment 1))
      ;;(message "(%s)" (buffer-substring (point) (point-max)))
      )
    ;;(message "depon=%s" depon)
    depon))



(defun elisp-dep-get-file-depends(file)
  (message "**** get-file-depends: %s" file)
  ;;(sleep-for 0 500)
  ;;(with-temp-buffer
  ;;(emacs-lisp-mode)
  ;;(insert-file-contents file)
  (find-file file)
  (let* ((module (file-name-nondirectory (file-name-sans-extension file)))
	 (elisp-dep-processing-module module)
	 (depends)
	 )
    (if  (member module elisp-dep-dontcompile)
	(elisp-dep-warning (format "skipping %s - member of DONTCOMPILE" module))
      (setq depends (elisp-dep-get-buffer-depends))
      ;;(message "%s=%s" module depends)
      (puthash module depends elisp-dep-files-hash)))
  (kill-buffer (current-buffer)))



(defun elisp-dep-search-dir(dir)
  ;;(message "search-dir: %s" dir)
  (let ((files (directory-files dir)))
    ;;(message "%s" files)
    (mapc (lambda (file)
	    (let ((full (expand-file-name file dir)))
	      ;;(message "full=%s isdir=%s" full (file-directory-p full))
	      (cond
	       ((equal "." file))
	       ((equal ".." file))
	       ((file-directory-p full) (elisp-dep-search-dir full))
	       ((equal (substring full -3) ".el")
		(when (file-regular-p full)
		  (elisp-dep-get-file-depends full)
		  ))
	       )))
	  files)))



(defconst elisp-dep-dep-lst-file (expand-file-name "../lisp/dep.lst" exec-directory))



(defun elisp-dep-write-dep-lst()
  (save-excursion
    (find-file elisp-dep-dep-lst-file)
    (maphash (lambda (key value)
	       (princ (format "(%s %s)\n" key value) (current-buffer)))
	     elisp-dep-files-hash)
    (sort-lines nil (point-min) (point-max))
    (save-buffer)
    (kill-buffer (current-buffer))
    (message "New dependency file written: %s" elisp-dep-dep-lst-file)))



(defun elisp-dep-mk-new-dep-lst()
  (message "Will create new lisp depencency file")
  (sleep-for 2)
  (elisp-dep-get-autoloads)
  (elisp-dep-search-dir (expand-file-name "../lisp" exec-directory))
  (elisp-dep-add-extra-dep)
  (elisp-dep-write-dep-lst)
  )



(defun elisp-dep-update-dep-lst()
  (message "Found old lisp depencency file, will update this")
  (sleep-for 2)
  (error "NIY")
  )



(defun elisp-dep-save-warnings()
  (let ((warn-file (concat (file-name-sans-extension elisp-dep-dep-lst-file) ".warnings")))
    (find-file warn-file)
    (erase-buffer)
    (mapc (lambda (warning) (princ (format "%S\n" warning) (current-buffer)))
	  elisp-dep-warnings)
    (sort-lines nil (point-min) (point-max))
    (save-buffer)
    (kill-buffer (current-buffer))
    ))



(defun elisp-dep-mk-dep-lst()
  (save-excursion
    (set-buffer "*Messages*")
    (erase-buffer))
  (message "Started at %s" (current-time-string))
  (setq elisp-dep-warnings ())
  (setq elisp-dep-files-hash     (make-hash-table :test 'equal :size 1500))
  (elisp-dep-get-dontcompile)
  ;; Must set message-log-max here, otherwise messages disappear when it is set back
  (setq message-log-max t)
  (let ((start-time (current-time))
	(stop-time)
	(used-time)
	(max-lisp-eval-depth 500)
	(enable-local-eval nil))
    (if (file-readable-p elisp-dep-dep-lst-file)
	(elisp-dep-update-dep-lst)
      (elisp-dep-mk-new-dep-lst))
    (setq stop-time (current-time))
    (setq used-time (- (+ (* (nth 0 stop-time)  (expt 2 16)) (nth 1 stop-time))
		       (+ (* (nth 0 start-time) (expt 2 16)) (nth 1 start-time))))
    (message "Ready at %s" (current-time-string))
    (message "Used time: %s" used-time)
    (message "hash count=%s" (hash-table-count elisp-dep-files-hash))
    (message "%s" elisp-dep-files-hash)
    (elisp-dep-save-warnings)
    ))



(elisp-dep-mk-dep-lst)

(provide 'elisp-dep)

[-- Attachment #3: Type: text/plain, Size: 142 bytes --]

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Current CVS doesn't bootstrap
@ 2005-02-14 11:12 Andreas Schwab
  2005-02-14 12:51 ` Lute Kamstra
                   ` (2 more replies)
  0 siblings, 3 replies; 53+ messages in thread
From: Andreas Schwab @ 2005-02-14 11:12 UTC (permalink / raw)


I'm getting this error during bootstrapping:

Loading emacs-lisp/byte-run (source)...
Loading emacs-lisp/backquote (source)...
Loading subr (source)...
Loading version.el (source)...
Loading widget (source)...
Loading custom (source)...
Loading emacs-lisp/map-ynp (source)...
Loading env (source)...
Loading cus-start (source)...
Symbol's value as variable is void: dos-unsupported-char-glyph

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-14 11:12 Current CVS doesn't bootstrap Andreas Schwab
@ 2005-02-14 12:51 ` Lute Kamstra
  2005-02-14 13:36 ` Reiner Steib
  2005-02-15 17:27 ` Richard Stallman
  2 siblings, 0 replies; 53+ messages in thread
From: Lute Kamstra @ 2005-02-14 12:51 UTC (permalink / raw)
  Cc: emacs-devel

Andreas Schwab <schwab@suse.de> writes:

> I'm getting this error during bootstrapping:
>
> Loading emacs-lisp/byte-run (source)...
> Loading emacs-lisp/backquote (source)...
> Loading subr (source)...
> Loading version.el (source)...
> Loading widget (source)...
> Loading custom (source)...
> Loading emacs-lisp/map-ynp (source)...
> Loading env (source)...
> Loading cus-start (source)...
> Symbol's value as variable is void: dos-unsupported-char-glyph

I just committed a fix.

Lute.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-14 11:12 Current CVS doesn't bootstrap Andreas Schwab
  2005-02-14 12:51 ` Lute Kamstra
@ 2005-02-14 13:36 ` Reiner Steib
  2005-02-15 17:27   ` Richard Stallman
  2005-02-15 17:27 ` Richard Stallman
  2 siblings, 1 reply; 53+ messages in thread
From: Reiner Steib @ 2005-02-14 13:36 UTC (permalink / raw)
  Cc: emacs-devel

On Mon, Feb 14 2005, Andreas Schwab wrote:

> I'm getting this error during bootstrapping:
[...]
> Loading cus-start (source)...
> Symbol's value as variable is void: dos-unsupported-char-glyph

It seems to be related to Richards recent changes to cus-start.el.  A
possible workaround (I don't know how to fix it properly) is to revert
lisp/cus-start.el to revision 1.64 (or 1.65?).

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-14 11:12 Current CVS doesn't bootstrap Andreas Schwab
  2005-02-14 12:51 ` Lute Kamstra
  2005-02-14 13:36 ` Reiner Steib
@ 2005-02-15 17:27 ` Richard Stallman
  2005-02-15 19:12   ` Lute Kamstra
  2 siblings, 1 reply; 53+ messages in thread
From: Richard Stallman @ 2005-02-15 17:27 UTC (permalink / raw)
  Cc: emacs-devel

Shouldn't it use default-boundp?

*** cus-start.el	15 Feb 2005 01:22:16 -0500	1.67
--- cus-start.el	15 Feb 2005 02:36:28 -0500	
***************
*** 312,318 ****
  	  ;; use the current value as the standard value.
  	  standard (if (nthcdr 4 this)
  		       (nth 4 this)
! 		     (when (boundp symbol)
  		       (funcall quoter (default-value symbol))))
  	  ;; Don't complain about missing variables which are
  	  ;; irrelevant to this platform.
--- 312,318 ----
  	  ;; use the current value as the standard value.
  	  standard (if (nthcdr 4 this)
  		       (nth 4 this)
! 		     (when (default-boundp symbol)
  		       (funcall quoter (default-value symbol))))
  	  ;; Don't complain about missing variables which are
  	  ;; irrelevant to this platform.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-14 13:36 ` Reiner Steib
@ 2005-02-15 17:27   ` Richard Stallman
  2005-02-15 20:56     ` Reiner Steib
  0 siblings, 1 reply; 53+ messages in thread
From: Richard Stallman @ 2005-02-15 17:27 UTC (permalink / raw)
  Cc: schwab, emacs-devel

    It seems to be related to Richards recent changes to cus-start.el.  A
    possible workaround (I don't know how to fix it properly) is to revert
    lisp/cus-start.el to revision 1.64 (or 1.65?).

When there is a bug, please do not be so quick to suggest "let's
revert the previous change" as a "solution".  That might in some cases
be necessary, but unless the previous change served no purpose, just
reverting it cannot be the real solution.

The useful thing to do is to debug the problem.  Would you like to help
do that?

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-15 17:27 ` Richard Stallman
@ 2005-02-15 19:12   ` Lute Kamstra
  0 siblings, 0 replies; 53+ messages in thread
From: Lute Kamstra @ 2005-02-15 19:12 UTC (permalink / raw)
  Cc: emacs-devel

Richard Stallman <rms@gnu.org> writes:

> Shouldn't it use default-boundp?
>
> *** cus-start.el	15 Feb 2005 01:22:16 -0500	1.67
> --- cus-start.el	15 Feb 2005 02:36:28 -0500	
> ***************
> *** 312,318 ****
>   	  ;; use the current value as the standard value.
>   	  standard (if (nthcdr 4 this)
>   		       (nth 4 this)
> ! 		     (when (boundp symbol)
>   		       (funcall quoter (default-value symbol))))
>   	  ;; Don't complain about missing variables which are
>   	  ;; irrelevant to this platform.
> --- 312,318 ----
>   	  ;; use the current value as the standard value.
>   	  standard (if (nthcdr 4 this)
>   		       (nth 4 this)
> ! 		     (when (default-boundp symbol)
>   		       (funcall quoter (default-value symbol))))
>   	  ;; Don't complain about missing variables which are
>   	  ;; irrelevant to this platform.

Before your change, the `(funcall quoter (default-value symbol))' was
within the `(if (boundp symbol) ...)' test below.  You took it outside
this test, which caused the problem of accessing an MS-DOS-specific
built-in variable on GNU/Linux.  So I figured I should test for
`(boundp symbol)' again.  `(default-boundp symbol)' does seem the
right test though.  Apparently, the built-in variable in `symbol' is
never local-only.

Lute.

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-15 17:27   ` Richard Stallman
@ 2005-02-15 20:56     ` Reiner Steib
  2005-02-17 10:35       ` Richard Stallman
  0 siblings, 1 reply; 53+ messages in thread
From: Reiner Steib @ 2005-02-15 20:56 UTC (permalink / raw)
  Cc: emacs-devel

On Tue, Feb 15 2005, Richard Stallman wrote:

>     It seems to be related to Richards recent changes to cus-start.el.  A
>     possible workaround (I don't know how to fix it properly) is to revert
>     lisp/cus-start.el to revision 1.64 (or 1.65?).
>
> When there is a bug, please do not be so quick to suggest "let's
> revert the previous change" as a "solution".

I wrote that reverting is "workaround", not a "solution".  I didn't
mean to suggest to revert your change(s) in CVS.

> The useful thing to do is to debug the problem.  Would you like to help
> do that?

Lute Kamstra already did debug it, I think.

Bye, Reiner.
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---  |  PGP key available  |  http://rsteib.home.pages.de/

^ permalink raw reply	[flat|nested] 53+ messages in thread

* Re: Current CVS doesn't bootstrap
  2005-02-15 20:56     ` Reiner Steib
@ 2005-02-17 10:35       ` Richard Stallman
  0 siblings, 0 replies; 53+ messages in thread
From: Richard Stallman @ 2005-02-17 10:35 UTC (permalink / raw)
  Cc: emacs-devel

    I wrote that reverting is "workaround", not a "solution".  I didn't
    mean to suggest to revert your change(s) in CVS.

Whatever you call it, it is the wrong way to be helpful.
We need to ask people to debug the problem, not to avoid it.

^ permalink raw reply	[flat|nested] 53+ messages in thread

end of thread, other threads:[~2005-02-17 10:35 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-14 11:12 Current CVS doesn't bootstrap Andreas Schwab
2005-02-14 12:51 ` Lute Kamstra
2005-02-14 13:36 ` Reiner Steib
2005-02-15 17:27   ` Richard Stallman
2005-02-15 20:56     ` Reiner Steib
2005-02-17 10:35       ` Richard Stallman
2005-02-15 17:27 ` Richard Stallman
2005-02-15 19:12   ` Lute Kamstra
  -- strict thread matches above, loose matches on Subject: below --
2004-11-06 11:25 Eli Zaretskii
2004-11-06 14:16 ` Andreas Schwab
2004-11-06 14:40 ` Andreas Schwab
2004-11-06 16:16   ` Eli Zaretskii
2004-11-06 22:48     ` Luc Teirlinck
2004-11-07  0:35       ` Andreas Schwab
2004-11-07  1:25         ` Luc Teirlinck
2004-11-07  1:45           ` Andreas Schwab
2004-11-07  2:42             ` Satyaki Das
2004-11-07  3:15               ` Luc Teirlinck
2004-11-07  1:33         ` Luc Teirlinck
2004-11-07  2:07           ` Andreas Schwab
2004-11-07 18:04         ` Richard Stallman
2004-11-07 18:55           ` Luc Teirlinck
2004-11-07 22:10             ` Luc Teirlinck
2004-11-08 16:58               ` Richard Stallman
2004-11-07 23:26             ` Kim F. Storm
2004-11-07 23:45               ` Luc Teirlinck
2004-11-08  7:27                 ` Eli Zaretskii
2004-11-09  0:50                   ` Luc Teirlinck
2004-11-07  5:07       ` Eli Zaretskii
2004-11-07 17:43         ` Luc Teirlinck
2004-11-07 18:25           ` Han Boetes
2004-11-07 19:05             ` Luc Teirlinck
2004-11-07 18:38           ` David Kastrup
2004-11-07 19:33             ` Luc Teirlinck
2004-11-07 19:42               ` David Kastrup
2004-11-07 20:21                 ` Luc Teirlinck
2004-11-08  0:15                   ` Robert J. Chassell
2004-11-07 20:34               ` Piet van Oostrum
2004-11-07 20:37               ` Piet van Oostrum
2004-11-07 21:09                 ` Luc Teirlinck
2004-11-07 21:20                 ` Luc Teirlinck
2004-11-07 22:28           ` Eli Zaretskii
2004-11-07 23:05             ` Luc Teirlinck
2004-11-08  1:32             ` Lennart Borgman
2004-11-08  8:22               ` Eli Zaretskii
2004-11-14 21:20                 ` Lennart Borgman
2004-11-08  2:03             ` Luc Teirlinck
2004-11-08  2:31               ` Luc Teirlinck
2004-11-08  7:20               ` Eli Zaretskii
2004-11-08 17:16             ` Drew Adams
2004-11-08 19:07               ` Stefan Monnier
2004-11-07 18:07         ` Luc Teirlinck
2004-11-07 18:47         ` Luc Teirlinck

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).