Merge branch 'maint'
[platform/upstream/automake.git] / lib / am / lisp.am
index cfa72b0..fc3575b 100644 (file)
@@ -22,59 +22,28 @@ endif %?INSTALL%
 ## Building.  ##
 ## ---------- ##
 
-elc-stamp: $(LISP)
-       @echo 'WARNING: Warnings can be ignored. :-)'
-       @rm -f elc-temp && touch elc-temp
-       if test "$(EMACS)" != no; then \
-## Make sure "$@" isn't empty initially.
-         set x; \
-## Populate "$@" with elisp files (found in the current directory
-## or in $srcdir).
-         list='$(LISP)'; for p in $$list; do \
-           if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-           set x "$$@" "$$d$$p"; shift; \
-         done; \
-## Finally call elisp-comp for all files.
-         shift; \
-         EMACS="$(EMACS)" $(SHELL) $(elisp_comp) "$$@" || exit 1; \
-       else : ; fi
-       @mv -f elc-temp $@
-
-## Do not use $(ELCFILES) as target, because it may have been emptied
-## by the user (to disable byte-compilation), and POSIX does not allow
-## an empty target.
-$(am__ELCFILES): elc-stamp
-## Recover from the removal of $@.
-##
-## Do not call `make elc-stamp' if emacs is not available, because it would
-## be useless.
-##
-## If `make -n' is called, do not execute any command in the recipe that
-## changes the tree; however, invoke the recursive make for debuggability.
-       @if $(am__make_dryrun); then dry=:; else dry=; fi; \
-       if test "$(EMACS)" != no && test ! -f $@; then \
-## If `make -j' is used and more than one file has been erased, several
-## processes can execute this block.  We have to make sure that only
-## the first one will run `$(MAKE) $(AM_MAKEFLAGS) elc-stamp', and the
-## other ones will wait.
-##
-## There is a race here if only one child of make receive a signal.
-## In that case the build may fail.  We remove elc-stamp when we receive
-## a signal so we are sure the build will succeed the next time.
-         $$dry trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \
-         if $$dry mkdir elc-lock 2>/dev/null; then \
-## This code is being executed by the first process.
-           $$dry rm -f elc-stamp; \
-           $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \
-           $$dry rmdir elc-lock; \
-         else \
-## This code is being executed by the follower processes.
-## Wait until the first process is done.
-           while test -d elc-lock && test -z "$$dry"; do sleep 1; done; \
-## Succeed if and only if the first process succeeded.
-           $$dry test -f elc-stamp; exit $$?; \
-         fi; \
-       else : ; fi
+.el.elc:
+## We add $(builddir) and $(srcdir) to load-path, so that any '.el' files
+## that $< depends upon can be found (including generated ones).
+## We prefer files from the build directory to those from the source
+## directory, in true VPATH spirit.
+## The destination file is normally determined by appending "c" to the
+## input (which would erronously put it in $(srcdir) in VPATH builds),
+## so we override that, too.
+       if test "$(EMACS)" != "no"; then \
+         am__subdir_includes=''; \
+         case $@ in */*) \
+           am__dir=`echo '$@' | sed 's,/[^/]*$$,,'`; \
+           am__subdir_includes="-L $$am__dir -L $(srcdir)/$$am__dir"; \
+         esac; \
+## Emacs byte-compilation won't create this automatically, sadly.
+         test -d $$am__dir || $(MKDIR_P) $$am__dir || exit 1; \
+         $(EMACS) --batch \
+           $(AM_ELCFLAGS) $(ELCFLAGS) \
+           $$am__subdir_includes -L $(builddir) -L $(srcdir) \
+           --eval "(defun byte-compile-dest-file (f) \"$@\")" \
+           --eval "(unless (byte-compile-file \"$<\") (kill-emacs 1))"; \
+       else :; fi
 
 
 ## ------------ ##
@@ -83,20 +52,30 @@ $(am__ELCFILES): elc-stamp
 
 if %?INSTALL%
 am__installdirs += "$(DESTDIR)$(%NDIR%dir)"
-%DIR%LISP_INSTALL = %BASE?$(INSTALL_DATA):$(install_sh_DATA)%
-.PHONY install-%EXEC?exec:data%-am: install-%DIR%LISP
+
+?BASE?%DIR%LISP_INSTALL = $(INSTALL_DATA)
+?!BASE?%DIR%LISP_INSTALL = $(install_sh_DATA)
+
+?EXEC?.PHONY install-exec-am: install-%DIR%LISP
+?!EXEC?.PHONY install-data-am: install-%DIR%LISP
+
 install-%DIR%LISP: $(%DIR%_LISP) $(ELCFILES)
        @$(NORMAL_INSTALL)
 ## Do not install anything if EMACS was not found.
        @if test "$(EMACS)" != no && test -n "$(%NDIR%dir)"; then \
-         $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)"; \
 ?!BASE?          $(am__vpath_adj_setup) \
 ## Funny invocation because Makefile variable can be empty, leading to
 ## a syntax error in sh.
-         list='$(%DIR%_LISP)'; for p in $$list; do \
+         list='$(%DIR%_LISP)'; \
+         if test -n "$$list"; then \
+           echo " $(MKDIR_P) '$(DESTDIR)$(%NDIR%dir)'"; \
+           $(MKDIR_P) "$(DESTDIR)$(%NDIR%dir)" || exit 1; \
+         fi; \
+         for p in $$list; do \
 ## A lisp file can be in the source directory or the build directory.
            if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-           %BASE?$(am__strip_dir):$(am__vpath_adj)% \
+?BASE?     $(am__strip_dir) \
+?!BASE?            $(am__vpath_adj) \
            echo " $(%DIR%LISP_INSTALL) '$$d$$p' '$(DESTDIR)$(%NDIR%dir)/$$f'"; \
            $(%DIR%LISP_INSTALL) "$$d$$p" "$(DESTDIR)$(%NDIR%dir)/$$f" || exit $$?; \
 ## Only install .elc file if it exists.
@@ -133,7 +112,7 @@ endif %?INSTALL%
 
 .PHONY clean-am: clean-lisp
 clean-lisp:
-       -rm -f elc-stamp $(ELCFILES)
+       -rm -f $(ELCFILES)
 
 
 ## -------------- ##