Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New package: mingw-w64-aws-sdk-cpp #6774

Merged
merged 8 commits into from
Aug 15, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
188 changes: 188 additions & 0 deletions mingw-w64-aws-sdk-cpp/BuildAwsCCommon.patch
Original file line number Diff line number Diff line change
@@ -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 <aws/common/byte_order.h>
#include <aws/common/common.h>

-#ifdef _MSC_VER
+#ifdef _WIN32
# include <stdlib.h>
#else
# include <netinet/in.h>
-#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 <winsock2.h>
+# endif
# include <windows.h>
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)
+#ifndef __MINGW32__
+# pragma warning(push)
+# pragma warning(disable : 4996)
+#endif

const char *value = getenv(aws_string_c_str(variable_name));

-#pragma warning(pop)
+#ifndef __MINGW32__
+# pragma warning(pop)
+#endif
jeroen marked this conversation as resolved.
Show resolved Hide resolved

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)
+#ifndef __MINGW32__
+# pragma warning(disable : 4091)
+#endif
#include <dbghelp.h>

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 <malloc.h>
-# define alloca _alloca
+# ifndef __MINGW32__
jeroen marked this conversation as resolved.
Show resolved Hide resolved
+# define alloca _alloca
+# endif
#elif defined(__FreeBSD__) || defined(__NetBSD__)
# include <stdlib.h>
#else
11 changes: 11 additions & 0 deletions mingw-w64-aws-sdk-cpp/BuildAwsChecksums.patch
Original file line number Diff line number Diff line change
@@ -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)) */
58 changes: 58 additions & 0 deletions mingw-w64-aws-sdk-cpp/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Maintainer: Andrew Sun <[email protected]>

_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"
"WinHttp-missing-flags.patch"
"Patch-cmake-submodules.patch"
"BuildAwsCCommon.patch"
"BuildAwsChecksums.patch")
sha256sums=('95e3f40efaea7b232741bfb76c54c9507c02631edfc198720b0e84be0ebb5e9d'
'SKIP'
jeroen marked this conversation as resolved.
Show resolved Hide resolved
'SKIP'
'SKIP'
'SKIP'
'SKIP')

prepare() {
cd "${_realname}-${pkgver}"
patch -p1 -i "${srcdir}/aws-sdk-cpp-pr-1333.patch"
patch -p1 -i "${srcdir}/WinHttp-missing-flags.patch"
patch -p1 -i "${srcdir}/Patch-cmake-submodules.patch"
}

build() {
export CFLAGS="-D_WIN32_WINNT=0x0600"
export CXXFLAGS="-D_WIN32_WINNT=0x0600"

[[ -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=;-DCMAKE_PREFIX_PATH=" \
jeroen marked this conversation as resolved.
Show resolved Hide resolved
${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
}
23 changes: 23 additions & 0 deletions mingw-w64-aws-sdk-cpp/Patch-cmake-submodules.patch
Original file line number Diff line number Diff line change
@@ -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}
20 changes: 20 additions & 0 deletions mingw-w64-aws-sdk-cpp/WinHttp-missing-flags.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
diff -aurp aws-sdk-cpp-1.7.365-orig/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp aws-sdk-cpp-1.7.365/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp
--- aws-sdk-cpp-1.7.365-orig/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp 2020-08-08 19:54:09.998144200 +0000
+++ aws-sdk-cpp-1.7.365/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp 2020-08-08 19:58:40.273220200 +0000
@@ -22,6 +22,16 @@
#include <sstream>
#include <iostream>

+#ifndef WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL
+#define WINHTTP_OPTION_WEB_SOCKET_KEEPALIVE_INTERVAL 116
+#endif
+#ifndef WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1
+#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1 0x00000200
+#endif
+#ifndef WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2
+#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2 0x00000800
+#endif
+
using namespace Aws::Client;
using namespace Aws::Http;
using namespace Aws::Http::Standard;
Loading