*** /tmp/D2Sc4E_Makefile.tpl	2012-05-16 14:44:29.624228928 +0200
--- Makefile.tpl	2012-04-04 22:03:53.822060326 +0200
*************** install.all: install-no-fixedincludes
*** 906,916 ****
  		true ; \
  	fi
  
! # install-no-fixedincludes is used because Cygnus can not distribute
! # the fixed header files.
  .PHONY: install-no-fixedincludes
  install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-no-fixedincludes
  
  .PHONY: install-strip
  install-strip:
--- 906,917 ----
  		true ; \
  	fi
  
! # install-no-fixedincludes is used to allow the elaboration of binary packages
! # suitable for distribution, where we cannot include the fixed system header
! # files.
  .PHONY: install-no-fixedincludes
  install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-install-no-fixedincludes
  
  .PHONY: install-strip
  install-strip:
*************** check-gcc-[+language+]:
*** 1443,1467 ****
  check-[+language+]: check-gcc-[+language+][+ FOR lib-check-target +] [+ lib-check-target +][+ ENDFOR lib-check-target +]
  [+ ENDFOR languages +]
  
! # Install the gcc headers files, but not the fixed include files,
! # which Cygnus is not allowed to distribute.  This rule is very
! # dependent on the workings of the gcc Makefile.in.
! .PHONY: gcc-no-fixedincludes
! gcc-no-fixedincludes:
  	@if [ -f ./gcc/Makefile ]; then \
- 	  rm -rf gcc/tmp-include; \
- 	  mv gcc/include gcc/tmp-include 2>/dev/null; \
- 	  mkdir gcc/include; \
- 	  cp $(srcdir)/gcc/gsyslimits.h gcc/include/syslimits.h; \
- 	  touch gcc/stmp-fixinc gcc/include/fixed; \
- 	  rm -f gcc/stmp-headers gcc/stmp-int-hdrs; \
  	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	  $(HOST_EXPORTS) \
