Makefile.src.in
branchNewGRF_ports
changeset 6719 4cc327ad39d5
parent 6430 8cea06b5d5e3
child 6720 35756db7e577
child 7308 9c2affec007a
child 9626 79f2b5a0cdd7
--- a/Makefile.src.in	Tue Mar 27 23:27:27 2007 +0000
+++ b/Makefile.src.in	Sat Jun 02 19:59:29 2007 +0000
@@ -28,6 +28,7 @@
 SORT         = !!SORT!!
 REVISION     = !!REVISION!!
 AWK          = !!AWK!!
+GCC295       = !!GCC295!!
 CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!!
 CONFIG_CACHE_LINKER   = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!!
 CONFIG_CACHE_ENDIAN   = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_ENDIAN!!
@@ -51,6 +52,17 @@
 
 ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK)
 
+# This 'sed' basicly just removes 'const' from the line if it is a 2+D array
+# For more information, please check:
+#  http://maillist.openttd.org/pipermail/devs/2007-April/000284.html
+#  http://maillist.openttd.org/pipermail/devs/2007-February/000248.html
+GCC295_FIX=sed -r 's/^(\t*)(.*)( const )([A-Za-z0-9_ ]+(\[.*\]){2,})(( = \{)|(;))(.*)$$/\1\2 \4\6\8\9/g'
+# This 'sed' removes the 3rd '4' in the # lines of the -E output of
+#  gcc 2.95.3 and lower, as it should indicate that it is a C-linkage, but the
+#  compiler can't handle that information (just don't ask). So we remove it
+#  and then it compiles happily and without bitching :)
+GCC295_FIX_2=sed -e 's|\(^\# [0-9][0-9]* "[^"]*"[ 0-9]*\) 4$$|\1|g'
+
 # Check if we want to show what we are doing
 ifdef VERBOSE
 	Q =
@@ -210,7 +222,11 @@
 
 $(OBJS_CPP): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP)
 	$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
+ifeq ($(GCC295), 1)
+	$(Q)$(CXX_HOST) -E $(CFLAGS) $< | $(GCC295_FIX) | $(GCC295_FIX_2) | $(CXX_HOST) $(CFLAGS) -c -o $@ -x c++ -
+else
 	$(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
+endif
 
 $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP)
 	$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)'