From 7eb4825435704daae05a9ece2536811809ab026b Mon Sep 17 00:00:00 2001 From: Jared Casper Date: Mon, 19 Oct 2009 22:58:54 -0700 Subject: [PATCH] More build system tweaks, fixing pr2881797. Use the time stamp file technique recommended by the autoconf manual to prevent unneccesary rebuilds because of an unchanged config.h. Uses the automake trick of generating the stamp files in the _AC_AM_CONFIG_HEADER_HOOK macro instead of littering the source directory with stamp-h.in files. Add an extra ./config.status run after ./config.status --recheck because with --recheck it doesn't actually try to remake the generated files (and thus doesn't make the timestamp files). Thus without the extra run, each stamp-*-h target would need to independently run ./config.status to make sure it wasn't changed by the configuration change. An orthogonal fix of how config.status is called in subdirectories. When in a subdirectory and config.status is called with ../config.status and $(srcdir) is a relative path, config.status gets confused. Fixed by replacing '../config.status --file=Makefile.in' with 'cd ..; ./config.status --file=/Makefile.in' (cherry picked from commit 7ead2aa88ba9d1ec08016e589319f6c344748356) --- Makefile.in | 13 +++++++++---- aclocal.m4 | 14 ++++++++++++++ cadpli/Makefile.in | 2 +- driver/Makefile.in | 2 +- ivlpp/Makefile.in | 2 +- libveriuser/Makefile.in | 10 ++++++---- tgt-null/Makefile.in | 2 +- tgt-stub/Makefile.in | 2 +- tgt-vhdl/Makefile.in | 8 +++++--- tgt-vvp/Makefile.in | 8 +++++--- vpi/Makefile.in | 8 +++++--- vvp/Makefile.in | 10 ++++++---- 12 files changed, 55 insertions(+), 26 deletions(-) diff --git a/Makefile.in b/Makefile.in index 336bec07f..493de5918 100644 --- a/Makefile.in +++ b/Makefile.in @@ -134,17 +134,22 @@ $(FF) $(TT) Makefile: $(srcdir)/Makefile.in config.status ./config.status --file=$@ -config.h: $(srcdir)/config.h.in - ./config.status --header=$@ +stamp-config-h: $(srcdir)/config.h.in config.status + @rm -f $@ + ./config.status config.h +config.h: stamp-config-h -_pli_types.h: $(srcdir)/_pli_types.h.in - ./config.status --header=$@ +stamp-_pli_types-h: $(srcdir)/_pli_types.h.in config.status + @rm -f $@ + ./config.status _pli_types.h +_pli_types.h: stamp-_pli_types-h $(srcdir)/configure: $(srcdir)/configure.in cd $(srcdir) && autoconf config.status: $(srcdir)/configure ./config.status --recheck + ./config.status ifeq (@WIN32@,yes) # Under Windows (mingw) I need to make the ivl.exe in two steps. diff --git a/aclocal.m4 b/aclocal.m4 index 57bccf81a..368f7da60 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -216,3 +216,17 @@ case "${host}" in ;; esac ])# AX_CPP_PRECOMP + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp file name are based on the header name. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[ +_config_header=$1 +_stamp_name=stamp-`expr //$_config_header : '.*/\([[^./]]*\)\.[[^./]]*$'`-h +echo "timestamp for $_config_header" > `AS_DIRNAME(["$_config_header"])`/[]$_stamp_name +]) #_AC_AM_CONFIG_HEADER_HOOK diff --git a/cadpli/Makefile.in b/cadpli/Makefile.in index 2c078fb16..66005c641 100644 --- a/cadpli/Makefile.in +++ b/cadpli/Makefile.in @@ -60,7 +60,7 @@ dep: O = cadpli.o Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=cadpli/$@ SYSTEM_VPI_LDFLAGS = -L../vvp -lvpi ifeq (@MINGW32@,yes) diff --git a/driver/Makefile.in b/driver/Makefile.in index c7fa10981..1a366f73f 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -59,7 +59,7 @@ distclean: clean rm -f Makefile config.log Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=driver/$@ O = main.o substit.o cflexor.o cfparse.o diff --git a/ivlpp/Makefile.in b/ivlpp/Makefile.in index 3d5162064..955c81832 100644 --- a/ivlpp/Makefile.in +++ b/ivlpp/Makefile.in @@ -52,7 +52,7 @@ distclean: clean rm -f Makefile config.log Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=ivlpp/$@ O = main.o lexor.o diff --git a/libveriuser/Makefile.in b/libveriuser/Makefile.in index ab54a0dcf..43b0d940e 100644 --- a/libveriuser/Makefile.in +++ b/libveriuser/Makefile.in @@ -59,11 +59,13 @@ all: dep libveriuser.a $(ALL32) check: all -Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ +Makefile: $(srcdir)/Makefile.in + cd ..; ./config.status --file=libveriuser/$@ -config.h: $(srcdir)/config.h.in ../config.status - ../config.status --header=$@ +stamp-config-h: $(srcdir)/config.h.in ../config.status + @rm -f $@ + cd ..; ./config.status --header=libveriuser/config.h +config.h: stamp-config-h libveriuser.o: $O $(LD) -r -o $@ $O diff --git a/tgt-null/Makefile.in b/tgt-null/Makefile.in index 07fd3d996..22a34ee41 100644 --- a/tgt-null/Makefile.in +++ b/tgt-null/Makefile.in @@ -70,7 +70,7 @@ distclean: clean rm -f Makefile config.log Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=tgt-null/$@ install: all installdirs $(libdir)/ivl$(suffix)/null.tgt $(INSTALL_DOC) $(libdir)/ivl$(suffix)/null.conf $(libdir)/ivl$(suffix)/null-s.conf diff --git a/tgt-stub/Makefile.in b/tgt-stub/Makefile.in index 50b30b59c..821c547ea 100644 --- a/tgt-stub/Makefile.in +++ b/tgt-stub/Makefile.in @@ -71,7 +71,7 @@ distclean: clean rm -f Makefile config.log Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=tgt-stub/$@ install: all installdirs $(libdir)/ivl$(suffix)/stub.tgt \ $(libdir)/ivl$(suffix)/stub.conf $(libdir)/ivl$(suffix)/stub-s.conf diff --git a/tgt-vhdl/Makefile.in b/tgt-vhdl/Makefile.in index c59e1ecec..c0de60beb 100644 --- a/tgt-vhdl/Makefile.in +++ b/tgt-vhdl/Makefile.in @@ -64,10 +64,12 @@ vhdl.tgt: $O $(TGTDEPLIBS) $(CXX) @shared@ -o $@ $O $(TGTLDFLAGS) Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=tgt-vhdl/$@ -vhdl_config.h: $(srcdir)/vhdl_config.h.in ../config.status - ../config.status --header=$@ +stamp-vhdl_config-h: $(srcdir)/vhdl_config.h.in ../config.status + @rm -f $@ + cd ..; ./config.status --header=tgt-vhdl/vhdl_config.h +vhdl_config.h: stamp-vhdl_config-h clean: rm -rf $(O) dep vhdl.tgt diff --git a/tgt-vvp/Makefile.in b/tgt-vvp/Makefile.in index 37b728fb9..9964b51a3 100644 --- a/tgt-vvp/Makefile.in +++ b/tgt-vvp/Makefile.in @@ -75,10 +75,12 @@ vvp-s.conf: $(srcdir)/vvp-s.conf.in Makefile echo 'flag:VVP_EXECUTABLE=$(bindir)/vvp$(suffix)' | cat $(srcdir)/vvp-s.conf.in - > vvp-s.conf Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=tgt-vvp/$@ -vvp_config.h: $(srcdir)/vvp_config.h.in ../config.status - ../config.status --header=$@ +stamp-vvp_config-h: $(srcdir)/vvp_config.h.in ../config.status + @rm -f $@ + cd ..; ./config.status --header=tgt-vvp/vvp_config.h +vvp_config.h: stamp-vvp_config-h clean: rm -rf *.o dep vvp.tgt vvp.conf vvp-s.conf diff --git a/vpi/Makefile.in b/vpi/Makefile.in index d19776c6c..5959ce9a2 100644 --- a/vpi/Makefile.in +++ b/vpi/Makefile.in @@ -112,10 +112,12 @@ distclean: clean rm -f Makefile config.log vpi_config.h Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ + cd ..; ./config.status --file=vpi/$@ -vpi_config.h: $(srcdir)/vpi_config.h.in ../config.status - ../config.status --header=$@ +stamp-vpi_config-h: $(srcdir)/vpi_config.h.in ../config.status + @rm -f $@ + cd ..; ./config.status --header=vpi/vpi_config.h +vpi_config.h: stamp-vpi_config-h check: all diff --git a/vvp/Makefile.in b/vvp/Makefile.in index 6ae7c7fc4..fbc11295b 100644 --- a/vvp/Makefile.in +++ b/vvp/Makefile.in @@ -150,11 +150,13 @@ INSTALL_DOC = $(mandir)/man1/vvp$(suffix).1 INSTALL_DOCDIR = $(mandir)/man1 endif -Makefile: $(srcdir)/Makefile.in ../config.status - ../config.status --file=$@ +Makefile: $(srcdir)/Makefile.in + cd ..; ./config.status --file=vvp/$@ -config.h: $(srcdir)/config.h.in ../config.status - ../config.status --header=$@ +stamp-config-h: $(srcdir)/config.h.in ../config.status + @rm -f $@ + cd ..; ./config.status --header=vvp/config.h +config.h: stamp-config-h install: all installdirs $(bindir)/vvp$(suffix)@EXEEXT@ $(libdir)/libvpi$(suffix).a $(INSTALL_DOC)