292 lines
12 KiB
Diff
292 lines
12 KiB
Diff
From f9b4499ccb63ef02d8c9de462fbbcf301eb1907a Mon Sep 17 00:00:00 2001
|
|
From: Daniel Schulte <daniel.schulte@picture-instruments.com>
|
|
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<T>(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<T>(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<T>(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 <aws/event-stream/event_stream.h>
|
|
#include <cassert>
|
|
|
|
+#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<H
|
|
wmemset(contentTypeStr, 0, static_cast<size_t>(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_ptr<H
|
|
|
|
bool WinHttpSyncHttpClient::DoSendRequest(void* hHttpRequest) const
|
|
{
|
|
- return (WinHttpSendRequest(hHttpRequest, NULL, NULL, 0, 0, 0, NULL) != 0);
|
|
+ return (WinHttpSendRequest(hHttpRequest, NULL, 0, 0, 0, 0, 0) != 0);
|
|
}
|
|
|
|
bool WinHttpSyncHttpClient::DoReadData(void* hHttpRequest, char* body, uint64_t size, uint64_t& read) const
|
|
diff --git a/aws-cpp-sdk-core/source/http/windows/WinINetSyncHttpClient.cpp b/aws-cpp-sdk-core/source/http/windows/WinINetSyncHttpClient.cpp
|
|
index 8b42c64dab..ef1fd99975 100644
|
|
--- a/aws-cpp-sdk-core/source/http/windows/WinINetSyncHttpClient.cpp
|
|
+++ b/aws-cpp-sdk-core/source/http/windows/WinINetSyncHttpClient.cpp
|
|
@@ -228,7 +228,7 @@ bool WinINetSyncHttpClient::DoQueryHeaders(void* hHttpRequest, std::shared_ptr<H
|
|
char contentTypeStr[1024];
|
|
dwSize = sizeof(contentTypeStr);
|
|
HttpQueryInfoA(hHttpRequest, HTTP_QUERY_CONTENT_TYPE, &contentTypeStr, &dwSize, 0);
|
|
- if (contentTypeStr[0] != NULL)
|
|
+ if (contentTypeStr[0])
|
|
{
|
|
response->SetContentType(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 <iostream>
|
|
#include <Userenv.h>
|
|
|
|
-#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 <iomanip>
|
|
|
|
+#ifdef _MSC_VER
|
|
#pragma warning(disable: 4996)
|
|
+#endif
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
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::HMAC> 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<SymmetricCipher> 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 <aws/testing/TestingEnvironment.h>
|
|
#include <fstream>
|
|
|
|
-#ifdef _WIN32
|
|
+#ifdef _MSC_VER
|
|
#pragma warning(disable: 4127)
|
|
-#endif //_WIN32
|
|
+#endif //_MSC_VER
|
|
|
|
#include <aws/core/http/standard/StandardHttpRequest.h>
|
|
|
|
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 <aws/testing/platform/PlatformTesting.h>
|
|
|
|
+#ifdef _MSC_VER
|
|
#pragma warning(disable: 4996)
|
|
+#endif
|
|
#include <windows.h>
|
|
#include <aws/core/utils/memory/stl/AWSStringStream.h>
|
|
|