diff --git a/mingw-w64-freerdp/0001-fix-warnings-mingw.patch b/mingw-w64-freerdp/0001-fix-warnings-mingw.patch new file mode 100644 index 0000000000..5f1fb9de11 --- /dev/null +++ b/mingw-w64-freerdp/0001-fix-warnings-mingw.patch @@ -0,0 +1,205 @@ +From d22b58b5cee40b003b7d5fa98aa659c88bbdf3d0 Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Wed, 28 Apr 2021 18:25:21 +0530 +Subject: [PATCH 1/3] CMake: Set ffmpeg and zlib optional in Win32. + +--- + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 5c4189da917..2e53e89b103 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -758,13 +758,13 @@ + if(WIN32) + set(X11_FEATURE_TYPE "DISABLED") + set(WAYLAND_FEATURE_TYPE "DISABLED") +- set(ZLIB_FEATURE_TYPE "DISABLED") ++ set(ZLIB_FEATURE_TYPE "OPTIONAL") + set(OSS_FEATURE_TYPE "DISABLED") + set(ALSA_FEATURE_TYPE "DISABLED") + set(PULSE_FEATURE_TYPE "DISABLED") + set(CUPS_FEATURE_TYPE "DISABLED") + set(PCSC_FEATURE_TYPE "DISABLED") +- set(FFMPEG_FEATURE_TYPE "DISABLED") ++ set(FFMPEG_FEATURE_TYPE "OPTIONAL") + set(VAAPI_FEATURE_TYPE "DISABLED") + set(OPENSLES_FEATURE_TYPE "DISABLED") + endif() +From 524214cd48efb4bfc55d060b25ecc6e7f3788a54 Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Wed, 28 Apr 2021 18:30:24 +0530 +Subject: [PATCH 2/3] Check _MSC_VER for MSVC specific pragma directives. + +--- + client/Windows/wf_floatbar.c | 2 ++ + libfreerdp/core/settings.c | 4 ++-- + winpr/libwinpr/path/shell.c | 2 +- + winpr/libwinpr/utils/trio/trio.c | 4 ++-- + 4 files changed, 7 insertions(+), 5 deletions(-) + +diff --git a/client/Windows/wf_floatbar.c b/client/Windows/wf_floatbar.c +index 512c66b473e..793569bc640 100644 +--- a/client/Windows/wf_floatbar.c ++++ b/client/Windows/wf_floatbar.c +@@ -25,7 +25,9 @@ + #include "wf_client.h" + #include "wf_floatbar.h" + #include "wf_gdi.h" ++#ifdef _MSC_VER + #pragma comment(lib, "Msimg32.lib") ++#endif + + #define TAG CLIENT_TAG("windows.floatbar") + +diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c +index 6539d43699d..b1703fec506 100644 +--- a/libfreerdp/core/settings.c ++++ b/libfreerdp/core/settings.c +@@ -44,7 +44,7 @@ + + #define TAG FREERDP_TAG("settings") + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4244) + #endif +@@ -1112,6 +1112,6 @@ rdpSettings* freerdp_settings_clone(const rdpSettings* settings) + freerdp_settings_free(_settings); + return NULL; + } +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(pop) + #endif +diff --git a/winpr/libwinpr/path/shell.c b/winpr/libwinpr/path/shell.c +index c373f039925..fc536c6bab6 100644 +--- a/winpr/libwinpr/path/shell.c ++++ b/winpr/libwinpr/path/shell.c +@@ -663,7 +663,7 @@ BOOL PathIsDirectoryEmptyW(LPCWSTR pszPath) + + #else + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma comment(lib, "shlwapi.lib") + #endif + +diff --git a/winpr/libwinpr/utils/trio/trio.c b/winpr/libwinpr/utils/trio/trio.c +index b278f475b75..a2c0290bc54 100644 +--- a/winpr/libwinpr/utils/trio/trio.c ++++ b/winpr/libwinpr/utils/trio/trio.c +@@ -406,7 +406,7 @@ typedef trio_longlong_t trio_int64_t; + * Internal Definitions + */ + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable : 4244) + #endif +@@ -7189,6 +7189,6 @@ TRIO_PUBLIC TRIO_CONST char* trio_strerror TRIO_ARGS1((errorcode), int errorcode + #endif + } + +-#ifdef _WIN32 ++#ifdef _MSC_VER + #pragma warning(pop) + #endif + +From 788849cb9b74540f8234b875d6b5622a96a64c73 Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Wed, 28 Apr 2021 18:32:54 +0530 +Subject: [PATCH 3/3] Fix intialization, remove some unused variables. + +--- + client/Windows/wf_floatbar.c | 16 ++++------------ + libfreerdp/utils/stopwatch.c | 2 +- + server/Windows/wf_mirage.c | 1 - + winpr/libwinpr/file/generic.c | 1 - + winpr/libwinpr/synch/sleep.c | 6 +++--- + 5 files changed, 8 insertions(+), 18 deletions(-) + +diff --git a/client/Windows/wf_floatbar.c b/client/Windows/wf_floatbar.c +index 793569bc640..b5fe3207d67 100644 +--- a/client/Windows/wf_floatbar.c ++++ b/client/Windows/wf_floatbar.c +@@ -357,18 +357,10 @@ static BOOL floatbar_paint(wfFloatBar* const floatbar, const HDC hdc) + int bottom = BACKGROUND_H - 1; + int right = BACKGROUND_W - 1; + const int angleOffset = BACKGROUND_H - 1; +- TRIVERTEX triVertext[2] = { left, +- top, +- GetRValue(rgbTop) << 8, +- GetGValue(rgbTop) << 8, +- GetBValue(rgbTop) << 8, +- 0x0000, +- right, +- bottom, +- GetRValue(rgbBottom) << 8, +- GetGValue(rgbBottom) << 8, +- GetBValue(rgbBottom) << 8, +- 0x0000 }; ++ TRIVERTEX triVertext[2] = { { left, top, GetRValue(rgbTop) << 8, GetGValue(rgbTop) << 8, ++ GetBValue(rgbTop) << 8, 0x0000 }, ++ { right, bottom, GetRValue(rgbBottom) << 8, ++ GetGValue(rgbBottom) << 8, GetBValue(rgbBottom) << 8, 0x0000 } }; + + if (!floatbar) + return FALSE; +diff --git a/libfreerdp/utils/stopwatch.c b/libfreerdp/utils/stopwatch.c +index b30890cd990..4dc207b6576 100644 +--- a/libfreerdp/utils/stopwatch.c ++++ b/libfreerdp/utils/stopwatch.c +@@ -27,7 +27,7 @@ + #include + + #ifdef _WIN32 +-LARGE_INTEGER stopwatch_freq = { 0, 0 }; ++LARGE_INTEGER stopwatch_freq = { 0 }; + #else + #include + #endif +diff --git a/server/Windows/wf_mirage.c b/server/Windows/wf_mirage.c +index 272bcbc64af..524ff6e0eaa 100644 +--- a/server/Windows/wf_mirage.c ++++ b/server/Windows/wf_mirage.c +@@ -195,7 +195,6 @@ void wf_mirror_driver_print_display_change_status(LONG status) + + BOOL wf_mirror_driver_update(wfInfo* wfi, int mode) + { +- HDC dc; + BOOL status; + DWORD* extHdr; + WORD drvExtraSaved; +diff --git a/winpr/libwinpr/file/generic.c b/winpr/libwinpr/file/generic.c +index 2faee83ad0a..7f230fe6d7e 100644 +--- a/winpr/libwinpr/file/generic.c ++++ b/winpr/libwinpr/file/generic.c +@@ -1299,7 +1299,6 @@ int UnixChangeFileMode(const char* filename, int flags) + #else + int rc; + WCHAR* wfl = NULL; +- int fl = 0; + + if (ConvertToUnicode(CP_UTF8, 0, filename, -1, &wfl, 0) <= 0) + return -1; +diff --git a/winpr/libwinpr/synch/sleep.c b/winpr/libwinpr/synch/sleep.c +index 05e7c53c535..7de1a3a521f 100644 +--- a/winpr/libwinpr/synch/sleep.c ++++ b/winpr/libwinpr/synch/sleep.c +@@ -117,9 +117,9 @@ VOID USleep(DWORD dwMicroseconds) + #ifndef _WIN32 + usleep(dwMicroseconds); + #else +- static LARGE_INTEGER freq = { 0, 0 }; +- LARGE_INTEGER t1 = { 0, 0 }; +- LARGE_INTEGER t2 = { 0, 0 }; ++ static LARGE_INTEGER freq = { 0 }; ++ LARGE_INTEGER t1 = { 0 }; ++ LARGE_INTEGER t2 = { 0 }; + + QueryPerformanceCounter(&t1); + diff --git a/mingw-w64-freerdp/0002-fix-build-errors-mingw.patch b/mingw-w64-freerdp/0002-fix-build-errors-mingw.patch new file mode 100644 index 0000000000..e5a20c59b3 --- /dev/null +++ b/mingw-w64-freerdp/0002-fix-build-errors-mingw.patch @@ -0,0 +1,308 @@ +From b788942c7c55f78121a195f989748c0ba92194ad Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Mon, 24 May 2021 10:21:42 +0530 +Subject: [PATCH 1/3] CMake: Install DLLs in bin folder. + +In Win32 platform, executables and runtime libraries need to be in one folder. +--- + client/common/CMakeLists.txt | 5 ++++- + libfreerdp/CMakeLists.txt | 6 +++++- + server/Windows/CMakeLists.txt | 5 ++++- + server/common/CMakeLists.txt | 6 +++++- + server/shadow/CMakeLists.txt | 10 ++++++++-- + winpr/libwinpr/CMakeLists.txt | 6 +++++- + winpr/tools/CMakeLists.txt | 6 +++++- + 7 files changed, 36 insertions(+), 8 deletions(-) + +diff --git a/client/common/CMakeLists.txt b/client/common/CMakeLists.txt +index cc8f277691e..095039d5779 100644 +--- a/client/common/CMakeLists.txt ++++ b/client/common/CMakeLists.txt +@@ -74,7 +74,10 @@ else() + endif() + + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDP-ClientTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT FreeRDP-ClientTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) +diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt +index ef76d059b5b..9b82f6e7033 100644 +--- a/libfreerdp/CMakeLists.txt ++++ b/libfreerdp/CMakeLists.txt +@@ -395,7 +395,11 @@ endif() + + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${LIBFREERDP_LIBS} winpr) + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDPTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT FreeRDPTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++ + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) + install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) +diff --git a/server/Windows/CMakeLists.txt b/server/Windows/CMakeLists.txt +index aed120586f9..f12687c0cfe 100644 +--- a/server/Windows/CMakeLists.txt ++++ b/server/Windows/CMakeLists.txt +@@ -98,7 +98,10 @@ + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) + + if(WITH_SERVER_INTERFACE) +- install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) ++ install(TARGETS ${MODULE_NAME} COMPONENT libraries ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + install(FILES ${CMAKE_BINARY_DIR}/${MODULE_NAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) +diff --git a/server/common/CMakeLists.txt b/server/common/CMakeLists.txt +index c94a20911b7..2ba633dece9 100644 +--- a/server/common/CMakeLists.txt ++++ b/server/common/CMakeLists.txt +@@ -63,7 +63,11 @@ endif() + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${FREERDP_CHANNELS_SERVER_LIBS}) + target_link_libraries(${MODULE_NAME} ${PUBLIC_KEYWORD} winpr freerdp) + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT FreeRDP-ServerTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT FreeRDP-ServerTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++ + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) + install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) +diff --git a/server/shadow/CMakeLists.txt b/server/shadow/CMakeLists.txt +index 3e0df0b1341..cee1423330a 100644 +--- a/server/shadow/CMakeLists.txt ++++ b/server/shadow/CMakeLists.txt +@@ -86,7 +86,10 @@ if (WITH_LIBRARY_VERSIONING) + set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) + endif() + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT server EXPORT FreeRDP-ShadowTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT server EXPORT FreeRDP-ShadowTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + if (WITH_DEBUG_SYMBOLS AND MSVC) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) +@@ -291,7 +294,10 @@ if (WITH_LIBRARY_VERSIONING) + set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${FREERDP_VERSION} SOVERSION ${FREERDP_API_VERSION}) + endif() + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT server EXPORT FreeRDP-ShadowTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT server EXPORT FreeRDP-ShadowTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + + if (WITH_DEBUG_SYMBOLS AND MSVC) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) +diff --git a/winpr/libwinpr/CMakeLists.txt b/winpr/libwinpr/CMakeLists.txt +index d9673f2d4a2..7ccc09e6e7b 100644 +--- a/winpr/libwinpr/CMakeLists.txt ++++ b/winpr/libwinpr/CMakeLists.txt +@@ -142,7 +142,11 @@ endif() + + add_definitions(${WINPR_DEFINITIONS}) + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${WINPR_LIBS_PRIVATE} ${PUBLIC_KEYWORD} ${WINPR_LIBS_PUBLIC}) +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT WinPRTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT WinPRTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++ + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) + install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) +diff --git a/winpr/tools/CMakeLists.txt b/winpr/tools/CMakeLists.txt +index 0ddf9fb522d..cf96686ac5e 100644 +--- a/winpr/tools/CMakeLists.txt ++++ b/winpr/tools/CMakeLists.txt +@@ -112,7 +112,11 @@ endif() + add_definitions(${WINPR_DEFINITIONS}) + target_link_libraries(${MODULE_NAME} ${PRIVATE_KEYWORD} ${WINPR_TOOLS_LIBS}) + +-install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT WinPRTargets) ++install(TARGETS ${MODULE_NAME} COMPONENT libraries EXPORT WinPRTargets ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ++ + if (WITH_DEBUG_SYMBOLS AND MSVC AND BUILD_SHARED_LIBS) + get_target_property(OUTPUT_FILENAME ${MODULE_NAME} OUTPUT_NAME) + install(FILES ${CMAKE_PDB_BINARY_DIR}/${OUTPUT_FILENAME}.pdb DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT symbols) + +From f8cd22cc915d688f1ee3b4ab0bbd4f6c114baa75 Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Mon, 24 May 2021 10:53:49 +0530 +Subject: [PATCH 3/3] Check MINGW32 for duplicate type declaration. + +--- + include/freerdp/channels/rdpdr.h | 2 ++ + include/freerdp/codec/audio.h | 2 ++ + include/freerdp/rail.h | 2 +- + include/freerdp/server/rdpdr.h | 2 ++ + server/Windows/wf_wasapi.c | 4 +++- + winpr/include/winpr/intrin.h | 2 +- + winpr/include/winpr/nt.h | 6 +++++- + 7 files changed, 16 insertions(+), 4 deletions(-) + +diff --git a/include/freerdp/channels/rdpdr.h b/include/freerdp/channels/rdpdr.h +index b61a4c7e189..07af2600f22 100644 +--- a/include/freerdp/channels/rdpdr.h ++++ b/include/freerdp/channels/rdpdr.h +@@ -298,6 +298,7 @@ enum FILE_FS_DEVICE_FLAG + FILE_DEVICE_SECURE_OPEN = 0x00000100 + }; + ++#ifndef __MINGW32__ + enum FILE_FS_INFORMATION_CLASS + { + FileFsVolumeInformation = 1, +@@ -311,6 +312,7 @@ enum FILE_FS_INFORMATION_CLASS + FileFsDriverPathInformation, + FileFsMaximumInformation + }; ++#endif + + typedef struct _DEVICE DEVICE; + typedef struct _IRP IRP; +diff --git a/include/freerdp/codec/audio.h b/include/freerdp/codec/audio.h +index e9c0408e8c7..82075826891 100644 +--- a/include/freerdp/codec/audio.h ++++ b/include/freerdp/codec/audio.h +@@ -69,6 +69,7 @@ typedef struct AUDIO_FORMAT AUDIO_FORMAT; + * http://tools.ietf.org/html/rfc2361 + */ + ++#ifndef __MINGW32__ + #define WAVE_FORMAT_UNKNOWN 0x0000 + + #ifndef WAVE_FORMAT_PCM +@@ -183,6 +184,7 @@ typedef struct AUDIO_FORMAT AUDIO_FORMAT; + #define WAVE_FORMAT_NORRIS 0x1400 + #define WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS 0x1500 + #define WAVE_FORMAT_DVM 0x2000 ++#endif /* !__MINGW32__ */ + #define WAVE_FORMAT_AAC_MS 0xA106 + + /** +diff --git a/include/freerdp/rail.h b/include/freerdp/rail.h +index 961ea8f8f5b..8f531fbb771 100644 +--- a/include/freerdp/rail.h ++++ b/include/freerdp/rail.h +@@ -246,7 +246,7 @@ enum SPI_MASK + #define IME_STATE_OPEN 0x00000001 + + /* ImeConvMode */ +-#ifndef _IME_CMODES_ ++#if !defined(_IME_CMODES_) && !defined(__MINGW32__) + #define IME_CMODE_NATIVE 0x00000001 + #define IME_CMODE_KATAKANA 0x00000002 + #define IME_CMODE_FULLSHAPE 0x00000008 +diff --git a/include/freerdp/server/rdpdr.h b/include/freerdp/server/rdpdr.h +index 63ddca564d8..72ed0ab2fc1 100644 +--- a/include/freerdp/server/rdpdr.h ++++ b/include/freerdp/server/rdpdr.h +@@ -35,6 +35,7 @@ + typedef struct _rdpdr_server_context RdpdrServerContext; + typedef struct _rdpdr_server_private RdpdrServerPrivate; + ++#ifndef __MINGW32__ + struct _FILE_DIRECTORY_INFORMATION + { + UINT32 NextEntryOffset; +@@ -49,6 +50,7 @@ struct _FILE_DIRECTORY_INFORMATION + char FileName[512]; + }; + typedef struct _FILE_DIRECTORY_INFORMATION FILE_DIRECTORY_INFORMATION; ++#endif + + typedef UINT (*psRdpdrStart)(RdpdrServerContext* context); + typedef UINT (*psRdpdrStop)(RdpdrServerContext* context); +diff --git a/server/Windows/wf_wasapi.c b/server/Windows/wf_wasapi.c +index 9a9dca1c1be..aa7dcd1af6f 100644 +--- a/server/Windows/wf_wasapi.c ++++ b/server/Windows/wf_wasapi.c +@@ -18,6 +18,7 @@ + //#define REFTIMES_PER_SEC 50000 + //#define REFTIMES_PER_MILLISEC 50 + ++#ifndef __MINGW32__ + DEFINE_GUID(CLSID_MMDeviceEnumerator, 0xBCDE0395, 0xE52F, 0x467C, 0x8E, 0x3D, 0xC4, 0x57, 0x92, + 0x91, 0x69, 0x2E); + DEFINE_GUID(IID_IMMDeviceEnumerator, 0xA95664D2, 0x9614, 0x4F35, 0xA7, 0x46, 0xDE, 0x8D, 0xB6, 0x36, +@@ -26,6 +27,7 @@ DEFINE_GUID(IID_IAudioClient, 0x1cb9ad4c, 0xdbfa, 0x4c32, 0xb1, 0x78, 0xc2, 0xf5 + 0xb2); + DEFINE_GUID(IID_IAudioCaptureClient, 0xc8adbd64, 0xe71e, 0x48a0, 0xa4, 0xde, 0x18, 0x5c, 0x39, 0x5c, + 0xd3, 0x17); ++#endif + + LPWSTR devStr = NULL; + wfPeerContext* latestPeer = NULL; +@@ -162,7 +164,7 @@ int wf_wasapi_get_device_string(LPWSTR pattern, LPWSTR* deviceStr) + return 0; + } + +-static DWORD WINAPI wf_rdpsnd_wasapi_thread(LPVOID lpParam) ++DWORD WINAPI wf_rdpsnd_wasapi_thread(LPVOID lpParam) + { + IMMDeviceEnumerator* pEnumerator = NULL; + IMMDevice* pDevice = NULL; +diff --git a/winpr/include/winpr/intrin.h b/winpr/include/winpr/intrin.h +index 53f6b346ab1..b6c3a48ce08 100644 +--- a/winpr/include/winpr/intrin.h ++++ b/winpr/include/winpr/intrin.h +@@ -22,7 +22,7 @@ + #ifndef WINPR_INTRIN_H + #define WINPR_INTRIN_H + +-#ifndef _WIN32 ++#if !defined(_WIN32) || defined(__MINGW32__) + + /** + * __lzcnt16, __lzcnt, __lzcnt64: +diff --git a/winpr/include/winpr/nt.h b/winpr/include/winpr/nt.h +index 0cbcde0beae..c58158550cd 100644 +--- a/winpr/include/winpr/nt.h ++++ b/winpr/include/winpr/nt.h +@@ -1267,7 +1267,7 @@ static INLINE NTSTATUS NTSTATUS_FROM_WIN32(long x) + } + #endif + +-#ifdef _WIN32 ++#if defined(_WIN32) && !defined(__MINGW32__) + + /** + * winternl.h contains an incomplete definition of enum FILE_INFORMATION_CLASS +@@ -1288,8 +1288,11 @@ static INLINE NTSTATUS NTSTATUS_FROM_WIN32(long x) + #undef _FILE_INFORMATION_CLASS + #undef FileDirectoryInformation + ++#elif defined(_WIN32) ++#include + #endif + ++#ifndef __MINGW32__ + typedef enum _FILE_INFORMATION_CLASS + { + FileDirectoryInformation = 1, +@@ -1333,6 +1336,7 @@ typedef enum _FILE_INFORMATION_CLASS + FileValidDataLengthInformation, + FileShortNameInformation + } FILE_INFORMATION_CLASS; ++#endif /* !__MINGW32__ */ + + #if !defined(_WIN32) || defined(_UWP) + diff --git a/mingw-w64-freerdp/0003-remove-declspec-import-export.patch b/mingw-w64-freerdp/0003-remove-declspec-import-export.patch new file mode 100644 index 0000000000..c11cb4082c --- /dev/null +++ b/mingw-w64-freerdp/0003-remove-declspec-import-export.patch @@ -0,0 +1,25 @@ +--- a/winpr/include/winpr/spec.h ++++ b/winpr/include/winpr/spec.h +@@ -956,22 +956,4 @@ + + #endif + +-#if defined(_WIN32) || defined(__CYGWIN__) +-#ifdef __GNUC__ +-#define DECLSPEC_EXPORT __attribute__((dllexport)) +-#define DECLSPEC_IMPORT __attribute__((dllimport)) +-#else +-#define DECLSPEC_EXPORT __declspec(dllexport) +-#define DECLSPEC_IMPORT __declspec(dllimport) +-#endif +-#else +-#if defined(__GNUC__) && __GNUC__ >= 4 +-#define DECLSPEC_EXPORT __attribute__((visibility("default"))) +-#define DECLSPEC_IMPORT +-#else +-#define DECLSPEC_EXPORT +-#define DECLSPEC_IMPORT +-#endif +-#endif +- + #endif /* WINPR_SPEC_H */ diff --git a/mingw-w64-freerdp/0004-remove-conflict-ntml-type.patch b/mingw-w64-freerdp/0004-remove-conflict-ntml-type.patch new file mode 100644 index 0000000000..a486ebf7bf --- /dev/null +++ b/mingw-w64-freerdp/0004-remove-conflict-ntml-type.patch @@ -0,0 +1,129 @@ +--- a/winpr/libwinpr/sspi/NTLM/ntlm.h ++++ b/winpr/libwinpr/sspi/NTLM/ntlm.h +@@ -77,7 +77,8 @@ + }; + typedef enum _NTLM_STATE NTLM_STATE; + +-enum _NTLM_AV_ID ++#ifndef __MINGW32__ ++enum _MSV1_0_AVID + { + MsvAvEOL, + MsvAvNbComputerName, +@@ -87,11 +88,12 @@ + MsvAvDnsTreeName, + MsvAvFlags, + MsvAvTimestamp, +- MsvAvSingleHost, ++ MsvAvRestrictions, + MsvAvTargetName, +- MsvChannelBindings ++ MsvAvChannelBindings + }; +-typedef enum _NTLM_AV_ID NTLM_AV_ID; ++typedef enum _MSV1_0_AVID MSV1_0_AVID; ++#endif + + struct _NTLM_AV_PAIR + { +--- a/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c ++++ b/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.c +@@ -71,12 +71,12 @@ + return "MsvAvFlags"; + case MsvAvTimestamp: + return "MsvAvTimestamp"; +- case MsvAvSingleHost: +- return "MsvAvSingleHost"; ++ case MsvAvRestrictions: ++ return "MsvAvRestrictions"; + case MsvAvTargetName: + return "MsvAvTargetName"; +- case MsvChannelBindings: +- return "MsvChannelBindings"; ++ case MsvAvChannelBindings: ++ return "MsvAvChannelBindings"; + default: + return "UNKNOWN"; + } +@@ -216,7 +216,7 @@ + return (NTLM_AV_PAIR*)((PBYTE)pAvPair + offset); + } + +-NTLM_AV_PAIR* ntlm_av_pair_get(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, NTLM_AV_ID AvId, ++NTLM_AV_PAIR* ntlm_av_pair_get(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, MSV1_0_AVID AvId, + size_t* pcbAvPairListRemaining) + { + UINT16 id; +@@ -247,7 +247,7 @@ + return pAvPair; + } + +-static BOOL ntlm_av_pair_add(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, NTLM_AV_ID AvId, ++static BOOL ntlm_av_pair_add(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, MSV1_0_AVID AvId, + PBYTE Value, UINT16 AvLen) + { + size_t cbAvPair; +@@ -619,7 +619,7 @@ + + if (context->SendSingleHostData) + { +- AvPairsCount++; /* MsvAvSingleHost */ ++ AvPairsCount++; /* MsvAvRestrictions */ + ntlm_compute_single_host_data(context); + AvPairsValueLength += context->SingleHostData.Size; + } +@@ -635,7 +635,7 @@ + * SEC_CHANNEL_BINDINGS structure + * http://msdn.microsoft.com/en-us/library/windows/desktop/dd919963/ + */ +- AvPairsCount++; /* MsvChannelBindings */ ++ AvPairsCount++; /* MsvAvChannelBindings */ + AvPairsValueLength += 16; + ntlm_compute_channel_bindings(context); + +@@ -714,14 +714,14 @@ + + if (context->SendSingleHostData) + { +- if (!ntlm_av_pair_add(AuthenticateTargetInfo, cbAuthenticateTargetInfo, MsvAvSingleHost, ++ if (!ntlm_av_pair_add(AuthenticateTargetInfo, cbAuthenticateTargetInfo, MsvAvRestrictions, + (PBYTE)&context->SingleHostData, context->SingleHostData.Size)) + goto fail; + } + + if (!context->SuppressExtendedProtection) + { +- if (!ntlm_av_pair_add(AuthenticateTargetInfo, cbAuthenticateTargetInfo, MsvChannelBindings, ++ if (!ntlm_av_pair_add(AuthenticateTargetInfo, cbAuthenticateTargetInfo, MsvAvChannelBindings, + context->ChannelBindingsHash, 16)) + goto fail; + +--- a/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.h ++++ b/winpr/libwinpr/sspi/NTLM/ntlm_av_pairs.h +@@ -27,7 +27,7 @@ + ULONG ntlm_av_pair_list_length(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList); + void ntlm_print_av_pair_list(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList); + PBYTE ntlm_av_pair_get_value_pointer(NTLM_AV_PAIR* pAvPair); +-NTLM_AV_PAIR* ntlm_av_pair_get(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, NTLM_AV_ID AvId, ++NTLM_AV_PAIR* ntlm_av_pair_get(NTLM_AV_PAIR* pAvPairList, size_t cbAvPairList, MSV1_0_AVID AvId, + size_t* pcbAvPairListRemaining); + + int ntlm_construct_challenge_target_info(NTLM_CONTEXT* context); +--- a/winpr/libwinpr/wtsapi/wtsapi.c ++++ b/winpr/libwinpr/wtsapi/wtsapi.c +@@ -52,9 +52,15 @@ + static HMODULE g_WtsApi32Module = NULL; + static WtsApiFunctionTable WtsApi32_WtsApiFunctionTable = { 0 }; + ++#ifdef __MINGW32__ ++#define WTSAPI32_LOAD_PROC(_name, _type) \ ++ WtsApi32_WtsApiFunctionTable.p##_name = (_type)GetProcAddress(g_WtsApi32Module, "WT" \ ++ "S" #_name); ++#else + #define WTSAPI32_LOAD_PROC(_name, _type) \ + WtsApi32_WtsApiFunctionTable.p##_name = (##_type)GetProcAddress(g_WtsApi32Module, "WT" \ + "S" #_name); ++#endif + + static BOOL WtsApi32_InitializeWtsApi(void) + { diff --git a/mingw-w64-freerdp/0005-rename-interface-variable.patch b/mingw-w64-freerdp/0005-rename-interface-variable.patch new file mode 100644 index 0000000000..fd1bc157bd --- /dev/null +++ b/mingw-w64-freerdp/0005-rename-interface-variable.patch @@ -0,0 +1,56 @@ +--- a/channels/urbdrc/client/data_transfer.c ++++ b/channels/urbdrc/client/data_transfer.c +@@ -1320,7 +1320,7 @@ + { + size_t out_size; + UINT32 InterfaceId, OutputBufferSize, usbd_status; +- UINT16 interface; ++ UINT16 iface; + wStream* out; + URBDRC_PLUGIN* urbdrc; + const BOOL noAck = (RequestField & 0x80000000U) != 0; +@@ -1345,7 +1345,7 @@ + } + + InterfaceId = ((STREAM_ID_PROXY << 30) | pdev->get_ReqCompletion(pdev)); +- Stream_Read_UINT16(s, interface); ++ Stream_Read_UINT16(s, iface); + Stream_Seek(s, 2); + Stream_Read_UINT32(s, OutputBufferSize); + if (OutputBufferSize > UINT32_MAX - 36) +@@ -1360,7 +1360,7 @@ + + if (!pdev->control_transfer( + pdev, RequestId, 0, 0, 0x80 | 0x01, 0x0A, /* REQUEST_GET_INTERFACE */ +- 0, interface, &usbd_status, &OutputBufferSize, Stream_Pointer(out), 1000)) ++ 0, iface, &usbd_status, &OutputBufferSize, Stream_Pointer(out), 1000)) + { + WLog_Print(urbdrc->log, WLOG_DEBUG, "control_transfer failed"); + Stream_Free(out, TRUE); +--- a/channels/urbdrc/common/urbdrc_helpers.c ++++ b/channels/urbdrc/common/urbdrc_helpers.c +@@ -199,10 +199,10 @@ + return "QUERY_DEVICE_TEXT_RSP [stub |client]"; + } + +-const char* call_to_string(BOOL client, UINT32 interface, UINT32 functionId) ++const char* call_to_string(BOOL client, UINT32 iface, UINT32 functionId) + { +- const UINT32 mask = (interface & STREAM_ID_MASK) >> 30; +- const UINT32 interfaceId = interface & INTERFACE_ID_MASK; ++ const UINT32 mask = (iface & STREAM_ID_MASK) >> 30; ++ const UINT32 interfaceId = iface & INTERFACE_ID_MASK; + + switch (mask) + { +--- a/channels/urbdrc/common/urbdrc_helpers.h ++++ b/channels/urbdrc/common/urbdrc_helpers.h +@@ -34,7 +34,7 @@ + const char* urb_function_string(UINT16 urb); + const char* mask_to_string(UINT32 mask); + const char* interface_to_string(UINT32 id); +- const char* call_to_string(BOOL client, UINT32 interface, UINT32 functionId); ++ const char* call_to_string(BOOL client, UINT32 iface, UINT32 functionId); + + void urbdrc_dump_message(wLog* log, BOOL client, BOOL write, wStream* s); + diff --git a/mingw-w64-freerdp/0006-fix-manpage_formatting.patch b/mingw-w64-freerdp/0006-fix-manpage_formatting.patch new file mode 100644 index 0000000000..fcd8f7224e --- /dev/null +++ b/mingw-w64-freerdp/0006-fix-manpage_formatting.patch @@ -0,0 +1,11 @@ +--- a/cmake/FindDocBookXSL.cmake ++++ b/cmake/FindDocBookXSL.cmake +@@ -30,7 +30,7 @@ + set (STYLESHEET_PATH_LIST) + foreach (STYLESHEET_PREFIX_ITER ${CMAKE_SYSTEM_PREFIX_PATH}) + file(GLOB STYLESHEET_SUFFIX_ITER RELATIVE ${STYLESHEET_PREFIX_ITER} +- ${STYLESHEET_PREFIX_ITER}/share/xml/docbook/xsl-stylesheets-* ++ ${STYLESHEET_PREFIX_ITER}/share/xml/docbook/xsl-stylesheets-*-nons + ) + if (STYLESHEET_SUFFIX_ITER) + list (APPEND STYLESHEET_PATH_LIST ${STYLESHEET_SUFFIX_ITER}) diff --git a/mingw-w64-freerdp/0007-read-QuadPart-from-LARGE_INTEGER.patch b/mingw-w64-freerdp/0007-read-QuadPart-from-LARGE_INTEGER.patch new file mode 100644 index 0000000000..cc4a7448d9 --- /dev/null +++ b/mingw-w64-freerdp/0007-read-QuadPart-from-LARGE_INTEGER.patch @@ -0,0 +1,21 @@ +--- a/channels/rdpdr/server/rdpdr_main.c ++++ b/channels/rdpdr/server/rdpdr_main.c +@@ -1331,12 +1331,12 @@ + + Stream_Read_UINT32(s, fdi->NextEntryOffset); /* NextEntryOffset (4 bytes) */ + Stream_Read_UINT32(s, fdi->FileIndex); /* FileIndex (4 bytes) */ +- Stream_Read_UINT64(s, fdi->CreationTime); /* CreationTime (8 bytes) */ +- Stream_Read_UINT64(s, fdi->LastAccessTime); /* LastAccessTime (8 bytes) */ +- Stream_Read_UINT64(s, fdi->LastWriteTime); /* LastWriteTime (8 bytes) */ +- Stream_Read_UINT64(s, fdi->ChangeTime); /* ChangeTime (8 bytes) */ +- Stream_Read_UINT64(s, fdi->EndOfFile); /* EndOfFile (8 bytes) */ +- Stream_Read_UINT64(s, fdi->AllocationSize); /* AllocationSize (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->CreationTime.QuadPart); /* CreationTime (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->LastAccessTime.QuadPart); /* LastAccessTime (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->LastWriteTime.QuadPart); /* LastWriteTime (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->ChangeTime.QuadPart); /* ChangeTime (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->EndOfFile.QuadPart); /* EndOfFile (8 bytes) */ ++ Stream_Read_UINT64(s, fdi->AllocationSize.QuadPart); /* AllocationSize (8 bytes) */ + Stream_Read_UINT32(s, fdi->FileAttributes); /* FileAttributes (4 bytes) */ + Stream_Read_UINT32(s, fileNameLength); /* FileNameLength (4 bytes) */ + diff --git a/mingw-w64-freerdp/PKGBUILD b/mingw-w64-freerdp/PKGBUILD new file mode 100644 index 0000000000..7d3ed48adb --- /dev/null +++ b/mingw-w64-freerdp/PKGBUILD @@ -0,0 +1,101 @@ +# Maintainer: Biswapriyo Nath + +_realname=freerdp +pkgbase=mingw-w64-${_realname} +pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}" +pkgver=2.3.2 +pkgrel=1 +pkgdesc="Free implementation of the Remote Desktop Protocol (RDP) (mingw-w64)" +arch=('any') +mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64') +url="https://www.freerdp.com/" +license=('Apache') +depends=("${MINGW_PACKAGE_PREFIX}-ffmpeg" + "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo" + "${MINGW_PACKAGE_PREFIX}-libusb" + "${MINGW_PACKAGE_PREFIX}-openssl") +makedepends=("${MINGW_PACKAGE_PREFIX}-cmake" + "${MINGW_PACKAGE_PREFIX}-ninja" + "${MINGW_PACKAGE_PREFIX}-iconv") +options=('strip' '!debug' 'staticlibs') +source=("${_realname}-${pkgver}.tar.gz::https://github.com/${_realname}/${_realname}/archive/${pkgver}.tar.gz" + "0001-fix-warnings-mingw.patch" + "0002-fix-build-errors-mingw.patch" + "0003-remove-declspec-import-export.patch" + "0004-remove-conflict-ntml-type.patch" + "0005-rename-interface-variable.patch" + "0006-fix-manpage_formatting.patch" + "0007-read-QuadPart-from-LARGE_INTEGER.patch") +sha256sums=('a1f52f0d9569b418a555ffe4d15a3782712198be47308e9514d20ca5af41a1b1' + '9e71e16b23cb7e1285bc395370b78cc9ca72f897bb8650820d5b4d5e5fcb5176' + '06d869d249484b57f8da868c8cd5498d96bc4f3bcf669139e2bc7da8bf48a9e6' + '7b5b85a83af0d2243d334cc4b4cd80e95077ca00c161792cf27cee62c42eae0f' + '923fd3cd86d6d5815b72f15b7fe7c226349b38ff09b7475b1143cb5d7c015738' + '5b3fe9a7d4d5db2096b0786c88da30ff8c2819b1703aa995badd8f90550d56e1' + 'f091fcdf13a4693835ca1aa0a3d5ef2f15b97c77f91af5a937e3acfbded14678' + '9c728341d0e7cd3896cee34b4dce78c18d5235a2cc336e2eae63e5fda354ac08') + +prepare() { + mv -v "FreeRDP-${pkgver}" "${_realname}-${pkgver}" + cd "${_realname}-${pkgver}" + + # https://github.com/FreeRDP/FreeRDP/pull/6983 + patch -Np1 -i "${srcdir}/0001-fix-warnings-mingw.patch" + + # https://github.com/FreeRDP/FreeRDP/pull/7034 + patch -Np1 -i "${srcdir}/0002-fix-build-errors-mingw.patch" + + # Change to UTF-8 because patch can not. upstream #7034 + iconv -f UCS-2LE -t UTF-8 client/Windows/wfreerdp.rc > client/Windows/wfreerdp.rc.mod + sed -i '1s/^\xEF\xBB\xBF//' client/Windows/wfreerdp.rc.mod + mv client/Windows/wfreerdp.rc.mod client/Windows/wfreerdp.rc + + # Duplicate macros + patch -Np1 -i "${srcdir}/0003-remove-declspec-import-export.patch" + + # NTLM_AV_ID conflicts with MSV1_0_AVID + patch -Np1 -i "${srcdir}/0004-remove-conflict-ntml-type.patch" + + # The variable name 'interface' assumed as keyword though it's C. + patch -Np1 -i "${srcdir}/0005-rename-interface-variable.patch" + + # fix man page formatting: + # https://bugs.archlinux.org/task/64814 + patch -Np1 -i "${srcdir}/0006-fix-manpage_formatting.patch" + + patch -Np1 -i "${srcdir}/0007-read-QuadPart-from-LARGE_INTEGER.patch" +} + +build() { + [[ -d "${srcdir}/build-${MINGW_CHOST}" ]] && rm -rf "${srcdir}/build-${MINGW_CHOST}" + mkdir -p "${srcdir}/build-${MINGW_CHOST}" && cd "${srcdir}/build-${MINGW_CHOST}" + + CFLAGS+=" -Wno-format" \ + MSYS2_ARG_CONV_EXCL="-DCMAKE_INSTALL_PREFIX=" \ + ${MINGW_PREFIX}/bin/cmake.exe \ + -Wno-dev \ + -G "Ninja" \ + -DCMAKE_INSTALL_PREFIX=${MINGW_PREFIX} \ + -DCMAKE_INSTALL_LIBDIR='lib' \ + -DCMAKE_BUILD_TYPE='None' \ + -DPROXY_PLUGINDIR='${MINGW_PREFIX}/lib/freerdp2/server/proxy/plugins' \ + -DWITH_CAIRO=ON \ + -DWITH_ZLIB=ON \ + -DWITH_DSP_FFMPEG=ON \ + -DWITH_FFMPEG=ON \ + -DWITH_JPEG=ON \ + -DWITH_SERVER=ON \ + -DWITH_SWSCALE=ON \ + -DWITH_CHANNELS=ON \ + -DWITH_CLIENT_CHANNELS=ON \ + -DWITH_SERVER_CHANNELS=ON \ + -DCHANNEL_URBDRC_CLIENT=ON \ + "../${_realname}-${pkgver}" + + ${MINGW_PREFIX}/bin/cmake.exe --build ./ +} + +package() { + cd "${srcdir}/build-${MINGW_CHOST}" + DESTDIR="${pkgdir}" ${MINGW_PREFIX}/bin/cmake.exe --build ./ --target install +}