Merge branch 'improve-msvc-force-include' into 'main'

MSVC builds: Improve build process (was: MSVC builds: Always enable items from msvc_recommended_pragmas.h)

See merge request GNOME/gtk!6114
This commit is contained in:
Matthias Clasen 2023-10-27 22:11:06 +00:00
commit de74d38039
2 changed files with 55 additions and 6 deletions

View File

@ -0,0 +1,41 @@
#ifndef _MSC_VER
#pragma error "This header is for Microsoft VC or clang-cl only."
#endif /* _MSC_VER */
/* Make MSVC more pedantic, this is a recommended pragma list
* from _Win32_Programming_ by Rector and Newcomer.
*/
#ifndef __clang__
#pragma warning(error:4002) /* too many actual parameters for macro */
#pragma warning(error:4003) /* not enough actual parameters for macro */
#pragma warning(1:4010) /* single-line comment contains line-continuation character */
#pragma warning(error:4013) /* 'function' undefined; assuming extern returning int */
#pragma warning(1:4016) /* no function return type; using int as default */
#pragma warning(error:4020) /* too many actual parameters */
#pragma warning(error:4021) /* too few actual parameters */
#pragma warning(error:4027) /* function declared without formal parameter list */
#pragma warning(error:4029) /* declared formal parameter list different from definition */
#pragma warning(error:4033) /* 'function' must return a value */
#pragma warning(error:4035) /* 'function' : no return value */
#pragma warning(error:4045) /* array bounds overflow */
#pragma warning(error:4047) /* different levels of indirection */
#pragma warning(error:4049) /* terminating line number emission */
#pragma warning(error:4053) /* An expression of type void was used as an operand */
#pragma warning(error:4071) /* no function prototype given */
#pragma warning(disable:4101) /* unreferenced local variable */
#pragma warning(error:4150)
/* G_NORETURN */
#pragma warning(error:4646) /* function declared with __declspec(noreturn) has non-void return type */
#pragma warning(error:4715) /* 'function': not all control paths return a value */
#pragma warning(error:4098) /* 'void' function returning a value */
#pragma warning(disable:4244) /* No possible loss of data warnings */
#pragma warning(disable:4305) /* No truncation from int to char warnings */
#pragma warning(error:4819) /* The file contains a character that cannot be represented in the current code page */
#endif /* __clang__ */
/* work around Microsoft's premature attempt to deprecate the C-Library */
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS

View File

@ -249,15 +249,23 @@ endif
# Compiler flags # Compiler flags
if cc.get_id() == 'msvc' if cc.get_id() == 'msvc'
# Compiler options taken from msvc_recommended_pragmas.h required_cflags = []
# in GLib, based on _Win32_Programming_ by Rector and Newcomer required_debug_cflags = '-Zc:preprocessor'
test_cflags = [ test_cflags = [
'-FImsvc_recommended_pragmas.h', '-FI@0@/build-aux/msvc/msvc_recommended_pragmas.h'.format(meson.project_source_root()),
'-D_USE_MATH_DEFINES', '-D_USE_MATH_DEFINES',
'-utf-8', required_debug_cflags
'-Zc:preprocessor'
] ]
add_project_arguments(cc.get_supported_arguments(test_cflags), language: 'c') msvc_supported_cflags = cc.get_supported_arguments(test_cflags)
if debug
required_cflags += required_debug_cflags
endif
foreach f : required_cflags
if not msvc_supported_cflags.contains(f)
error('@0@ required for this build'.format(f))
endif
endforeach
add_project_arguments(msvc_supported_cflags, language: 'c')
add_languages('cpp') add_languages('cpp')
cxx = meson.get_compiler('cpp') cxx = meson.get_compiler('cpp')