summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2007-04-21 13:19:43 +0000
committertruelight <truelight@openttd.org>2007-04-21 13:19:43 +0000
commita1ebdb47681cc42548730157bee6da1aef78d84a (patch)
treecccb543fe47f64f0f43e0d0c5a5061f8d708e070
parent56d0193f99cf25d934ddd0ef50afbc4729dc4773 (diff)
downloadopenttd-a1ebdb47681cc42548730157bee6da1aef78d84a.tar.xz
(svn r9710) -Add: added support for GCC 2.95. This makes MorphOS target alive again. With a big thanks to tokai and Rubidium!!
-rw-r--r--Makefile.src.in16
-rw-r--r--config.lib8
2 files changed, 24 insertions, 0 deletions
diff --git a/Makefile.src.in b/Makefile.src.in
index 494776061..46b425fec 100644
--- a/Makefile.src.in
+++ b/Makefile.src.in
@@ -28,6 +28,7 @@ CFLAGS_MAKEDEP= !!CFLAGS_MAKEDEP!!
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 @@ CFLAGS += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR)
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_C): %.o: $(SRC_DIR)/%.c $(DEP_MASK) $(FILE_DEP)
$(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)'
diff --git a/config.lib b/config.lib
index 3505229e3..8136ec0ce 100644
--- a/config.lib
+++ b/config.lib
@@ -673,6 +673,13 @@ make_cflags_and_ldflags() {
CC_CFLAGS="$CC_CFLAGS -Wstrict-prototypes"
fi
+ gcc295=""
+ if [ "$cc_version" = 29 ]; then
+ # Make sure we mark GCC 2.95 flag for Makefile.src.in, as we
+ # need a lovely hack there to make it compile correctly.
+ gcc295="1"
+ fi
+
if [ $cc_version -ge 30 ]; then
CFLAGS="$CFLAGS -W -Wno-unused-parameter"
fi
@@ -1853,6 +1860,7 @@ make_sed() {
s#!!CONFIGURE_FILES!!#$CONFIGURE_FILES#g;
s#!!REVISION!!#$revision#g;
s#!!AWK!!#$awk#g;
+ s#!!GCC295!!#$gcc295#g;
s#!!ENABLE_INSTALL!!#$enable_install#g;
"
}