diff --git a/CMakeLists.txt b/CMakeLists.txt index 957e7a08..bcca386f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,11 @@ SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW) cmake_minimum_required(VERSION 3.9.4) +# Call project() early so the compiler is identified (MSVC, CMAKE_CXX_COMPILER_ID, ...) +# before the MSVC runtime flag setup below, and so that flags set there are also +# inherited by the mdns_cpp subdirectory +project(MvrGdtf LANGUAGES C CXX) + # pre setup for some vars set(UNITTEST FALSE CACHE BOOL "If enabled the tests wont be build!") set(WIN_RUNTIME_LIB "-MD" CACHE STRING "Set '-MD' or '-MT' for windows build") @@ -38,11 +43,13 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) ################################################# # System setup if (WIN32) +if (MSVC) message("MSVC Runtime lib: " ${WIN_RUNTIME_LIB}) set(CMAKE_CXX_FLAGS_DEBUG ${WIN_RUNTIME_LIB}d) set(CMAKE_CXX_FLAGS_RELEASE ${WIN_RUNTIME_LIB}) set(CMAKE_CXX_FLAGS_MINSIZEREL ${WIN_RUNTIME_LIB}) SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO ${WIN_RUNTIME_LIB}) +endif(MSVC) elseif(APPLE) if($ENV{OSX_VERSION}) message("Setting osx version: " $ENV{OSX_VERSION}) @@ -141,6 +148,11 @@ if (WIN32) set(EXTRA_LIBS ${EXTRA_LIBS} rpcrt4) set(EXTRA_LIBS ${EXTRA_LIBS} shlwapi) + if (NOT MSVC) + # boost::asio uses AcceptEx/GetAcceptExSockaddrs; MSVC auto-links mswsock via + # #pragma comment(lib) in the asio headers, mingw does not + set(EXTRA_LIBS ${EXTRA_LIBS} mswsock) + endif() set_target_properties( MvrGdtf PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/libs/ ) set_target_properties( MvrGdtf PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/libs/ ) @@ -201,6 +213,10 @@ target_link_libraries(MvrGdtfUnitTest ${EXTRA_LIBS}) #Append Runtime if (WIN32) get_target_property(OUTPUT_NAME_OLD MvrGdtfUnitTest OUTPUT_NAME) + if(NOT OUTPUT_NAME_OLD) + # OUTPUT_NAME is not set yet, so get_target_property returns NOTFOUND + set(OUTPUT_NAME_OLD MvrGdtfUnitTest) + endif() set(OUTPUT_NAME_OLD "${OUTPUT_NAME_OLD}${WIN_RUNTIME_LIB}") set_target_properties(MvrGdtfUnitTest PROPERTIES OUTPUT_NAME ${OUTPUT_NAME_OLD}) endif(WIN32) diff --git a/mdns_cpp/src/mdns.cpp b/mdns_cpp/src/mdns.cpp index 2126d5fa..cf479728 100644 --- a/mdns_cpp/src/mdns.cpp +++ b/mdns_cpp/src/mdns.cpp @@ -34,7 +34,8 @@ int mDNS::openServiceSockets(int *sockets, int max_sockets) { if (num_sockets < max_sockets) { sockaddr_in sock_addr{}; sock_addr.sin_family = AF_INET; -#ifdef _WIN32 +#if defined(_WIN32) && defined(_MSC_VER) + // in4addr_any is only declared in the Windows SDK, not in mingw-w64 headers sock_addr.sin_addr = in4addr_any; #else sock_addr.sin_addr.s_addr = INADDR_ANY; diff --git a/src/MCFloat.h b/src/MCFloat.h index b9d506a7..f14032e4 100644 --- a/src/MCFloat.h +++ b/src/MCFloat.h @@ -222,6 +222,13 @@ enum { #define DOUBLE_SIZE 8 +#if defined(__MINGW32__) || defined(__MINGW64__) +// mingw-w64's math.h defines FP_SNAN/FP_QNAN as macros (MSVC does not), +// which would break the enumerator names below +#undef FP_SNAN +#undef FP_QNAN +#endif + enum { FP_SNAN = 3, /* signaling NaN */ FP_QNAN = 4, /* quiet NaN */