For PR619:
authorReid Spencer <rspencer@reidspencer.com>
Wed, 24 Aug 2005 10:43:10 +0000 (10:43 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Wed, 24 Aug 2005 10:43:10 +0000 (10:43 +0000)
Make any header files that are automatically generated be preconditions of
the compilation. This ensures that if a *.h.in file is changed then its
corresponding *.h file gets updated on the next rebuild. Note that this can
lead to confusing (but correct) results if the *.h.in file changed
unsubstantially so that autoheader doesn't update the *.h file. In that case,
manually touch the *.h file in question to restore order. Moral of the story,
if you're going to "touch" a *.in file then modify it substantially.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23006 91177308-0d34-0410-b5e6-96231b3b80d8

Makefile.rules
autoconf/configure.ac

index 7dfb2b415079010c9e08b3635dfcb2b3d4057b47..09c0a9c1722a4d05557dad6104b436c789a41e9f 100644 (file)
@@ -28,6 +28,13 @@ TopLevelTargets  := check dist dist-check dist-clean tags dist-gzip dist-bzip2 \
 UserTargets      := $(RecursiveTargets) $(LocalTargets) $(TopLevelTargets)
 InternalTargets  := preconditions distdir dist-hook
 
+FilesToConfig := \
+  include/llvm/Config/config.h \
+  include/llvm/Support/DataTypes.h \
+  include/llvm/ADT/hash_map \
+  include/llvm/ADT/hash_set \
+  include/llvm/ADT/iterator
+
 ################################################################################
 # INITIALIZATION: Basic things the makefile needs
 ################################################################################
@@ -77,6 +84,9 @@ ifneq ($(MakefileConfigIn),)
 PreConditions      += $(MakefileConfig)
 endif
 
+FilesToConfigPATH  := $(addprefix $(PROJ_OBJ_ROOT)/,$(FilesToConfig))
+PreConditions      += $(FilesToConfigPATH)
+
 preconditions : $(PreConditions)
 
 #------------------------------------------------------------------------
@@ -134,6 +144,11 @@ $(ConfigStatusScript): $(ConfigureScript)
          $(ConfigStatusScript) --recheck $(ConfigureScriptFLAGS) && \
          $(ConfigStatusScript)
 
+.PRECIOUS: $(FilesToConfigPATH)
+$(FilesToConfigPATH) : $(PROJ_OBJ_ROOT)/% : $(PROJ_SRC_ROOT)/%.in 
+       $(Echo) Regenerating $*
+       $(Verb) cd $(PROJ_OBJ_ROOT) && $(ConfigStatusScript) $*
+
 #------------------------------------------------------------------------
 # Make sure the configuration makefile is up to date
 #------------------------------------------------------------------------
@@ -1576,3 +1591,4 @@ printvars::
        $(Echo) "YaccFiles    : " '$(YaccFiles)'
        $(Echo) "LexFiles     : " '$(LexFiles)'
        $(Echo) "Module       : " '$(Module)'
+       $(Echo) "FilesToConfig: " '$(FilesToConfigPATH)'
index 0c184516e3dac33ebf3a4d8829e86c03008b5818..661fc1d350124554058c4a06dc67054007bcd9cc 100644 (file)
@@ -634,6 +634,10 @@ dnl===
 dnl===-----------------------------------------------------------------------===
 
 dnl Configure header files
+dnl WARNING: dnl If you add or remove any of the following config headers, then
+dnl you MUST also update Makefile.rules so that the variable FilesToConfig
+dnl contains the same list of files as AC_CONFIG_HEADERS below. This ensures the
+dnl files can be updated automatically when their *.in sources change.
 AC_CONFIG_HEADERS([include/llvm/Config/config.h])
 AC_CONFIG_HEADERS([include/llvm/Support/DataTypes.h])
 AC_CONFIG_HEADERS([include/llvm/ADT/hash_map])