! 	  (cd ./gcc && \
! 	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
! 	  rm -rf gcc/include; \
! 	  mv gcc/tmp-include gcc/include 2>/dev/null; \
  	else true; fi
  @endif gcc
  
--- 1444,1459 ----
  check-[+language+]: check-gcc-[+language+][+ FOR lib-check-target +] [+ lib-check-target +][+ ENDFOR lib-check-target +]
  [+ ENDFOR languages +]
  
! # The gcc part of install-no-fixedincludes, which relies on an intimate
! # knowledge of how a number of gcc internal targets (inter)operate.  Delegate.
! .PHONY: gcc-install-no-fixedincludes
! gcc-install-no-fixedincludes:
  	@if [ -f ./gcc/Makefile ]; then \
  	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(HOST_EXPORTS) \
! 	  (cd ./gcc \
! 	   && $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \
  	else true; fi
  @endif gcc
  
*** /tmp/v5Xfal_Makefile.in	2012-05-16 14:44:29.516103626 +0200
--- Makefile.in	2012-04-04 22:03:53.821228798 +0200
*************** install.all: install-no-fixedincludes
*** 2426,2436 ****
  		true ; \
  	fi
  
! # install-no-fixedincludes is used because Cygnus can not distribute
! # the fixed header files.
  .PHONY: install-no-fixedincludes
  install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-no-fixedincludes
  
  .PHONY: install-strip
  install-strip:
--- 2426,2437 ----
  		true ; \
  	fi
  
! # install-no-fixedincludes is used to allow the elaboration of binary packages
! # suitable for distribution, where we cannot include the fixed system header
! # files.
  .PHONY: install-no-fixedincludes
  install-no-fixedincludes: installdirs install-host-nogcc \
! 	install-target gcc-install-no-fixedincludes
  
  .PHONY: install-strip
  install-strip:
*************** check-gcc-go:
*** 40721,40745 ****
  check-go: check-gcc-go check-target-libgo
  
  
! # Install the gcc headers files, but not the fixed include files,
! # which Cygnus is not allowed to distribute.  This rule is very
! # dependent on the workings of the gcc Makefile.in.
! .PHONY: gcc-no-fixedincludes
! gcc-no-fixedincludes:
  	@if [ -f ./gcc/Makefile ]; then \
- 	  rm -rf gcc/tmp-include; \
- 	  mv gcc/include gcc/tmp-include 2>/dev/null; \
- 	  mkdir gcc/include; \
- 	  cp $(srcdir)/gcc/gsyslimits.h gcc/include/syslimits.h; \
- 	  touch gcc/stmp-fixinc gcc/include/fixed; \
- 	  rm -f gcc/stmp-headers gcc/stmp-int-hdrs; \
  	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
  	  $(HOST_EXPORTS) \
! 	  (cd ./gcc && \
! 	   $(MAKE) $(GCC_FLAGS_TO_PASS) install); \
! 	  rm -rf gcc/include; \
! 	  mv gcc/tmp-include gcc/include 2>/dev/null; \
  	else true; fi
  @endif gcc
  
--- 40722,40737 ----
  check-go: check-gcc-go check-target-libgo
  
  
! # The gcc part of install-no-fixedincludes, which relies on an intimate
! # knowledge of how a number of gcc internal targets (inter)operate.  Delegate.
! .PHONY: gcc-install-no-fixedincludes
! gcc-install-no-fixedincludes:
  	@if [ -f ./gcc/Makefile ]; then \
  	  r=`${PWD_COMMAND}`; export r; \
! 	  s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
  	  $(HOST_EXPORTS) \
! 	  (cd ./gcc \
! 	   && $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \
  	else true; fi
  @endif gcc
  
*** /tmp/gBGE0i_Makefile.in	2012-05-16 14:44:29.657229003 +0200
--- gcc/Makefile.in	2012-05-16 14:44:10.657103759 +0200
*************** gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(
*** 4013,4022 ****
--- 4013,4028 ----
  # Build the include directories.
  stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) fixinc_list
  # Copy in the headers provided with gcc.
+ #
  # The sed command gets just the last file name component;
  # this is necessary because VPATH could add a dirname.
  # Using basename would be simpler, but some systems don't have it.
+ #
  # The touch command is here to workaround an AIX/Linux NFS bug.
+ #
+ # The move-if-change + cp -p twists for limits.h are intended to preserve
+ # the time stamp when we regenerate, to prevent pointless rebuilds during
+ # e.g. install-no-fixedincludes.
  	-if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi
  	-if [ -d include-fixed ] ; then true; else mkdir include-fixed; chmod a+rx include-fixed; fi
  	for file in .. $(USER_H); do \
*************** stmp-int-hdrs: $(STMP_FIXINC) $(USER_H)
*** 4065,4072 ****
  	  fi; \
  	  $(mkinstalldirs) $${fix_dir}; \
  	  chmod a+rx $${fix_dir} || true; \
  	  rm -f $${fix_dir}/limits.h; \
! 	  mv tmp-xlimits.h $${fix_dir}/limits.h; \
  	  chmod a+r $${fix_dir}/limits.h; \
  	done
  # Install the README
--- 4071,4080 ----
  	  fi; \
  	  $(mkinstalldirs) $${fix_dir}; \
  	  chmod a+rx $${fix_dir} || true; \
+ 	  $(SHELL) $(srcdir)/../move-if-change \
+ 	    tmp-xlimits.h  tmp-limits.h; \
  	  rm -f $${fix_dir}/limits.h; \
! 	  cp -p tmp-limits.h $${fix_dir}/limits.h; \
  	  chmod a+r $${fix_dir}/limits.h; \
  	done
  # Install the README
*************** stmp-fixinc: gsyslimits.h macro_list fix
*** 4168,4173 ****
--- 4176,4221 ----
  	fi
  	$(STAMP) stmp-fixinc
  #
+ 
+ # Install with the gcc headers files, not the fixed include files, which we
+ # are typically not allowed to distribute.  The general idea is to:
+ #  - Get to "install" with a bare set of internal headers, not the
+ #    fixed system ones,
+ #  - Prevent rebuilds of what normally depends on the headers, which is
+ #    useless for installation purposes and would rely on improper headers.
+ #  - Restore as much of the original state as possible.
+ 
+ .PHONY: install-no-fixedincludes
+ 
+ install-no-fixedincludes:
+ # Stash the current set of headers away, save stamps we're going to alter
+ # explicitly, and arrange for fixincludes not to run next time we trigger
+ # a headers rebuild.
+ 
+ 	-rm -rf tmp-include
+ 	-mv include tmp-include 2>/dev/null
+ 	-mv include-fixed tmp-include-fixed 2>/dev/null
+ 	-mv stmp-int-hdrs tmp-stmp-int-hdrs 2>/dev/null
+ 	-mv stmp-fixinc tmp-stmp-fixinc 2>/dev/null
+ 	-mkdir include
+ 	-cp -p $(srcdir)/gsyslimits.h include/syslimits.h
+ 	-touch stmp-fixinc
+ 
+ # Rebuild our internal headers, restore the original stamps so that "install"
+ # doesn't trigger pointless rebuilds because of that update, then do install
+ 
+ 	$(MAKE) $(FLAGS_TO_PASS) stmp-int-hdrs
+ 
+ 	-mv tmp-stmp-int-hdrs stmp-int-hdrs 2>/dev/null
+ 	-mv tmp-stmp-fixinc stmp-fixinc 2>/dev/null
+ 
+ 	$(MAKE) $(FLAGS_TO_PASS) install
+ 
+ # Restore the original set of maybe-fixed headers
+ 
+ 	-rm -rf include; mv tmp-include include 2>/dev/null
+ 	-rm -rf include-fixed; mv tmp-include-fixed include-fixed 2>/dev/null
+ 
  # Remake the info files.
  
  doc: $(BUILD_INFO) $(GENERATED_MANPAGES)
