From 096b0eaed22f07282090146283e6c7f6d8d977d9 Mon Sep 17 00:00:00 2001 From: Nirbheek Chauhan Date: Fri, 26 May 2023 02:20:56 +0530 Subject: [PATCH] meson: Fixes for MSVC build winsock2.h must be included before windows.h or alternative definitions of `struct sockaddr` are defined. ``` FAILED: webrtc/rtc_base/liblibbase.a.p/logging.cc.obj "cl" "-Iwebrtc\rtc_base\liblibbase.a.p" "-Iwebrtc\rtc_base" "-I..\webrtc\rtc_base" "-Iwebrtc" "-I..\webrtc" "-Isubprojects\abseil-cpp-20230125.1" "-I..\subprojects\abseil-cpp-20230125.1" "/MD" "/nologo" "/showIncludes" "/utf-8" "/Zc:__cplusplus" "/W2" "/EHsc" "/std:c++17" "/permissive-" "/O2" "/Zi" "-DWEBRTC_LIBRARY_ IMPL" "-DWEBRTC_ENABLE_SYMBOL_EXPORT" "-DNDEBUG" "-DWEBRTC_WIN" "-D_WIN32" "-U__STRICT_ANSI__" "-D__STDC_FORMAT_MACROS=1" "-DNOMINMAX" "-DWEBRTC_ENABLE_AVX2" "/Fdwebrtc\rtc_base\liblibbase.a.p\logging.cc.pdb" /Fowebrtc/rtc_base/liblibbase.a.p/logging.cc.obj "/c" ../webrtc/rtc_base/logging.cc C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(103): warning C4005: 'AF_IPX': macro redefinition C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um\winsock.h(457): note: see previous definition of 'AF_IPX' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(147): warning C4005: 'AF_MAX': macro redefinition C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um\winsock.h(476): note: see previous definition of 'AF_MAX' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(187): warning C4005: 'SO_DONTLINGER': macro redefinition C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um\winsock.h(399): note: see previous definition of 'SO_DONTLINGER' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(240): error C2011: 'sockaddr': 'struct' type redefinition C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\um\winsock.h(482): note: see declaration of 'sockaddr' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(442): error C2143: syntax error: missing '}' before 'constant' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(442): error C2059: syntax error: 'constant' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(496): error C2143: syntax error: missing ';' before '}' C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(496): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C:\Program Files (x86)\Windows Kits\10\include\10.0.22000.0\shared\ws2def.h(496): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ... ``` --- meson.build | 4 ++++ webrtc/rtc_base/logging.cc | 1 + 2 files changed, 5 insertions(+) diff --git a/meson.build b/meson.build index e668e95..9529a1b 100644 --- a/meson.build +++ b/meson.build @@ -83,6 +83,10 @@ elif host_system == 'windows' platform_cflags += ['-DWEBRTC_WIN', '-D_WIN32', '-U__STRICT_ANSI__'] # this one is for MinGW to get format specifiers from inttypes.h in C++ platform_cflags += ['-D__STDC_FORMAT_MACROS=1'] + # Avoid min/max from windows.h which breaks std::min/max + platform_cflags += ['-DNOMINMAX'] + # Ensure M_PI etc are defined + platform_cflags += ['-D_USE_MATH_DEFINES'] os_deps += [cc.find_library('winmm')] have_win = true endif diff --git a/webrtc/rtc_base/logging.cc b/webrtc/rtc_base/logging.cc index 13a5f02..fbc6242 100644 --- a/webrtc/rtc_base/logging.cc +++ b/webrtc/rtc_base/logging.cc @@ -15,6 +15,7 @@ #if RTC_LOG_ENABLED() #if defined(WEBRTC_WIN) +#include #include #if _MSC_VER < 1900 #define snprintf _snprintf