Subject: bug#2151: 23.0.90; Building the 23.0.90 pretest recompiles Lisp files

From: Eli Zaretskii <[email-masked]>
Date: Sat, 28 Feb 2009 00:18:37 +0200

> Date: Fri, 27 Feb 2009 17:02:38 +0200
> From: Eli Zaretskii <[email-masked]>
> Cc: 
> 
> There's one other reason for compiling Lisp files during the build, it
> is this fragment from the top-level Makefile.in:
> 
>     # Subdirectories to make recursively.  `lisp' is not included
>     # because the compiled lisp files are part of the distribution.
>     # leim is not included because it needs special handling.
>     # 
>     # Actually, we now include `lisp' as well, since the compiled files
>     # are not included any more in case of bootstrap or in case Emacs was
>     # checked out from a VCS.
>     SUBDIR = lib-src src lisp

The reason that recursing into `lisp' causes more recompilation is
that `make-dist' does this:

  echo "Recompiling Lisp files"
  $EMACS -batch -f batch-byte-recompile-directory lisp leim

while the top-level Makefile.in does this:

  ${SUBDIR}: Makefile FRC
	  boot=bootstrap-emacs$(EXEEXT);                         \
	  if [ -x "src/$$boot" ]; then boot=""; fi;                   \
	  cd $@; $(MAKE) all $(MFLAGS)                           \
	    CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
	    LDFLAGS='${LDFLAGS}' MAKE='${MAKE}' BOOTSTRAPEMACS="$$boot"

IOW, Makefile.in runs "make all" in `lisp'.  Recompilation happens
because "make all" observes dependencies between some *.elc files,
while batch-byte-recompile-directory does not.  So among the *.elc
files generated by make-dist it could well happen that a .elc file
that is prerequisite for some other .elc file ends up being newer,
which will cause "make all" to want to recompile that particular
dependency.

I think we should replace batch-byte-recompile-directory in make-dist
with a call to "make -C lisp all".  Any objections?