]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix some dependency problems that cause unnecessary recompiles.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 21 Nov 2013 07:50:57 +0000 (23:50 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 21 Nov 2013 07:50:57 +0000 (23:50 -0800)
Problem reported by RMS in
<http://lists.gnu.org/archive/html/emacs-devel/2013-11/msg00421.html>.
* configure.ac (OLDXMENU_TARGET, OLDXMENU, LIBXMENU, OLDXMENU_DEPS):
Remove.
(LIBXMENU_DIR, LIBXMENU_BASE): New vars.
* src/Makefile.in (OLDXMENU_TARGET, OLDXMENU, OLDXMENU_DEPS)
(really-lwlib, really-oldXMenu, stamp-oldxmenu)
(../src/$(OLDXMENU), $(OLDXMENU)): Remove.
(LIBXMENU_DIR, LIBXMENU_BASE): New macros.
(LIBXMENU): Use them.
(temacs$(EXEEXT)): Depend on $(LIBXMENU), not stamp-oldxmenu.
($(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a, FORCE): New targets.
(boostrap-clean): No need to remove stamp-oldxmenu.

ChangeLog
configure.ac
src/ChangeLog
src/Makefile.in

index 6ba989682042fedd9cf7cb92a2316c89a054fdf1..6ebc48fadd8101b8b95db01829f6e5b4a0660fc1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-21  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Fix some dependency problems that cause unnecessary recompiles.
+       * configure.ac (OLDXMENU_TARGET, OLDXMENU, LIBXMENU, OLDXMENU_DEPS):
+       Remove.
+       (LIBXMENU_DIR, LIBXMENU_BASE): New vars.
+
 2013-11-20  Glenn Morris  <rgm@gnu.org>
 
        * make-dist: Distribute build-aux/msys-to-w32.
index a9baf608bf382df8ac0db7a434d827a8a24f4fec..f01fa4c079a5eceb4477dcfcd6e5a17a772ed1ae 100644 (file)
@@ -4598,56 +4598,34 @@ AC_SUBST(TOOLKIT_LIBW)
 if test "${opsys}" != "mingw32"; then
   if test "$USE_X_TOOLKIT" = "none"; then
     LIBXT_OTHER="\$(LIBXSM)"
-    OLDXMENU_TARGET="really-oldXMenu"
   else
     LIBXT_OTHER="\$(LIBXMU) -lXt \$(LIBXTR6) -lXext"
-    OLDXMENU_TARGET="really-lwlib"
   fi
 fi
 AC_SUBST(LIBXT_OTHER)
 
-## The X Menu stuff is present in the X10 distribution, but missing
-## from X11.  If we have X10, just use the installed library;
-## otherwise, use our own copy.
 if test "${HAVE_X11}" = "yes" ; then
   AC_DEFINE(HAVE_X11, 1,
-           [Define to 1 if you want to use version 11 of X windows.
-            Otherwise, Emacs expects to use version 10.])
-
-  if test "$USE_X_TOOLKIT" = "none"; then
-    OLDXMENU="\${oldXMenudir}/libXMenu11.a"
-  else
-    OLDXMENU="\${lwlibdir}/liblw.a"
-  fi
-  LIBXMENU="\$(OLDXMENU)"
+           [Define to 1 if you want to use version 11 of X windows.])
   LIBX_OTHER="\$(LIBXT) \$(LIBX_EXTRA)"
-  OLDXMENU_DEPS="\${OLDXMENU} ../src/\${OLDXMENU}"
 else
-  ## For a syntactically valid Makefile; not actually used for anything.
-  ## See comments in src/Makefile.in.
-  OLDXMENU=nothing
-  ## FIXME This case (!HAVE_X11 && HAVE_X_WINDOWS) is no longer possible(?).
-  if test "${HAVE_X_WINDOWS}" = "yes"; then
-    LIBXMENU="-lXMenu"
-  else
-    LIBXMENU=
-  fi
   LIBX_OTHER=
-  OLDXMENU_DEPS=
 fi
+AC_SUBST(LIBX_OTHER)
 
-if test "$HAVE_GTK" = "yes" || test "$HAVE_MENUS" != "yes"; then
-  OLDXMENU_TARGET=
-  OLDXMENU=nothing
-  LIBXMENU=
-  OLDXMENU_DEPS=
+if test "$HAVE_GTK" = yes ||
+   test "$HAVE_MENUS" != yes || test "$HAVE_X11" != yes; then
+  LIBXMENU_DIR=
+  LIBXMENU_BASE=
+elif test "$USE_X_TOOLKIT" = none; then
+  LIBXMENU_DIR='$(oldXMenudir)/'
+  LIBXMENU_BASE='libXMenu11.a'
+else
+  LIBXMENU_DIR='$(lwlibdir)/'
+  LIBXMENU_BASE='liblw.a'
 fi
-
-AC_SUBST(OLDXMENU_TARGET)
-AC_SUBST(OLDXMENU)
-AC_SUBST(LIBXMENU)
-AC_SUBST(LIBX_OTHER)
-AC_SUBST(OLDXMENU_DEPS)
+AC_SUBST(LIBXMENU_DIR)
+AC_SUBST(LIBXMENU_BASE)
 
 if test "${HAVE_MENUS}" = "yes" ; then
   AC_DEFINE(HAVE_MENUS, 1,
index 925f6389bf8b5649b5fedf4e9c3971cd3a5a47ce..1a8ac2190a379eca8159b4c23255e1178de7ab11 100644 (file)
@@ -1,5 +1,17 @@
 2013-11-21  Paul Eggert  <eggert@cs.ucla.edu>
 
+       Fix some dependency problems that cause unnecessary recompiles.
+       Problem reported by RMS in
+       <http://lists.gnu.org/archive/html/emacs-devel/2013-11/msg00421.html>.
+       * Makefile.in (OLDXMENU_TARGET, OLDXMENU, OLDXMENU_DEPS)
+       (really-lwlib, really-oldXMenu, stamp-oldxmenu)
+       (../src/$(OLDXMENU), $(OLDXMENU)): Remove.
+       (LIBXMENU_DIR, LIBXMENU_BASE): New macros.
+       (LIBXMENU): Use them.
+       (temacs$(EXEEXT)): Depend on $(LIBXMENU), not stamp-oldxmenu.
+       ($(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a, FORCE): New targets.
+       (boostrap-clean): No need to remove stamp-oldxmenu.
+
        Fix recently introduced bool vector overrun.
        This was due to an optimization that went awry.
        Reported by Glenn Morris in
index ca0b25a2f690960593790ddcb672332090f10f84..c110f3158d95e16abe4c2de70a8c1d23fcf55be6 100644 (file)
@@ -178,32 +178,14 @@ LIBXTR6=@LIBXTR6@
 ## Only used if HAVE_X_WINDOWS.
 LIBXT_OTHER=@LIBXT_OTHER@
 
-## If !HAVE_X11 || USE_GTK, empty.
-## Else if USE_X_TOOLKIT really-lwlib, else really-oldxmenu.
-OLDXMENU_TARGET=@OLDXMENU_TARGET@
-
 ## If !HAVE_X11 || USE_GTK, empty.
 ## Else if USE_X_TOOLKIT, $(lwlibdir)/liblw.a.
 ## Else $(oldXMenudir)/libXMenu11.a.
-## (Actually, rather than being empty, it is set to "nothing".
-## It is never actually used for anything in this case.
-## This is done because there is a rule with target $(OLDXMENU) below,
-## and I think it might be a syntax error with some makes to have
-## an empty target, even if the associated rule is never run.
-## http://lists.gnu.org/archive/html/help-make/2010-05/msg00058.html
-## The alternative would be to put that rule in a makefile fragment.)
-OLDXMENU=@OLDXMENU@
-
-## If HAVE_X11 && !USE_GTK, $(OLDXMENU) ../src/$(OLDXMENU); else empty.
-## We use stamp-xmenu with these two deps to both ensure that lwlib
-## gets remade based on its dependencies in its own makefile,
-## and remake temacs if lwlib gets changed by this.
-OLDXMENU_DEPS=@OLDXMENU_DEPS@
-
-## If !HAVE_X11 && HAVE_X_WINDOWS, -lXMenu (this case no longer possible).
-## Else if !HAVE_X11 || USE_GTK, empty.
-## Else $(OLDXMENU).
-LIBXMENU=@LIBXMENU@
+## LIBXMENU_DIR is the directory part, including any slash;
+## LIBXMENU_BASE is the rest.
+LIBXMENU_DIR=@LIBXMENU_DIR@
+LIBXMENU_BASE=@LIBXMENU_BASE@
+LIBXMENU=$(LIBXMENU_DIR)$(LIBXMENU_BASE)
 
 ## xmenu.o if HAVE_X_WINDOWS, else empty.
 XMENU_OBJ=@XMENU_OBJ@
@@ -504,7 +486,7 @@ $(lib)/libgnu.a: $(config_h)
 ## existence when setting Vinstallation_directory (FIXME?).
 ## This goes on to affect various things, and the emacs binary fails
 ## to start if Vinstallation_directory has the wrong value.
-temacs$(EXEEXT): stamp-oldxmenu $(ALLOBJS) \
+temacs$(EXEEXT): $(LIBXMENU) $(ALLOBJS) \
                 $(lib)/libgnu.a $(EMACSRES)
        $(CC) $(ALL_CFLAGS) $(TEMACS_LDFLAGS) $(LDFLAGS) \
          -o temacs $(ALLOBJS) $(lib)/libgnu.a $(W32_RES_LINK) $(LIBES)
@@ -514,29 +496,17 @@ temacs$(EXEEXT): stamp-oldxmenu $(ALLOBJS) \
          test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
 
 ## The following oldxmenu-related rules are only (possibly) used if
-## HAVE_X11 && !USE_GTK, but there is no harm in always defining them
-## (provided we take a little care that OLDXMENU is never empty).
-really-lwlib: globals.h
-       cd $(lwlibdir); $(MAKE) $(MFLAGS) \
-    CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)'
-       @true  # make -t should not create really-lwlib.
-.PHONY: really-lwlib
-
-really-oldXMenu:
-       cd $(oldXMenudir); $(MAKE) $(MFLAGS) \
-    CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)'
-       @true  # make -t should not create really-oldXMenu.
-.PHONY: really-oldXMenu
-
-## We do not really need this when OLDXMENU_DEPS is empty, but as
-## things stand we need something to satisfy the temacs dependency.
-stamp-oldxmenu: $(OLDXMENU_DEPS)
-       touch stamp-oldxmenu
-
-## Supply an ordering for parallel make.
-../src/$(OLDXMENU): $(OLDXMENU)
-
-$(OLDXMENU): $(OLDXMENU_TARGET)
+## HAVE_X11 && !USE_GTK, but there is no harm in always defining them.
+$(lwlibdir)/liblw.a: $(config_h) globals.h lisp.h FORCE
+       cd $(lwlibdir) && \
+         $(MAKE) $(MFLAGS) CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' \
+           liblw.a
+$(oldXMenudir)/libXMenu11.a: FORCE
+       cd $(oldXMenudir) && \
+         $(MAKE) $(MFLAGS) CC='$(CC)' CFLAGS='$(CFLAGS)' MAKE='$(MAKE)' \
+           libXMenu11.a
+FORCE:
+.PHONY: FORCE
 
 ../config.status: config.in epaths.in
        @echo "The file ${?:.in=.h} needs to be set up from $?."
@@ -572,7 +542,7 @@ clean: mostlyclean
 ## It should remove all files generated during a compilation/bootstrap,
 ## but not things like config.status or TAGS.
 bootstrap-clean: clean
-       rm -f epaths.h config.h config.stamp stamp-h1 stamp-oldxmenu
+       rm -f epaths.h config.h config.stamp stamp-h1
        if test -f ./.gdbinit; then \
          mv ./.gdbinit ./.gdbinit.save; \
          if test -f "$(srcdir)/.gdbinit"; then rm -f ./.gdbinit.save; \