***********************************************************************
*                       COMPILER WARNINGS OPTIONS
***********************************************************************

                     Table of Contents

Section I:    Managing Warnings
Section II:   Default Warnings
Section III:  All Warnings
Section IV:   Group 0 Warnings
Section V:    Group 1 Warnings
Section VI:   Group 2 Warnings
Section VII:  Group 3 Warnings
Section VIII: Group 4 Warnings
Section IX:   Disable Warnings

************************************************************************


========================================================================
I. Managing Warnings
========================================================================
Compiler warnings are managed by setting the compiler flags variables.

Autotools uses the H5_CFLAGS and H5_CXXFLAGS, both variables set the flags nearly
  identical, along with H5_FCFLAGS for Fortran. Autotools uses the type
  and version of the compiler to determine which warning flags are used.
  However, there is an option, enable-developer-warnings, to enable extra
  flags for developers.

CMake uses the CMAKE_C_FLAGS and CMAKE_CXX_FLAGS, both sets are nearly
  identical, along with CMAKE_Fortran_FLAGS for Fortran. CMake has a
  minimum set of flags for GNU type compilers and for MSVC compilers. In
  addition, CMake breaks the list of flags into groups. The groups for
  GNU are roughly associated with the version of the compiler, while
  the MSVC groups are associated with the warning levels for the
  Microsoft compilers. The CMake option for enabling extra developer
  warnings is HDF5_ENABLE_DEV_WARNINGS.

Custom settings can be used by setting;
  Environment variables H5_CFLAGS and H5_CXXFLAGS for Autotools
  CMake defines CMAKE_C_FLAGS and CMAKE_CXX_FLAGS for CMake


========================================================================
II. Default Warnings
========================================================================

--------------------------------------------------
Autotools UNIX warnings added to H5_CFLAGS
--------------------------------------------------
    -std=c99

   the following warning switches should not raise warnings by the current code
    -pedantic
    -Wall
    -Wextra
    -Wbad-function-cast
    -Wc++-compat
    -Wcast-align
    -Wcast-qual
    -Wconversion
    -Wdisabled-optimization
    -Wfloat-equal
    -Wformat=2
    -Winit-self
    -Winvalid-pch
    -Wmissing-declarations
    -Wmissing-include-dirs
    -Wmissing-prototypes
    -Wnested-externs
    -Wold-style-definition
    -Wpacked
    -Wpointer-arith
    -Wredundant-decls
    -Wshadow
    -Wstrict-prototypes
    -Wswitch-default
    -Wswitch-enum
    -Wundef
    -Wunused-macros
    -Wunsafe-loop-optimizations
    -Wwrite-strings

   enable-developer-warnings=ON
        -Winline
        -Waggregate-return
        -Wmissing-format-attribute
        -Wmissing-noreturn
        -Wunsuffixed-float-constants (gcc 4.5+)
   enable-developer-warnings=OFF
        -Wno-inline
        -Wno-aggregate-return
        -Wno-missing-format-attribute
        -Wno-missing-noreturn
        -Wno-unsuffixed-float-constants (gcc 4.5+)

IF GCC <= 4.3
    -Wno-long-long
    -Wvolatile-register-var
    -Wstrict-overflow

IF GCC <= 4.4
    -Wno-long-long
    -Wvolatile-register-var
    -Wstrict-overflow
    -Wlogical-op
    -Wvla

IF GCC <= 4.5
    -Wno-long-long
    -Wvolatile-register-var
    -Wstrict-overflow
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat

IF GCC <= 4.6
    -Wno-long-long
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-aliasing
    -Wstrict-overflow=5
    -Wjump-misses-init

IF GCC <= 4.7
    -Wno-long-long
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-aliasing
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const

IF GCC <= 4.8
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
    -Wstack-usage=8192
    -Wvector-operation-performance
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
        -Wsuggest-attribute=pure
        -Wsuggest-attribute=noreturn
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const
        -Wno-suggest-attribute=pure
        -Wno-suggest-attribute=noreturn

IF GCC <= 4.9
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
    -Wstack-usage=8192
    -Wvector-operation-performance
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
        -Wsuggest-attribute=pure
        -Wsuggest-attribute=noreturn
        -Wsuggest-attribute=format
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const
        -Wno-suggest-attribute=pure
        -Wno-suggest-attribute=noreturn
        -Wno-suggest-attribute=format

IF GCC < 5
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
    -Wstack-usage=8192
    -Wvector-operation-performance
    -Wdate-time
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
        -Wsuggest-attribute=pure
        -Wsuggest-attribute=noreturn
        -Wsuggest-attribute=format
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const
        -Wno-suggest-attribute=pure
        -Wno-suggest-attribute=noreturn
        -Wno-suggest-attribute=format

IF GCC < 6
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
    -Wstack-usage=8192
    -Wvector-operation-performance
    -Wdate-time
    -Warray-bounds=2
    -Wc99-c11-compat
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
        -Wsuggest-attribute=pure
        -Wsuggest-attribute=noreturn
        -Wsuggest-attribute=format
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const
        -Wno-suggest-attribute=pure
        -Wno-suggest-attribute=noreturn
        -Wno-suggest-attribute=format

