[Top][All Lists]

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

Re: Changes in lisp/Makefile.in to skip preloaded files

From: Eli Zaretskii
Subject: Re: Changes in lisp/Makefile.in to skip preloaded files
Date: Tue, 06 Oct 2009 11:25:53 +0200

> Date: Tue, 06 Oct 2009 09:44:41 +0200
> From: Eli Zaretskii <address@hidden>
> Cc: address@hidden
> > -autoloads: $(LOADDEFS) doit
> > +# The Makefile dependency is to make any missing-file error more explicit.
> > +autoloads: $(LOADDEFS) ../src/Makefile doit
> >     chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
> >       $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
> >       $(lisp)/dired.el $(lisp)/ibuffer.el
> >     wd=$(lisp); $(setwins_almost); \
> >     echo Directories: $$wins; \
> > -   $(emacs) -l autoload --eval '(setq generated-autoload-file 
> > "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
> > +   preload=`sed -n -e '/^lisp=/ s/$${lispsource}//g p' ../src/Makefile | \
> > +     sed 's/^lisp= //'`; \
> > +   $(emacs) -l autoload --eval "(setq generated-autoload-file 
> > \"$(lisp)/loaddefs.el\" autoload-excludes \"$${preload}\")" -f 
> > batch-update-autoloads $$wins
> src/Makefile gets recreated every time you run the configure script,
> so this change will now cause autoloads to appear out of date after
> every configure.  Is that what you really want?  Should autoloads
> depend on src/Makefile.in instead?
> Similar with the preload= thing: why not run Sed on src/Makefile.in?
> src/Makefile could be botched by some snafu; why both the lisp
> directory on that behalf as well?

I think I see the reason for the latter: it's because src/Makefile.in
spells out $lisp spanned over many lines, whereas src/Makefile has
them all in the same line, which simplifies the job of th Sed script
to some extent.

Anyway, I cannot say that I like this solution.  In particular, it
cannot be ported to w32, because the list of preloaded files is too
long and overflows the max size of command lines on some Windows
systems (lib-src/makefile.w32-in breaks it into 3 lists for that very

I can think about 2 alternatives which are better (IMO):

  . Add to src/Makefile.in a new target `echolisp' which will simply
    run "@echo $(lisp)".  Then initialize autoload-excludes with
    something like (shell-command-to-string "make -C ../src echolisp").
    (This will probably need some tweaking on w32, because of the same
    limitation of command-line size, but that's much easier done than
    with the current approach.)

  . Modify loadup.el to map `load' over a list of files, instead of
    having multiple `(load FOO)' lines.  That is, replace each line
    now saying "(load FOO)" with "(add-to-list 'load-list FOO)"; then
    map `load' on the result when the list is complete.  With this
    approach, `load-list' will have the list of preloaded files ready
    for use by autoload.el.


P.S.  I generally find any Make or shell/Sed trickery misplaced in
Emacs Makefiles, since we have the full power of Emacs at our
fingertips.  Portability is one obvious advantage, but more
importantly, it sounds right, in the context of building Emacs, to use
Emacs itself wherever we can.  Otherwise, we appear as not believing
in the tool we are developing.  Don't you agree?

reply via email to

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