Implement an alternative way of handling generated lex files in CVS. This
authorChris Lattner <sabre@nondot.org>
Tue, 14 Feb 2006 05:12:00 +0000 (05:12 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 14 Feb 2006 05:12:00 +0000 (05:12 +0000)
should solve the "updating cvs when .l files change give me conflict markers
that break my build" issue.

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

Makefile.rules

index 9a3c50507502524526efb905200f73e9b166cda9..b6178d63e5b10f99a9f76678f358f50c0448c54e 100644 (file)
@@ -1204,6 +1204,8 @@ ifneq ($(LexFiles),)
 %.c: %.l
 %.cpp: %.l
 
+all:: $(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs)
+
 # Note the extra sed filtering here, used to cut down on the warnings emited 
 # by GCC.  The last line is a gross hack to work around flex aparently not 
 # being able to resize the buffer on a large token input.  Currently, for 
@@ -1217,10 +1219,18 @@ $(PROJ_SRC_DIR)/%.cpp: $(PROJ_SRC_DIR)/%.l
        $(SED) 's/void \*yy_flex_realloc/inline void *yy_flex_realloc/' | \
        $(SED) 's/#define YY_BUF_SIZE 16384/#define YY_BUF_SIZE (16384*64)/' \
          > $(PROJ_SRC_DIR)/$*.cpp
-       $(Echo) "*** DON'T FORGET TO CHECK IN $*.cpp (generated file)"
-
-LexObjs := $(patsubst %.l,$(ObjDir)/%.o,$(LexFiles))
-$(LexObjs): $(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
+    
+# IFF the .l file has changed since it was last checked into CVS, copy the .l
+# file to .l.cvs and the generated .cpp file to .cpp.cvs.  We use this mechanism
+# so that people without flex can build LLVM by copying the .cvs files to the 
+# source location and building them.
+$(LexFiles:%.l=$(PROJ_SRC_DIR)/%.cpp.cvs): \
+$(PROJ_SRC_DIR)/%.cpp.cvs: $(PROJ_SRC_DIR)/%.cpp
+       $(Verb) $(CMP) -s $@ $< || \
+      ($(CP) $< $@; $(CP) $(PROJ_SRC_DIR)/$*.l $(PROJ_SRC_DIR)/$*.l.cvs)
+
+$(LexFiles:%.l=$(ObjDir)/%.o) : \
+$(ObjDir)/%.o : $(PROJ_SRC_DIR)/%.cpp
 
 clean-local::
        -$(Verb) $(RM) -f $(LexOutput)
@@ -1323,7 +1333,7 @@ ifneq ($strip($(filter-out clean clean-local dist-clean,$(MAKECMDGOALS))),)
 
 # Get the list of dependency files
 DependFiles := $(basename $(filter %.cpp %.c %.cc, $(Sources)))
-DependFiles := $(patsubst %,$(PROJ_OBJ_DIR)/$(BuildMode)/%.d,$(DependFiles))
+DependFiles := $(DependFiles:%=$(PROJ_OBJ_DIR)/$(BuildMode)/%.d)
 
 -include /dev/null $(DependFiles)