On Wed, Jun 17, 2015 at 10:00 PM, Alex Kost <alez...@gmail.com> wrote: > Mark H Weaver (2015-06-17 21:42 +0300) wrote: > >> Federico Beffa <be...@ieee.org> writes: >> >>> What do you think about the attached implementation? >> >> [...] >> >>> +(define (emacs-byte-compile files) >>> + "Byte compile FILES, a list of file names." >>> + (if (pair? files) >>> + (for-each (lambda (f) >>> + (let ((expr `(let () >>> + (push ,(dirname f) load-path) >>> + (byte-compile-file ,f)))) >>> + (emacs-batch-eval expr))) >>> + files) >>> + (error "emacs-byte-compile failed: not a list of files!" files))) >>> + >> >> I would prefer to let an emacs expert (Alex?) comment on this, but here > > (I don't consider myself an expert, I'm definitely much less experienced > with Emacs than you or Ludovic.) > >> are some preliminary comments: >> >> * I wouldn't bother checking the type of 'files', since 'for-each' will >> do that. Also, () is a list but not a pair. >> >> * Maybe use 'progn' instead of 'let ()' ? >> >> * Instead of launching a separate emacs process for each file, how about >> passing the list of filenames into emacs and do the loop within emacs >> itself? > > I totally agree with these comments. However since the goal is to > compile all elisp files in some directory, perhaps we may just use > 'byte-recompile-directory' instead of looping 'byte-compile-file'. > > Also I think there is a problem. An emacs package can require other > packages, so for a successful compiling, 'load-path' should be augmented > not only with the directory of the original package, but with the > directories of the required packages as well.
Thanks for all the good suggestions. I will try to address them. Regards, Fede