diff --git a/mingw-w64-aws-sdk-cpp/BuildAwsCCommon.patch b/mingw-w64-aws-sdk-cpp/BuildAwsCCommon.patch new file mode 100644 index 0000000000000..ae227070f7cfc --- /dev/null +++ b/mingw-w64-aws-sdk-cpp/BuildAwsCCommon.patch @@ -0,0 +1,188 @@ +diff --git a/cmake/AwsCFlags.cmake b/cmake/AwsCFlags.cmake +index 42d146e82..cb9d7f36b 100644 +--- a/cmake/AwsCFlags.cmake ++++ b/cmake/AwsCFlags.cmake +@@ -68,6 +68,10 @@ function(aws_set_common_properties target) + if (LEGACY_COMPILER_SUPPORT) + list(APPEND AWS_C_FLAGS -Wno-strict-aliasing) + endif() ++ ++ if(CMAKE_C_IMPLICIT_LINK_LIBRARIES MATCHES "mingw32") ++ list(APPEND AWS_C_FLAGS -D__USE_MINGW_ANSI_STDIO=1 -Wno-unused-local-typedefs) ++ endif() + endif() + + check_include_file(stdint.h HAS_STDINT) +diff --git a/include/aws/common/byte_order.inl b/include/aws/common/byte_order.inl +index 69ee56792..847e726af 100644 +--- a/include/aws/common/byte_order.inl ++++ b/include/aws/common/byte_order.inl +@@ -19,11 +19,11 @@ + #include + #include + +-#ifdef _MSC_VER ++#ifdef _WIN32 + # include + #else + # include +-#endif /* _MSC_VER */ ++#endif /* _WIN32 */ + + AWS_EXTERN_C_BEGIN + +@@ -49,7 +49,7 @@ AWS_STATIC_IMPL uint64_t aws_hton64(uint64_t x) { + uint64_t v; + __asm__("bswap %q0" : "=r"(v) : "0"(x)); + return v; +-#elif defined(_MSC_VER) ++#elif defined(_WIN32) + return _byteswap_uint64(x); + #else + uint32_t low = (uint32_t)x; +@@ -69,7 +69,7 @@ AWS_STATIC_IMPL uint64_t aws_ntoh64(uint64_t x) { + * Convert 32 bit integer from host to network byte order. + */ + AWS_STATIC_IMPL uint32_t aws_hton32(uint32_t x) { +-#ifdef _MSC_VER ++#ifdef _WIN32 + return aws_is_big_endian() ? x : _byteswap_ulong(x); + #else + return htonl(x); +@@ -126,7 +126,7 @@ AWS_STATIC_IMPL double aws_htonf64(double x) { + * Convert 32 bit integer from network to host byte order. + */ + AWS_STATIC_IMPL uint32_t aws_ntoh32(uint32_t x) { +-#ifdef _MSC_VER ++#ifdef _WIN32 + return aws_is_big_endian() ? x : _byteswap_ulong(x); + #else + return ntohl(x); +@@ -151,7 +151,7 @@ AWS_STATIC_IMPL double aws_ntohf64(double x) { + * Convert 16 bit integer from host to network byte order. + */ + AWS_STATIC_IMPL uint16_t aws_hton16(uint16_t x) { +-#ifdef _MSC_VER ++#ifdef _WIN32 + return aws_is_big_endian() ? x : _byteswap_ushort(x); + #else + return htons(x); +@@ -162,7 +162,7 @@ AWS_STATIC_IMPL uint16_t aws_hton16(uint16_t x) { + * Convert 16 bit integer from network to host byte order. + */ + AWS_STATIC_IMPL uint16_t aws_ntoh16(uint16_t x) { +-#ifdef _MSC_VER ++#ifdef _WIN32 + return aws_is_big_endian() ? x : _byteswap_ushort(x); + #else + return ntohs(x); +diff --git a/include/aws/common/logging.h b/include/aws/common/logging.h +index 8ef813c75..bfef7cfad 100644 +--- a/include/aws/common/logging.h ++++ b/include/aws/common/logging.h +@@ -111,7 +111,9 @@ struct aws_logger_vtable { + aws_log_subject_t subject, + const char *format, + ...) +-#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) ++#if defined(__MINGW32__) ++ __attribute__((format(gnu_printf, 4, 5))) ++#elif defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + __attribute__((format(printf, 4, 5))) + #endif /* non-ms compilers: TODO - find out what versions format support was added in */ + ; +diff --git a/include/aws/testing/aws_test_harness.h b/include/aws/testing/aws_test_harness.h +index 88ef03e21..d598e2f97 100644 +--- a/include/aws/testing/aws_test_harness.h ++++ b/include/aws/testing/aws_test_harness.h +@@ -365,6 +365,9 @@ struct aws_test_harness { + }; + + #if defined(_WIN32) ++# ifdef __MINGW32__ ++# include ++# endif + # include + static LONG WINAPI s_test_print_stack_trace(struct _EXCEPTION_POINTERS *exception_pointers) { + # if !defined(AWS_HEADER_CHECKER) +diff --git a/source/windows/environment.c b/source/windows/environment.c +index 8c042ddc5..ae50d0a59 100644 +--- a/source/windows/environment.c ++++ b/source/windows/environment.c +@@ -23,12 +23,16 @@ int aws_get_environment_value( + const struct aws_string *variable_name, + struct aws_string **value_out) { + +-#pragma warning(push) +-#pragma warning(disable : 4996) ++#ifdef _MSC_VER ++# pragma warning(push) ++# pragma warning(disable : 4996) ++#endif + + const char *value = getenv(aws_string_c_str(variable_name)); + +-#pragma warning(pop) ++#ifdef _MSC_VER ++# pragma warning(pop) ++#endif + + if (value == NULL) { + *value_out = NULL; +diff --git a/source/windows/system_info.c b/source/windows/system_info.c +index acbfd97ce..927a81b4a 100644 +--- a/source/windows/system_info.c ++++ b/source/windows/system_info.c +@@ -40,7 +40,9 @@ void aws_debug_break(void) { + } + + /* If I meet the engineer that wrote the dbghelp.h file for the windows 8.1 SDK we're gonna have words! */ +-#pragma warning(disable : 4091) ++#ifdef _MSC_VER ++# pragma warning(disable : 4091) ++#endif + #include + + struct win_symbol_data { +@@ -124,7 +126,7 @@ static void s_init_dbghelp_impl(void *user_data) { + return; + } + +-static bool s_init_dbghelp() { ++static bool s_init_dbghelp(void) { + if (AWS_LIKELY(s_SymInitialize)) { + return true; + } +@@ -188,7 +190,7 @@ char **aws_backtrace_symbols(void *const *stack, size_t num_frames) { + /* no luck, record the address and last error */ + DWORD last_error = GetLastError(); + int len = snprintf( +- sym_buf, AWS_ARRAY_SIZE(sym_buf), "at 0x%p: Failed to lookup symbol: error %u", stack[i], last_error); ++ sym_buf, AWS_ARRAY_SIZE(sym_buf), "at 0x%p: Failed to lookup symbol: error %lu", stack[i], last_error); + if (len > 0) { + struct aws_byte_cursor sym_cur = aws_byte_cursor_from_array(sym_buf, len); + aws_byte_buf_append_dynamic(&symbols, &sym_cur); +@@ -209,7 +211,7 @@ char **aws_backtrace_addr2line(void *const *frames, size_t stack_depth) { + void aws_backtrace_print(FILE *fp, void *call_site_data) { + struct _EXCEPTION_POINTERS *exception_pointers = call_site_data; + if (exception_pointers) { +- fprintf(fp, "** Exception 0x%x occured **\n", exception_pointers->ExceptionRecord->ExceptionCode); ++ fprintf(fp, "** Exception 0x%lx occured **\n", exception_pointers->ExceptionRecord->ExceptionCode); + } + + if (!s_init_dbghelp()) { +diff --git a/tests/atomics_test.c b/tests/atomics_test.c +index 36dbbd1a5..90f0497e2 100644 +--- a/tests/atomics_test.c ++++ b/tests/atomics_test.c +@@ -23,7 +23,9 @@ + + #ifdef _WIN32 + # include +-# define alloca _alloca ++# ifdef _MSC_VER ++# define alloca _alloca ++# endif + #elif defined(__FreeBSD__) || defined(__NetBSD__) + # include + #else diff --git a/mingw-w64-aws-sdk-cpp/BuildAwsChecksums.patch b/mingw-w64-aws-sdk-cpp/BuildAwsChecksums.patch new file mode 100644 index 0000000000000..828a63e7d5e65 --- /dev/null +++ b/mingw-w64-aws-sdk-cpp/BuildAwsChecksums.patch @@ -0,0 +1,11 @@ +diff -aurp AwsChecksums/source/intel/cpuid.c AwsChecksums-orig/source/intel/cpuid.c +--- AwsChecksums/source/intel/cpuid.c 2020-08-08 21:25:59.314437100 +0000 ++++ AwsChecksums-orig/source/intel/cpuid.c 2020-08-08 21:25:44.210636300 +0000 +@@ -40,4 +40,9 @@ int aws_checksums_do_cpu_id(int32_t *cpu + ++#else ++int aws_checksums_do_cpu_id(int32_t *cpuid) { ++ (void)cpuid; ++ return 0; ++} + #endif /* defined(__x86_64__) && !(defined(__GNUC__) && defined(DEBUG_BUILD)) */ diff --git a/mingw-w64-aws-sdk-cpp/PKGBUILD b/mingw-w64-aws-sdk-cpp/PKGBUILD new file mode 100644 index 0000000000000..08f128868d33a --- /dev/null +++ b/mingw-w64-aws-sdk-cpp/PKGBUILD @@ -0,0 +1,52 @@ +# Maintainer: Jeroen Ooms + +_realname=aws-sdk-cpp +pkgbase=mingw-w64-${_realname} +pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") +pkgver=1.7.365 +pkgrel=1 +pkgdesc="AWS SDK for C++ (mingw-w64)" +arch=('any') +url="https://github.com/aws/aws-sdk-cpp" +license=('Apache-2.0') +makedepends=("${MINGW_PACKAGE_PREFIX}-cmake" + "${MINGW_PACKAGE_PREFIX}-ninja") +options=('strip' 'staticlibs') +source=("${_realname}-${pkgver}.tar.gz::https://github.com/aws/aws-sdk-cpp/archive/${pkgver}.tar.gz" + "aws-sdk-cpp-pr-1333.patch" + "Patch-cmake-submodules.patch" + "BuildAwsCCommon.patch" + "BuildAwsChecksums.patch") +sha256sums=('95e3f40efaea7b232741bfb76c54c9507c02631edfc198720b0e84be0ebb5e9d' + '14abbdb71e615d93d5aa1e83f94f994b7fbe05edc63477e37325a6f5148c7278' + 'edb6ef4ac7d3e48dfc1fa4b0b02a6a191bb405ae69c19d9f7bcf3856269bc6fb' + '957eb1cc68b151622b7667e6a13506c96fdef8f566a227ac1608c9e02d3826d3' + '20359b6e79430d1deb69bb05214a2f18258cb54ca56e15cd24605ad0c0094df1') + +prepare() { + cd "${_realname}-${pkgver}" + patch -p1 -i "${srcdir}/aws-sdk-cpp-pr-1333.patch" + patch -p1 -i "${srcdir}/Patch-cmake-submodules.patch" +} + +build() { + [[ -d "${srcdir}"/build-${CARCH}-static ]] && rm -rf "${srcdir}"/build-${CARCH}-static + mkdir -p "${srcdir}"/build-${CARCH}-static && cd "${srcdir}"/build-${CARCH}-static + MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \ + ${MINGW_PREFIX}/bin/cmake \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX="${MINGW_PREFIX}" \ + -DBUILD_ONLY="config;s3;transfer" \ + -DENABLE_UNITY_BUILD=ON \ + -DAUTORUN_UNIT_TESTS=OFF \ + ../${_realname}-${pkgver} + + ${MINGW_PREFIX}/bin/cmake --build . +} + +package() { + cd "${srcdir}"/build-${CARCH}-static + DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake --build . --target install +} diff --git a/mingw-w64-aws-sdk-cpp/Patch-cmake-submodules.patch b/mingw-w64-aws-sdk-cpp/Patch-cmake-submodules.patch new file mode 100644 index 0000000000000..2cf2b3f568dd5 --- /dev/null +++ b/mingw-w64-aws-sdk-cpp/Patch-cmake-submodules.patch @@ -0,0 +1,23 @@ +diff -aurp aws-sdk-cpp-1.7.288-orig/third-party/cmake/BuildAwsCCommon.cmake aws-sdk-cpp-1.7.288/third-party/cmake/BuildAwsCCommon.cmake +--- aws-sdk-cpp-1.7.288-orig/third-party/cmake/BuildAwsCCommon.cmake 2020-08-08 14:05:06.174688800 +0000 ++++ aws-sdk-cpp-1.7.288/third-party/cmake/BuildAwsCCommon.cmake 2020-08-08 14:03:44.967180800 +0000 +@@ -42,6 +42,7 @@ else() + GIT_TAG ${AWS_C_COMMON_TAG} + BUILD_IN_SOURCE 0 + UPDATE_COMMAND "" ++ PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/../../../BuildAwsCCommon.patch + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + +diff -aurp aws-sdk-cpp-1.7.288-orig/third-party/cmake/BuildAwsChecksums.cmake aws-sdk-cpp-1.7.288/third-party/cmake/BuildAwsChecksums.cmake +--- aws-sdk-cpp-1.7.288-orig/third-party/cmake/BuildAwsChecksums.cmake 2020-08-08 14:05:06.174688800 +0000 ++++ aws-sdk-cpp-1.7.288/third-party/cmake/BuildAwsChecksums.cmake 2020-08-08 14:03:44.967180800 +0000 +@@ -42,6 +42,7 @@ else() + GIT_TAG ${AWS_CHECKSUMS_TAG} + BUILD_IN_SOURCE 0 + UPDATE_COMMAND "" ++ PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/../../../BuildAwsChecksums.patch + CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} diff --git a/mingw-w64-aws-sdk-cpp/aws-sdk-cpp-pr-1333.patch b/mingw-w64-aws-sdk-cpp/aws-sdk-cpp-pr-1333.patch new file mode 100644 index 0000000000000..847ab4e6f481e --- /dev/null +++ b/mingw-w64-aws-sdk-cpp/aws-sdk-cpp-pr-1333.patch @@ -0,0 +1,291 @@ +From f9b4499ccb63ef02d8c9de462fbbcf301eb1907a Mon Sep 17 00:00:00 2001 +From: Daniel Schulte +Date: Tue, 3 Mar 2020 11:09:15 +0100 +Subject: [PATCH] Add support for building with MinGW + +--- + aws-cpp-sdk-core/include/aws/core/utils/Array.h | 8 ++++---- + .../include/aws/core/utils/crypto/bcrypt/CryptoImpl.h | 7 +++++++ + .../include/aws/core/utils/event/EventHeader.h | 10 ++++++++++ + .../source/http/windows/WinHttpSyncHttpClient.cpp | 4 ++-- + .../source/http/windows/WinINetSyncHttpClient.cpp | 2 +- + .../source/http/windows/WinSyncHttpClient.cpp | 2 +- + .../source/platform/windows/Environment.cpp | 5 +++++ + .../source/platform/windows/FileSystem.cpp | 7 ++++++- + .../source/platform/windows/OSVersionInfo.cpp | 2 ++ + .../source/utils/crypto/factory/Factories.cpp | 4 ++-- + .../BucketAndObjectOperationTest.cpp | 4 ++-- + cmake/compiler_settings.cmake | 6 ++++++ + .../source/platform/windows/PlatformTesting.cpp | 2 ++ + 13 files changed, 50 insertions(+), 13 deletions(-) + +diff --git a/aws-cpp-sdk-core/include/aws/core/utils/Array.h b/aws-cpp-sdk-core/include/aws/core/utils/Array.h +index 1dbb9020f4..6768b6b850 100644 +--- a/aws-cpp-sdk-core/include/aws/core/utils/Array.h ++++ b/aws-cpp-sdk-core/include/aws/core/utils/Array.h +@@ -64,7 +64,7 @@ namespace Aws + { + m_data.reset(Aws::NewArray(m_size, ARRAY_ALLOCATION_TAG)); + +-#ifdef _WIN32 ++#ifdef _MSC_VER + std::copy(arrayToCopy, arrayToCopy + arraySize, stdext::checked_array_iterator< T * >(m_data.get(), m_size)); + #else + std::copy(arrayToCopy, arrayToCopy + arraySize, m_data.get()); +@@ -92,7 +92,7 @@ namespace Aws + if(arr->m_size > 0 && arr->m_data) + { + size_t arraySize = arr->m_size; +-#ifdef _WIN32 ++#ifdef _MSC_VER + std::copy(arr->m_data.get(), arr->m_data.get() + arraySize, stdext::checked_array_iterator< T * >(m_data.get() + location, m_size)); + #else + std::copy(arr->m_data.get(), arr->m_data.get() + arraySize, m_data.get() + location); +@@ -111,7 +111,7 @@ namespace Aws + { + m_data.reset(Aws::NewArray(m_size, ARRAY_ALLOCATION_TAG)); + +-#ifdef _WIN32 ++#ifdef _MSC_VER + std::copy(other.m_data.get(), other.m_data.get() + other.m_size, stdext::checked_array_iterator< T * >(m_data.get(), m_size)); + #else + std::copy(other.m_data.get(), other.m_data.get() + other.m_size, m_data.get()); +@@ -144,7 +144,7 @@ namespace Aws + { + m_data.reset(Aws::NewArray(m_size, ARRAY_ALLOCATION_TAG)); + +-#ifdef _WIN32 ++#ifdef _MSC_VER + std::copy(other.m_data.get(), other.m_data.get() + other.m_size, stdext::checked_array_iterator< T * >(m_data.get(), m_size)); + #else + std::copy(other.m_data.get(), other.m_data.get() + other.m_size, m_data.get()); +diff --git a/aws-cpp-sdk-core/include/aws/core/utils/crypto/bcrypt/CryptoImpl.h b/aws-cpp-sdk-core/include/aws/core/utils/crypto/bcrypt/CryptoImpl.h +index 992efab47c..406380033a 100644 +--- a/aws-cpp-sdk-core/include/aws/core/utils/crypto/bcrypt/CryptoImpl.h ++++ b/aws-cpp-sdk-core/include/aws/core/utils/crypto/bcrypt/CryptoImpl.h +@@ -39,7 +39,14 @@ namespace Aws + { + namespace Crypto + { ++ #ifdef __MINGW32__ ++ #pragma GCC diagnostic push ++ #pragma GCC diagnostic ignored "-Wunused-variable" ++ #endif + static const char* SecureRandom_BCrypt_Tag = "SecureRandom_BCrypt"; ++ #ifdef __MINGW32__ ++ #pragma GCC diagnostic pop ++ #endif + + class SecureRandomBytes_BCrypt : public SecureRandomBytes + { +diff --git a/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h b/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h +index 2041b208da..6fb333bff7 100644 +--- a/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h ++++ b/aws-cpp-sdk-core/include/aws/core/utils/event/EventHeader.h +@@ -24,6 +24,12 @@ + #include + #include + ++#ifdef __MINGW32__ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" ++#pragma GCC diagnostic ignored "-Wuninitialized" ++#endif ++ + namespace Aws + { + namespace Utils +@@ -319,3 +325,7 @@ namespace Aws + } + } + } ++ ++#ifdef __MINGW32__ ++#pragma GCC diagnostic pop ++#endif +diff --git a/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp b/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp +index 4a0f80a161..a98635f706 100644 +--- a/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp ++++ b/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp +@@ -267,7 +267,7 @@ bool WinHttpSyncHttpClient::DoQueryHeaders(void* hHttpRequest, std::shared_ptr(dwSize / sizeof(wchar_t))); + + WinHttpQueryHeaders(hHttpRequest, WINHTTP_QUERY_CONTENT_TYPE, nullptr, &contentTypeStr, &dwSize, 0); +- if (contentTypeStr[0] != NULL) ++ if (contentTypeStr[0]) + { + Aws::String contentStr = StringUtils::FromWString(contentTypeStr); + response->SetContentType(contentStr); +@@ -298,7 +298,7 @@ bool WinHttpSyncHttpClient::DoQueryHeaders(void* hHttpRequest, std::shared_ptrSetContentType(contentTypeStr); + AWS_LOGSTREAM_DEBUG(GetLogTag(), "Received content type " << contentTypeStr); +diff --git a/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp b/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp +index 3758006a53..2b4ce940b7 100644 +--- a/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp ++++ b/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp +@@ -322,7 +322,7 @@ void WinSyncHttpClient::MakeRequestInternal(HttpRequest& request, + } + } + +- if (!success && !IsRequestProcessingEnabled() || !ContinueRequest(request)) ++ if (!success && (!IsRequestProcessingEnabled() || !ContinueRequest(request))) + { + response->SetClientErrorType(CoreErrors::USER_CANCELLED); + response->SetClientErrorMessage("Request processing disabled or continuation cancelled by user's continuation handler."); +diff --git a/aws-cpp-sdk-core/source/platform/windows/Environment.cpp b/aws-cpp-sdk-core/source/platform/windows/Environment.cpp +index fd8d58f291..097274a56b 100644 +--- a/aws-cpp-sdk-core/source/platform/windows/Environment.cpp ++++ b/aws-cpp-sdk-core/source/platform/windows/Environment.cpp +@@ -29,6 +29,7 @@ that would need to be manually freed in all the client functions, just copy it i + */ + Aws::String GetEnv(const char *variableName) + { ++#ifdef _MSC_VER + char* variableValue = nullptr; + std::size_t valueSize = 0; + auto queryResult = _dupenv_s(&variableValue, &valueSize, variableName); +@@ -41,6 +42,10 @@ Aws::String GetEnv(const char *variableName) + } + + return result; ++#else // __MINGW32__ ++ auto variableValue = std::getenv(variableName); ++ return Aws::String( variableValue ? variableValue : "" ); ++#endif + } + + } // namespace Environment +diff --git a/aws-cpp-sdk-core/source/platform/windows/FileSystem.cpp b/aws-cpp-sdk-core/source/platform/windows/FileSystem.cpp +index 49af3c1f79..f427fa9233 100644 +--- a/aws-cpp-sdk-core/source/platform/windows/FileSystem.cpp ++++ b/aws-cpp-sdk-core/source/platform/windows/FileSystem.cpp +@@ -21,7 +21,9 @@ + #include + #include + +-#pragma warning( disable : 4996) ++#ifdef _MSC_VER ++# pragma warning( disable : 4996) ++#endif + + using namespace Aws::Utils; + namespace Aws +@@ -314,6 +316,9 @@ Aws::String CreateTempFilePath() + { + #ifdef _MSC_VER + #pragma warning(disable: 4996) // _CRT_SECURE_NO_WARNINGS ++#elif !defined(L_tmpnam_s) ++ // Definition from the MSVC stdio.h ++ #define L_tmpnam_s (sizeof("\\") + 16) + #endif + char s_tempName[L_tmpnam_s+1]; + +diff --git a/aws-cpp-sdk-core/source/platform/windows/OSVersionInfo.cpp b/aws-cpp-sdk-core/source/platform/windows/OSVersionInfo.cpp +index 23f395f6bb..18bd5836da 100644 +--- a/aws-cpp-sdk-core/source/platform/windows/OSVersionInfo.cpp ++++ b/aws-cpp-sdk-core/source/platform/windows/OSVersionInfo.cpp +@@ -19,7 +19,9 @@ + + #include + ++#ifdef _MSC_VER + #pragma warning(disable: 4996) ++#endif + #include + #include + namespace Aws +diff --git a/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp b/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp +index d7cb481d5c..3b34d7fc62 100644 +--- a/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp ++++ b/aws-cpp-sdk-core/source/utils/crypto/factory/Factories.cpp +@@ -755,7 +755,7 @@ std::shared_ptr Aws::Utils::Crypto::CreateSha256HMACIm + return s_Sha256HMACFactory->CreateImplementation(); + } + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning( push ) + #pragma warning( disable : 4702 ) + #endif +@@ -840,7 +840,7 @@ std::shared_ptr Aws::Utils::Crypto::CreateAES_KeyWrapImplementa + return s_AES_KeyWrapFactory->CreateImplementation(key); + } + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(pop) + #endif + +diff --git a/aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp b/aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp +index 0f31fcd061..586303e044 100644 +--- a/aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp ++++ b/aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp +@@ -54,9 +54,9 @@ + #include + #include + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(disable: 4127) +-#endif //_WIN32 ++#endif //_MSC_VER + + #include + +diff --git a/cmake/compiler_settings.cmake b/cmake/compiler_settings.cmake +index db054b2c1b..e1d6dce55e 100644 +--- a/cmake/compiler_settings.cmake ++++ b/cmake/compiler_settings.cmake +@@ -11,6 +11,9 @@ else() + set(COMPILER_CLANG 1) + else() + set(COMPILER_GCC 1) ++ if(MINGW) ++ set(COMPILER_MINGW 1) ++ endif() + endif() + set(USE_GCC_FLAGS 1) + endif() +@@ -34,6 +37,9 @@ endfunction() + + macro(set_gcc_flags) + list(APPEND AWS_COMPILER_FLAGS "-fno-exceptions" "-std=c++${CPP_STANDARD}") ++ if(COMPILER_IS_MINGW) ++ list(APPEND AWS_COMPILER_FLAGS -D__USE_MINGW_ANSI_STDIO=1) ++ endif() + + if(NOT BUILD_SHARED_LIBS) + list(APPEND AWS_COMPILER_FLAGS "-fPIC") +diff --git a/testing-resources/source/platform/windows/PlatformTesting.cpp b/testing-resources/source/platform/windows/PlatformTesting.cpp +index 2b0a04c0b4..2a27710557 100644 +--- a/testing-resources/source/platform/windows/PlatformTesting.cpp ++++ b/testing-resources/source/platform/windows/PlatformTesting.cpp +@@ -15,7 +15,9 @@ + + #include + ++#ifdef _MSC_VER + #pragma warning(disable: 4996) ++#endif + #include + #include +