IF GCC < 7
    -Wlogical-op
    -Wvla
    -Wlarger-than=2048
    -Wsync-nand
    -Wframe-larger-than=16384
    -Wpacked-bitfield-compat
    -Wstrict-overflow=5
    -Wjump-misses-init
    -Wdouble-promotion
    -Wtrampolines
    -Wstack-usage=8192
    -Wvector-operation-performance
    -Wdate-time
    -Warray-bounds=2
    -Wc99-c11-compat
    -Wnull-dereference
    -Wunused-const-variable
    -Wduplicated-cond -Whsa
   enable-developer-warnings=ON:
        -Wsuggest-attribute=const
        -Wsuggest-attribute=pure
        -Wsuggest-attribute=noreturn
        -Wsuggest-attribute=format
   enable-developer-warnings=OFF:
        -Wno-suggest-attribute=const
        -Wno-suggest-attribute=pure
        -Wno-suggest-attribute=noreturn
        -Wno-suggest-attribute=format


--------------------------------------------
CMake warnings added to CMAKE_C_FLAGS
--------------------------------------------

IF GNU GCC
    -pedantic
    -Wall
    -Wextra
    -Wbad-function-cast
    -Wc++-compat
    -Wcast-align
    -Wcast-qual
    -Wconversion
    -Wdisabled-optimization
    -Wfloat-equal
    -Wformat=2
    -Winit-self
    -Winvalid-pch
    -Wmissing-declarations
    -Wmissing-include-dirs
    -Wmissing-prototypes
    -Wnested-externs
    -Wold-style-definition
    -Wpacked
    -Wpointer-arith
    -Wredundant-decls
    -Wshadow
    -Wstrict-prototypes
    -Wswitch-default
    -Wswitch-enum
    -Wundef
    -Wunused-macros
    -Wunsafe-loop-optimizations
    -Wwrite-strings

    -fmessage-length=0
   HDF5_ENABLE_DEV_WARNINGS=ON
        -Winline
        -Waggregate-return
        -Wunsuffixed-float-constants (gcc 4.5+)
   HDF5_ENABLE_DEV_WARNINGS=OFF
        -Wno-unused-parameter
        -Wno-inline
        -Wno-aggregate-return
        -Wno-unsuffixed-float-constants (gcc 4.5+)


========================================================================
III. All Warnings in CMake
========================================================================

Default: HDF5_ENABLE_DEV_WARNINGS:BOOL=OFF
    For Visual Studio:
        /W3

HDF5_ENABLE_ALL_WARNINGS:BOOL=ON
    For Visual Studio:
        /Wall
        /wd4668

    For GNU GCC
        Group 0 flags
        Group 1 flags
        Group 2 flags


========================================================================
IV. Group 0 Warnings in CMake
========================================================================

Default: HDF5_ENABLE_GROUPZERO_WARNINGS:BOOL=OFF

HDF5_ENABLE_GROUPZERO_WARNINGS:BOOL=ON
    For Visual Studio
        /W1

    For GNU GCC
        Default Warnings


========================================================================
V. Group 1 Warnings in CMake
========================================================================

Default: HDF5_ENABLE_GROUPONE_WARNINGS:BOOL=OFF

HDF5_ENABLE_GROUPONE_WARNINGS:BOOL=ON
    For Visual Studio
        /W2

    For GNU GCC
      IF GCC >= 4.3
        -Wlogical-op
        -Wvla
        -Wlarger-than=2048
      IF GCC >= 4.4
        -Wsync-nand
        -Wframe-larger-than=16384
        -Wpacked-bitfield-compat
      IF GCC >= 4.5
        -Wstrict-overflow=5
        -Wjump-misses-init


========================================================================
VI. Group 2 Warnings in CMake
========================================================================

Default: HDF5_ENABLE_GROUPTWO_WARNINGS:BOOL=OFF

HDF5_ENABLE_GROUPTWO_WARNINGS:BOOL=ON
    For Visual Studio
        /W3

    For GNU GCC
      IF GCC >= 4.6
        -Wdouble-promotion
        -Wtrampolines
       enable-developer-warnings=ON:
            -Wsuggest-attribute=const
       enable-developer-warnings=OFF:
            -Wno-suggest-attribute=const
      IF GCC >= 4.7
        -Wstack-usage=8192
        -Wvector-operation-performance
       enable-developer-warnings=ON:
            -Wsuggest-attribute=pure
            -Wsuggest-attribute=noreturn
       enable-developer-warnings=OFF:
            -Wno-suggest-attribute=pure
            -Wno-suggest-attribute=noreturn
      IF GCC >= 4.8
       enable-developer-warnings=ON:
            -Wsuggest-attribute=format
       enable-developer-warnings=OFF:
            -Wno-suggest-attribute=format
      IF GCC >= 4.8
        -Wdate-time


========================================================================
VII. Group 3 Warnings in CMake
========================================================================

Default: HDF5_ENABLE_GROUPTHREE_WARNINGS:BOOL=OFF

HDF5_ENABLE_GROUPTHREE_WARNINGS:BOOL=ON
    For Visual Studio
        /W4

    For GNU GCC
        IF GCC >= 5.1
            -Warray-bounds=2
            -Wc99-c11-compat


========================================================================
VIII. Group 4 Warnings in CMake
========================================================================

Default: HDF5_ENABLE_GROUPFOUR_WARNINGS:BOOL=OFF

HDF5_ENABLE_GROUPFOUR_WARNINGS:BOOL=ON
    For GNU GCC
        IF GCC >= 6.0
            -Wnull-dereference
            -Wunused-const-variable
            -Wduplicated-cond
            -Whsa


========================================================================
IX. Disable Warnings in CMake
========================================================================

Default: HDF5_DISABLE_COMPILER_WARNINGS:BOOL=OFF

HDF5_DISABLE_COMPILER_WARNINGS:BOOL=ON
    For Visual Studio
        HDF5_WARNINGS_BLOCKED:BOOL=ON
        /W0

    For GNU GCC
        -w


========================================================================
For further assistance, send email to help@hdfgroup.org
========================================================================

