diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-07-07 08:50:40 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-07-07 08:50:40 +0000 |
commit | 0bde11509ca13d4d0914496ee652d7c2b43a0420 (patch) | |
tree | 590b887273ad06a885d657abb11bdb47a8fe5e59 /Makefile | |
parent | a6ce3525d991c7df80aec6355b9d0aa941810a94 (diff) | |
download | haskell-0bde11509ca13d4d0914496ee652d7c2b43a0420.tar.gz |
Avoid unnecessary recompilation after ./configure (helps #3228)
We cache the old versions of files generated by configure, so that if
configure touches the file without changing it, we can detect that and
restore the timestamp.
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -51,10 +51,39 @@ include mk/custom-settings.mk # No need to update makefiles for these targets: REALGOALS=$(filter-out bootstrapping-files framework-pkg clean clean_% distclean maintainer-clean show help,$(MAKECMDGOALS)) +# configure touches certain files even if they haven't changed. This +# can mean a lot of unnecessary recompilation after a re-configure, so +# here we cache the old versions of these files so we can restore the +# timestamps. +# +define check-configure-file +# $1 = file +if ! test -f $1.old; then \ + echo "backing up $1"; \ + cp $1 $1.old; \ + touch -r $1 $1.old; \ +else \ + if test $1 -nt $1.old; then \ + if cmp $1 $1.old; then \ + echo "$1 has been touched, but has not changed"; \ + touch -r $1.old $1; \ + else \ + echo "$1 has changed"; \ + cp $1 $1.old; \ + touch -r $1 $1.old; \ + fi \ + fi \ +fi +endef + # NB. not the same as saying '%: ...', which doesn't do the right thing: # it does nothing if we specify a target that already exists. .PHONY: $(REALGOALS) $(REALGOALS) all: + @$(call check-configure-file,mk/config.mk) + @$(call check-configure-file,mk/project.mk) + @$(call check-configure-file,compiler/ghc.cabal) + @echo "===--- updating makefiles phase 0" $(MAKE) -r --no-print-directory -f ghc.mk phase=0 just-makefiles ifneq "$(OMIT_PHASE_1)" "YES" |