hdf5/config/gnu-flags
David Young e916acd018 Merge pull request #2402 in HDFFV/hdf5 from ~DYOUNG/werror:break-out-warnings to develop
* 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.
2020-03-23 11:55:07 -05:00

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