mirror of
https://github.com/libssh2/libssh2.git
synced 2025-10-29 00:54:50 +03:00
- in `win32/libssh2_config.h` replace `_CRT_SECURE_NO_DEPRECATE` with `_CRT_SECURE_NO_WARNINGS`, to use the official macro for this, like in CMake. Also, it's now safe to move it back under `_MSC_VER`. Suppressing: `warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.` `warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead.` - move `_CRT_NONSTDC_NO_DEPRECATE` to `example` and `tests`. Not needed for `src`. Suppressing: `warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _strdup.` `warning C4996: 'write': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _write.` - move `_WINSOCK_DEPRECATED_NO_WARNINGS` from source files to CMake files, in `example` and `tests`. Also limit this to MSVC. Suppressing: `warning C4996: 'inet_addr': Use inet_pton() or InetPton() instead` TODO: try fixing these instead of suppressing. Closes #929
61 lines
2.5 KiB
CMake
61 lines
2.5 KiB
CMake
include(CheckCCompilerFlag)
|
|
|
|
option(ENABLE_WERROR "Turn compiler warnings into errors" OFF)
|
|
option(PICKY_COMPILER "Enable picky compiler options" ON)
|
|
|
|
if(ENABLE_WERROR)
|
|
if(MSVC)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
|
|
else() # llvm/clang and gcc style options
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
# Use the highest warning level for visual studio.
|
|
if(PICKY_COMPILER)
|
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
|
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
|
endif()
|
|
if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
|
|
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
|
else()
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
|
|
endif()
|
|
endif()
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
if(NOT CMAKE_CXX_FLAGS MATCHES "-Wall")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
endif()
|
|
if(NOT CMAKE_C_FLAGS MATCHES "-Wall")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
|
endif()
|
|
|
|
if(PICKY_COMPILER)
|
|
foreach(_CCOPT -pedantic -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wfloat-equal -Wsign-compare -Wundef -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wvla -Wdouble-promotion -Wenum-conversion -Warith-conversion)
|
|
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
|
|
# test result in.
|
|
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
check_c_compiler_flag(${_CCOPT} ${_optvarname})
|
|
if(${_optvarname})
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
|
|
endif()
|
|
endforeach()
|
|
foreach(_CCOPT long-long multichar format-nonliteral sign-conversion system-headers pedantic-ms-format)
|
|
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
|
|
# so test for the positive form instead
|
|
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
check_c_compiler_flag("-W${_CCOPT}" ${_optvarname})
|
|
if(${_optvarname})
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-${_CCOPT}")
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
endif()
|