1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
|
# -*- shell-script -*-
#
# This file should be sourced into configure if the compiler is the
# GNU gcc compiler or a derivative. It is careful not to do anything
# if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes'
#
# Get the compiler version in a way that works for gcc, egcs, and
# pgcc unless a compiler version is already known
#
# cc_vendor: The compiler name: gcc, egcs, or pgcc
# cc_version: Version number: 2.91.60, 2.7.2.1
#
if test X = "X$cc_flags_set"; then
cc_version="`$CC $CFLAGS -v 2>&1 |grep 'gcc version' |\
sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
cc_version=`echo $cc_version |sed 's/[-a-z]//g'`
if test X = "X$cc_vendor" -a X != "X$cc_version"; then
cc_vendor=gcc
fi
if test "-" != "$cc_vendor-$cc_version"; then
echo "compiler '$CC' is GNU $cc_vendor-$cc_version"
fi
# Some version numbers
cc_vers_major=`echo $cc_version | cut -f1 -d.`
cc_vers_minor=`echo $cc_version | cut -f2 -d.`
cc_vers_patch=`echo $cc_version | cut -f3 -d.`
test -n "$cc_vers_major" || cc_vers_major=0
test -n "$cc_vers_minor" || cc_vers_minor=0
test -n "$cc_vers_patch" || cc_vers_patch=0
cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
fi
# GCC compilers before gcc-2.8.1 have problems with `long long'.
if test gcc = "$cc_vendor" -a "$cc_vers_all" -lt 2008001; then
cat <<EOF
**
** This compiler may be unable to properly compile the long long
** data type used extensively by hdf5, although specifying
** --disable-hsizet for configure may work around those bugs.
** There may be other code generation problems also, especially
** when optimizations are enabled. Please upgrade to at least GNU
** gcc version 2.8.1 before reporting bugs to the HDF5 team.
**
EOF
sleep 5
# GCC v2.96 (shipped with RH7.x) has problems with `float'-> `double' conversions.
elif test gcc = "$cc_vendor" -a "$cc_vers_all" -eq 2096000; then
cat <<EOF
**
** This compiler may have problems converting 'float' values to
** 'double' values. There may be other code generation problems
** as well.
**
** Please use a different version of gcc before reporting bugs.
**
EOF
sleep 5
# Current EGCS compilers have problems with `long long' and register
# allocation when optimizations are turned on for x86 systems.
elif test egcs = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
if test "$HSIZET" != "large"; then
cat <<EOF
**
** This compiler may have problems allocating registers when
** optimizations are enabled on some platforms. Specifying
** --disable-hsizet usually avoids the bug.
**
EOF
sleep 5
fi
# All current versions of PGCC have problems also.
elif test pgcc = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
cat <<EOF
**
** This compiler may have problems allocating registers for long
** long data types when optimizations are enabled. There may be
** other code generation problems as well. We know of no version
** of pgcc which is capable of compiling HDF5 in production mode.
** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
**
EOF
sleep 5
fi
# Architecture-specific flags
case "$host_os-$host_cpu" in
# FreeBSD sets the information from "hostname -m" to the general machine
# architecture, not the specific CPU for the machine, so even our
# Pentium II Xeon server is set to "i386". Once we know we are on a FreeBSD
# machine, use the "sysctl" command to get the CPU hardware model.
freebsd*)
host_cpu_model=`sysctl -n hw.model`
case "$host_cpu_model" in
# Hmm.. this might not catch Celerons, but it won't hurt them either...
*Pro*|*II*|*III*|*IV*|*Athlon*)
ARCH=${ARCH:="-march=i686"}
;;
esac
;;
*-i686)
ARCH=${ARCH:="-march=i686"}
;;
esac
# Host-specific flags
case "`hostname`" in
sleipnir.ncsa.uiuc.edu)
# case "$cc_vendor-$cc_version" in
# gcc-3*)
# ARCH="`echo $ARCH | sed -e 's/i686/athlon-mp/g'`"
# ;;
# esac
ARCH="$ARCH -pipe"
;;
esac
# Common GCC flags for various situations
case "$cc_vendor-$cc_version" in
gcc*|egcs*|pgcc*)
# General
CFLAGS="$CFLAGS $ARCH -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
# Production
case "$cc_vendor-$cc_version" in
gcc-2.95.[34])
PROD_CFLAGS="-g -O3 $NOFP"
;;
gcc-3.[0-4]*)
# The optimization level is reduced for gcc 3.* due to problems
# with code generation for src/H5Tconv.c with the -O2 & -O3
# optimization levels for gcc 3.2.2 and gcc 3.3.2 (which shows up as
# failures for various integer types -> long long conversions in the
# test/dtypes test). Perhaps later versions of gcc will fix this
# bug... - QAK - 2003/10/20
PROD_CFLAGS="-g -O3 $NOFP"
;;
gcc-3*)
# Be optimistic about future versions of gcc.. :-) - QAK - 2003/10/20
PROD_CFLAGS="-g -O3 $NOFP"
;;
*)
PROD_CFLAGS="-O $NOFP -finline-functions"
;;
esac
PROD_CPPFLAGS=
# Debug
DEBUG_CFLAGS="-g -fverbose-asm"
DEBUG_CPPFLAGS=
# Profile
PROFILE_CFLAGS=-pg
PROFILE_CPPFLAGS=
;;
esac
# Version specific GCC flags
#
# Please follow the pattern below by adding new versions at the top, copying
# the information from the previous version and adding modifications to that.
case "$cc_vendor-$cc_version" in
gcc-3.3*)
# Replace -ansi flag with -std=c99 flag
CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
# Append warning flags from gcc-2.95.* case
CFLAGS="$CFLAGS -Wno-long-long"
# Append warning flags from gcc-3* case
CFLAGS="$CFLAGS -Wfloat-equal -Wmissing-format-attribute"
# Append warning flags from gcc-3.2* case
CFLAGS="$CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
# The "format=2" warning generates too many warnings about valid
# usage in the library.
#CFLAGS="$CFLAGS -Wformat=2"
# The "unreachable code" warning does not appear to be reliable yet...
#CFLAGS="$CFLAGS -Wunreachable-code"
# Append more extra warning flags that only gcc3.3+ know about
CFLAGS="$CFLAGS -Wendif-labels"
# Flags are set
cc_flags_set=yes
;;
gcc-3.2*)
# Replace -ansi flag with -std=c99 flag
CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
# Append warning flags from gcc-2.95.* case
CFLAGS="$CFLAGS -Wno-long-long"
# Append warning flags from gcc-3* case
CFLAGS="$CFLAGS -Wfloat-equal -Wmissing-format-attribute"
# Append more extra warning flags that only gcc3.2+ know about
CFLAGS="$CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization"
# The "format=2" warning generates too many warnings about valid
# usage in the library.
#CFLAGS="$CFLAGS -Wformat=2"
# The "unreachable code" warning does not appear to be reliable yet...
#CFLAGS="$CFLAGS -Wunreachable-code"
# Flags are set
cc_flags_set=yes
;;
gcc-3*)
# Replace -ansi flag with -std=c99 flag
CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
# Append warning flags from gcc-2.95.* case
CFLAGS="$CFLAGS -Wno-long-long"
# Append some extra warning flags that only gcc3+ know about
CFLAGS="$CFLAGS -Wfloat-equal -Wmissing-format-attribute"
# Flags are set
cc_flags_set=yes
;;
gcc-2.95*)
# Append some extra warning flags that only gcc2.95+ know about
CFLAGS="$CFLAGS -Wno-long-long"
# Flags are set
cc_flags_set=yes
;;
gcc-2.96*)
# -Wno-long-long to suppress the long long warnings since we want
# to use it though it is not in the C89 standard.
CFLAGS="$CFLAGS -Wno-long-long"
# Flags are set
cc_flags_set=yes
;;
esac
# Clear cc info if no flags set
if test X = "X$cc_flags_set"; then
cc_vendor=
cc_version=
fi
|