mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
e916acd018
* commit '2f09d8f3c8a4a44932c1b8ffb0f6ea2219059a5c': Move the GNU warnings configuration under config/gnu-warnings/ and trim the filename prefixes. Update config/gnu-flags to suit. By default, demote warnings promoted to errors back to warnings. Incorporate the H5_ECFLAGS into the library CFLAGS. Now a bunch of errors will occur. Next commit will demote the warnings promoted to errors back to warnings again. Break out warnings into more files that autoconf and CMake can share. This change temporarily disables the warnings that were promoted to errors, but I will add those warnings back as warnings, not errors, in the next commit.
319 lines
10 KiB
Bash
319 lines
10 KiB
Bash
# -*- shell-script -*-
|
|
#
|
|
# Copyright by The HDF Group.
|
|
# Copyright by the Board of Trustees of the University of Illinois.
|
|
# All rights reserved.
|
|
#
|
|
# This file is part of HDF5. The full HDF5 copyright notice, including
|
|
# terms governing use, modification, and redistribution, is contained in
|
|
# the COPYING file, which can be found at the root of the source code
|
|
# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
|
|
# If you do not have access to either file, you may request a copy from
|
|
# help@hdfgroup.org.
|
|
|
|
|
|
# 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'
|
|
#
|
|
|
|
#
|
|
# For now, do not promote any warnings to errors.
|
|
#
|
|
PROMOTE_ERRORS_DFLT=no
|
|
|
|
#
|
|
# This filter rewrites -Werror= as -W, in that way demoting warnings
|
|
# promoted to errors back to warnings, if PROMOTE_ERRORS is no.
|
|
#
|
|
demote_errors()
|
|
{
|
|
if [ ${PROMOTE_ERRORS:-${PROMOTE_ERRORS_DFLT}} = no ]; then
|
|
sed 's,-Werror=,-W,g'
|
|
else
|
|
cat
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Prepend `$srcdir/config/gnu-` to the filename suffix(es) given as
|
|
# subroutine argument(s), remove comments starting with # and ending
|
|
# at EOL, replace spans of whitespace (including newlines) with spaces,
|
|
# and re-emit the file(s) thus filtered on the standard output stream.
|
|
#
|
|
load_gcc_arguments()
|
|
{
|
|
set -- $(for arg; do
|
|
sed 's,#.*$,,' $srcdir/config/gnu-warnings/${arg} | demote_errors
|
|
done)
|
|
IFS=' ' echo "$*"
|
|
}
|
|
|
|
|
|
# Get the compiler version in a way that works for gcc
|
|
# unless a compiler version is already known
|
|
#
|
|
# cc_vendor: The compiler name: gcc
|
|
# cc_version: Version number: 2.91.60, 2.7.2.1
|
|
#
|
|
if test "X-" = "X-$cc_flags_set"; then
|
|
# PathScale compiler spits out gcc version string too. Need to
|
|
# filter it out.
|
|
# icc beginning with version 12 includes a "gcc version compatiblilty"
|
|
# string, causing the gcc H5_CFLAGS to be erroneously added. The line
|
|
# "grep -v 'icc version'" causes the discarding of any output
|
|
# containing 'icc version'. The cc_version for icc is correctly determined
|
|
# and flags added in the intel-flags script.
|
|
cc_version="`$CC $CFLAGS $H5_CFLAGS -v 2>&1 | grep -v 'PathScale' |\
|
|
grep -v '^icc.*version' |\
|
|
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
|
|
|
|
# Get the compiler 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
|
|
fi
|
|
|
|
if test "X-gcc" = "X-$cc_vendor"; then
|
|
|
|
###############################
|
|
# Architecture-specific flags #
|
|
###############################
|
|
|
|
arch=
|
|
case "$host_os-$host_cpu" in
|
|
# FreeBSD sets the information from "uname -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*-i386)
|
|
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*)
|
|
# architecture-specific optimizations cause problems
|
|
# for some users who build binaries to be used on
|
|
# multiple architectures.
|
|
# arch="-march=i686"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
*-i686)
|
|
# architecture-specific optimizations cause problems
|
|
# for some users who build binaries to be used on
|
|
# multiple architectures.
|
|
# arch="-march=i686"
|
|
;;
|
|
esac
|
|
|
|
case "$host_os-$host_cpu" in
|
|
# cygwin needs the "-std=c99" flag removed, so make
|
|
# a specific case for Cygwin without the flag and a default
|
|
# case to add the flag everywhere else
|
|
cygwin-*)
|
|
;;
|
|
|
|
*)
|
|
H5_CFLAGS="$H5_CFLAGS -std=c99"
|
|
;;
|
|
esac
|
|
|
|
H5_CFLAGS="$H5_CFLAGS $arch"
|
|
|
|
##############
|
|
# Production #
|
|
##############
|
|
|
|
# NDEBUG is handled explicitly by the configure script
|
|
if test $cc_vers_major -le 4; then
|
|
PROD_CFLAGS=
|
|
else
|
|
PROD_CFLAGS="-fstdarg-opt"
|
|
fi
|
|
|
|
#########
|
|
# Debug #
|
|
#########
|
|
|
|
# NDEBUG is handled explicitly by the configure script
|
|
# -g is handled by the symbols flags
|
|
if test $cc_vers_major -le 4; then
|
|
DEBUG_CFLAGS=
|
|
else
|
|
DEBUG_CFLAGS="-ftrapv -fno-common"
|
|
fi
|
|
|
|
###########
|
|
# Symbols #
|
|
###########
|
|
|
|
NO_SYMBOLS_CFLAGS="-s"
|
|
SYMBOLS_CFLAGS="-g -fno-omit-frame-pointer"
|
|
|
|
#############
|
|
# Profiling #
|
|
#############
|
|
|
|
PROFILE_CFLAGS="-pg"
|
|
|
|
################
|
|
# Optimization #
|
|
################
|
|
|
|
if test $cc_vers_major -le 4; then
|
|
HIGH_OPT_CFLAGS="-O3"
|
|
DEBUG_OPT_CFLAGS=
|
|
else
|
|
HIGH_OPT_CFLAGS="-O3"
|
|
DEBUG_OPT_CFLAGS="-Og"
|
|
fi
|
|
NO_OPT_CFLAGS="-O0"
|
|
|
|
############
|
|
# Warnings #
|
|
############
|
|
|
|
###########
|
|
# General #
|
|
###########
|
|
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments general)"
|
|
H5_ECFLAGS="$H5_ECFLAGS $(load_gcc_arguments error-general)"
|
|
|
|
######################
|
|
# Developer warnings #
|
|
######################
|
|
|
|
NO_DEVELOPER_WARNING_CFLAGS=$(load_gcc_arguments no-developer-general)
|
|
DEVELOPER_WARNING_CFLAGS=$(load_gcc_arguments developer-general)
|
|
|
|
#######################
|
|
# gcc 4 special cases #
|
|
#######################
|
|
|
|
# GCC 4.2 through 4.6
|
|
if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 2 -o $cc_vers_major -eq 4 -a $cc_vers_minor -le 6; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.2-4.6)"
|
|
fi
|
|
|
|
# GCC 4.2 through 4.3
|
|
if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 2 -o $cc_vers_major -eq 4 -a $cc_vers_minor -le 3; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.2-4.3)"
|
|
fi
|
|
|
|
# GCC 4.5 through 4.6
|
|
if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -le 6; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.5-4.6)"
|
|
fi
|
|
|
|
# GCC 4.2 through 4.4
|
|
if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 2 -a $cc_vers_major -eq 4 -a $cc_vers_minor -le 4; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.2-4.4)"
|
|
fi
|
|
|
|
# GCC 4.2 through the end of GCC 4 series
|
|
if test $cc_vers_major -eq 4 -a $cc_vers_minor -ge 2; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.2-4.last)"
|
|
fi
|
|
|
|
#############################
|
|
# Version-specific warnings #
|
|
#############################
|
|
|
|
# gcc >= 4.3
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 3; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.3)"
|
|
fi
|
|
|
|
# gcc >= 4.4
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 4; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.4)"
|
|
fi
|
|
|
|
# gcc >= 4.5
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 5; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.5)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-4.5)"
|
|
NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments no-developer-4.5)"
|
|
fi
|
|
|
|
# gcc >= 4.6
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 6; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.6)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-4.6)"
|
|
NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments no-developer-4.6)"
|
|
fi
|
|
|
|
# gcc >= 4.7
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 7; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.7)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-4.7)"
|
|
NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments no-developer-4.7)"
|
|
fi
|
|
|
|
# gcc >= 4.8
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 8; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.8)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-4.8)"
|
|
NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments no-developer-4.8)"
|
|
fi
|
|
|
|
# gcc >= 4.9
|
|
if test $cc_vers_major -ge 5 -o $cc_vers_major -eq 4 -a $cc_vers_minor -ge 9; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 4.9)"
|
|
fi
|
|
|
|
# gcc >= 5
|
|
if test $cc_vers_major -ge 5; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 5)"
|
|
H5_ECFLAGS="$H5_ECFLAGS $(load_gcc_arguments error-5)"
|
|
fi
|
|
|
|
# gcc >= 6
|
|
if test $cc_vers_major -ge 6; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 6)"
|
|
fi
|
|
|
|
# gcc >= 7
|
|
if test $cc_vers_major -ge 7; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 7)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-7)"
|
|
fi
|
|
|
|
# gcc 8
|
|
if test $cc_vers_major -ge 8; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 8)"
|
|
H5_ECFLAGS="$H5_ECFLAGS $(load_gcc_arguments error-8)"
|
|
DEVELOPER_WARNING_CFLAGS="$DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments developer-8)"
|
|
NO_DEVELOPER_WARNING_CFLAGS="$NO_DEVELOPER_WARNING_CFLAGS $(load_gcc_arguments no-developer-8)"
|
|
fi
|
|
|
|
# gcc 9
|
|
if test $cc_vers_major -ge 9; then
|
|
H5_CFLAGS="$H5_CFLAGS $(load_gcc_arguments 9)"
|
|
fi
|
|
|
|
#################
|
|
# Flags are set #
|
|
#################
|
|
cc_flags_set=yes
|
|
fi
|
|
|
|
# Clear cc info if no flags set
|
|
if test "X$cc_flags_set" = "X"; then
|
|
cc_vendor=
|
|
cc_version=
|
|
fi
|