From f30ca0c6f5b6cadc7b7a9f4610a96b53b6353154 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 31 Oct 2017 12:04:51 +0000 Subject: community/freerdp: move from main --- community/freerdp/APKBUILD | 94 +++++++ community/freerdp/ffmpeg.patch | 39 +++ community/freerdp/freerdp-args.patch | 186 ++++++++++++ community/freerdp/freerdp-cmake-3.1.patch | 98 +++++++ community/freerdp/freerdp-cmake-list.patch | 79 ++++++ .../freerdp/freerdp-fixes-since-24a752a.patch | 313 +++++++++++++++++++++ community/freerdp/libressl-2.5.patch | 16 ++ community/freerdp/musl-fix.patch | 47 ++++ 8 files changed, 872 insertions(+) create mode 100644 community/freerdp/APKBUILD create mode 100644 community/freerdp/ffmpeg.patch create mode 100644 community/freerdp/freerdp-args.patch create mode 100644 community/freerdp/freerdp-cmake-3.1.patch create mode 100644 community/freerdp/freerdp-cmake-list.patch create mode 100644 community/freerdp/freerdp-fixes-since-24a752a.patch create mode 100644 community/freerdp/libressl-2.5.patch create mode 100644 community/freerdp/musl-fix.patch (limited to 'community') diff --git a/community/freerdp/APKBUILD b/community/freerdp/APKBUILD new file mode 100644 index 0000000000..9db9eb6395 --- /dev/null +++ b/community/freerdp/APKBUILD @@ -0,0 +1,94 @@ +# Maintainer: Natanael Copa +pkgname=freerdp +pkgver=2.0.0_rc0 +_hash=24a752a70840f3e4b027ba7c020af71f2bcfd94a +pkgrel=0 +pkgdesc="Free RDP client" +url="http://freerdp.sourceforge.net" +arch="all" +license="GPL" +depends="" +subpackages="$pkgname-dev $pkgname-plugins $pkgname-libs" +makedepends="libressl-dev libxcursor-dev cups-dev alsa-lib-dev ffmpeg-dev + cups-dev libxkbfile-dev libxinerama-dev libxv-dev libxdamage-dev + libjpeg-turbo-dev libxi-dev cmake bsd-compat-headers + gst-plugins-base-dev gsm-dev linux-headers" +source="$pkgname-$pkgver.tar.gz::https://github.com/FreeRDP/FreeRDP/archive/$_hash.tar.gz + freerdp-cmake-list.patch + freerdp-fixes-since-24a752a.patch + freerdp-args.patch + musl-fix.patch + libressl-2.5.patch + " + +_builddir="$srcdir"/FreeRDP-$_hash + +prepare() { + cd "$_builddir" + for i in $source; do + case $i in + *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;; + esac + done +} + +build() { + cd "$_builddir" + export CFLAGS="$CFLAGS -D_BSD_SOURCE" + cmake -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DWITH_ALSA=ON \ + -DWITH_CUPS=ON \ + -DWITH_CHANNELS=ON -DSTATIC_CHANNELS=OFF \ + -DWITH_DIRECTFB=OFF \ + -DWITH_FFMPEG=OFF \ + -DWITH_GSM=ON \ + -DWITH_GSTREAMER_1_0=ON \ + -DWITH_IPP=OFF \ + -DWITH_JPEG=ON \ + -DWITH_OPENSSL=ON \ + -DWITH_PCSC=OFF \ + -DWITH_PULSE=OFF \ + -DWITH_WAYLAND=OFF \ + -DWITH_SERVER=ON \ + -DWITH_X11=ON \ + -DWITH_XCURSOR=ON \ + -DWITH_XEXT=ON \ + -DWITH_XKBFILE=ON \ + -DWITH_XI=ON \ + -DWITH_XINERAMA=ON \ + -DWITH_XRENDER=ON \ + -DWITH_XV=ON \ + -DWITH_ZLIB=ON \ + -DWITH_NEON=OFF \ + -DARM_FP_API=hard \ + || return 1 + make +} + +package() { + cd "$_builddir" + make DESTDIR="$pkgdir" install || return 1 +} + +libs() { + pkgdesc="Free RDP client - Libraries" + replaces="libfreerdp" + mkdir -p "$subpkgdir"/usr + mv "$pkgdir"/usr/lib "$subpkgdir"/usr/ +} + +plugins() { + pkgdesc="Free RDP client - plugins" + replaces="libfreerdp" + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/freerdp "$subpkgdir"/usr/lib/ +} + +sha512sums="9bafea8e76748ac1bf278172a6876f84304197136f582a511923a6837d2bb5adf1ca85b361bb183802e631243bc97b0b72e9eafa323470b08c715b2ad711f508 freerdp-2.0.0_rc0.tar.gz +c98a19630213c7cce1fc4256987586ff38102560cff0ee4df0c937b2030f6c066e0da8337379b14d41c821652b1a85f5d296efee426e28dc0a1603b9d5ade0f7 freerdp-cmake-list.patch +76aaa3b3b631728ecf8567a09c44f5b84af494d42b4437ec5198a1fe9d0a7312fcfa5acbf45b2d2b1cda60a530c36e108d7a50581c6f63b2058fcd785499842a freerdp-fixes-since-24a752a.patch +a845b77b6106d9a3e9d69bc0a6df3f80a6f37bed2847ace387739def695a3b07acc5e859893a9af11b7c74d96b4eeea99d9a79d5c4e4b504bacd51d612882b01 freerdp-args.patch +2a3edc5df8f2374c023b604b3f523bbc9e510a35707bef2100ac64677109dc7615a11567558aeda3b032576308ef026ed9b80ef2c479d1004f840f18d6cf0890 musl-fix.patch +2efa371fed576c08daa5450dcb48147db5740965c9b3334a842d945bd316e42f50299cbc6f137c9a0242038bf294db284bec0f214002fc313b0d795f172f0d46 libressl-2.5.patch" diff --git a/community/freerdp/ffmpeg.patch b/community/freerdp/ffmpeg.patch new file mode 100644 index 0000000000..5025771d26 --- /dev/null +++ b/community/freerdp/ffmpeg.patch @@ -0,0 +1,39 @@ +--- FreeRDP-1.1.0-beta-2013071101.orig/channels/tsmf/client/ffmpeg/tsmf_ffmpeg.c ++++ FreeRDP-1.1.0-beta-2013071101/channels/tsmf/client/ffmpeg/tsmf_ffmpeg.c +@@ -37,6 +37,10 @@ + #include "tsmf_constants.h" + #include "tsmf_decoder.h" + ++#ifndef AVCODEC_MAX_AUDIO_FRAME_SIZE ++#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 ++#endif ++ + /* Compatibility with older FFmpeg */ + #if LIBAVUTIL_VERSION_MAJOR < 50 + #define AVMEDIA_TYPE_VIDEO 0 +@@ -48,7 +52,7 @@ + ITSMFDecoder iface; + + int media_type; +- enum CodecID codec_id; ++ enum AVCodecID codec_id; + AVCodecContext* codec_context; + AVCodec* codec; + AVFrame* frame; +@@ -97,16 +101,6 @@ + mdecoder->codec_context->bit_rate = media_type->BitRate; + mdecoder->codec_context->channels = media_type->Channels; + mdecoder->codec_context->block_align = media_type->BlockAlign; +- +-#ifdef AV_CPU_FLAG_SSE2 +- mdecoder->codec_context->dsp_mask = AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_MMX2; +-#else +-#if LIBAVCODEC_VERSION_MAJOR < 53 +- mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMXEXT; +-#else +- mdecoder->codec_context->dsp_mask = FF_MM_SSE2 | FF_MM_MMX2; +-#endif +-#endif + + return TRUE; + } diff --git a/community/freerdp/freerdp-args.patch b/community/freerdp/freerdp-args.patch new file mode 100644 index 0000000000..d9b7eca16a --- /dev/null +++ b/community/freerdp/freerdp-args.patch @@ -0,0 +1,186 @@ +diff --git a/client/common/cmdline.c b/client/common/cmdline.c +index f1f9640..72bbd12 100644 +--- a/client/common/cmdline.c ++++ b/client/common/cmdline.c +@@ -1078,8 +1078,10 @@ BOOL freerdp_client_detect_command_line(int argc, char** argv, DWORD* flags) + if (posix_cli_status <= COMMAND_LINE_STATUS_PRINT) + return compatibility; + +- if (windows_cli_count >= posix_cli_count) ++ /* Check, if this may be windows style syntax... */ ++ if ((windows_cli_count && (windows_cli_count >= posix_cli_count)) || (windows_cli_status <= COMMAND_LINE_STATUS_PRINT)) + { ++ windows_cli_count = 1; + *flags = COMMAND_LINE_SEPARATOR_COLON; + *flags |= COMMAND_LINE_SIGIL_SLASH | COMMAND_LINE_SIGIL_PLUS_MINUS; + } +diff --git a/client/common/compatibility.c b/client/common/compatibility.c +index 3a7d0da..d6efe50 100644 +--- a/client/common/compatibility.c ++++ b/client/common/compatibility.c +@@ -122,16 +122,20 @@ void freerdp_client_old_parse_hostname(char* str, char** ServerHostname, UINT32* + + int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args) + { ++ int args_handled = 0; + if (strcmp(args->argv[0], "cliprdr") == 0) + { ++ args_handled++; + settings->RedirectClipboard = TRUE; + WLog_WARN(TAG, "--plugin cliprdr -> +clipboard"); + } + else if (strcmp(args->argv[0], "rdpdr") == 0) + { ++ args_handled++; + if (args->argc < 2) +- return -1; ++ return 1; + ++ args_handled++; + if ((strcmp(args->argv[1], "disk") == 0) || + (strcmp(args->argv[1], "drive") == 0)) + { +@@ -159,21 +163,26 @@ int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args) + } + else if (strcmp(args->argv[0], "drdynvc") == 0) + { ++ args_handled++; + freerdp_client_add_dynamic_channel(settings, args->argc - 1, &args->argv[1]); + } + else if (strcmp(args->argv[0], "rdpsnd") == 0) + { ++ args_handled++; + if (args->argc < 2) +- return -1; ++ return 1; + ++ args_handled++; + freerdp_addin_replace_argument_value(args, args->argv[1], "sys", args->argv[1]); + freerdp_client_add_static_channel(settings, args->argc, args->argv); + } + else if (strcmp(args->argv[0], "rail") == 0) + { ++ args_handled++; + if (args->argc < 2) +- return -1; ++ return 1; + ++ args_handled++; + settings->RemoteApplicationProgram = _strdup(args->argv[1]); + } + else +@@ -181,14 +190,12 @@ int freerdp_client_old_process_plugin(rdpSettings* settings, ADDIN_ARGV* args) + freerdp_client_add_static_channel(settings, args->argc, args->argv); + } + +- return 1; ++ return args_handled; + } + + int freerdp_client_old_command_line_pre_filter(void* context, int index, int argc, LPCSTR* argv) + { +- rdpSettings* settings; +- +- settings = (rdpSettings*) context; ++ rdpSettings* settings = (rdpSettings*) context; + + if (index == (argc - 1)) + { +@@ -204,11 +211,10 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + return -1; + } + +- if (settings) +- { +- freerdp_client_old_parse_hostname((char*) argv[index], +- &settings->ServerHostname, &settings->ServerPort); +- } ++ freerdp_client_old_parse_hostname((char*) argv[index], ++ &settings->ServerHostname, &settings->ServerPort); ++ ++ return 2; + } + else + { +@@ -218,6 +224,7 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + + if (strcmp("--plugin", argv[index]) == 0) + { ++ int args_handled = 0; + int length; + char *a, *p; + int i, j, t; +@@ -233,20 +240,19 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + return -1; + + args = (ADDIN_ARGV*) malloc(sizeof(ADDIN_ARGV)); +- args->argv = (char**) malloc(sizeof(char*) * 5); ++ args->argv = (char**) calloc(argc, sizeof(char*)); + args->argc = 1; + +- args->argv[0] = _strdup(argv[t]); +- + if ((index < argc - 1) && strcmp("--data", argv[index + 1]) == 0) + { + i = 0; + index += 2; +- args->argc = 1; + + while ((index < argc) && (strcmp("--", argv[index]) != 0)) + { ++ args_handled ++; + args->argc = 1; ++ args->argv[0] = _strdup(argv[t]); + + for (j = 0, p = (char*) argv[index]; (j < 4) && (p != NULL); j++) + { +@@ -267,6 +273,9 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + if (p != NULL) + { + p = strchr(p, ':'); ++ } ++ if (p != NULL) ++ { + length = (int) (p - a); + args->argv[j + 1] = (char*) malloc(length + 1); + CopyMemory(args->argv[j + 1], a, length); +@@ -281,11 +290,14 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + args->argc++; + } + +- if (settings->instance) ++ if (settings) + { + freerdp_client_old_process_plugin(settings, args); + } + ++ for (i = 0; i < args->argc; i++) ++ free(args->argv[i]); ++ memset(args->argv, 0, argc * sizeof(char*)); + index++; + i++; + } +@@ -294,19 +306,16 @@ int freerdp_client_old_command_line_pre_filter(void* context, int index, int arg + { + if (settings) + { +- if (settings->instance) +- { +- freerdp_client_old_process_plugin(settings, args); +- } ++ args->argv[0] = _strdup(argv[t]); ++ args_handled = freerdp_client_old_process_plugin(settings, args); ++ free (args->argv[0]); + } + } + +- for (i = 0; i < args->argc; i++) +- free(args->argv[i]); + free(args->argv); + free(args); + +- return (index - old_index); ++ return (index - old_index) + args_handled; + } + + return 0; diff --git a/community/freerdp/freerdp-cmake-3.1.patch b/community/freerdp/freerdp-cmake-3.1.patch new file mode 100644 index 0000000000..462fb56396 --- /dev/null +++ b/community/freerdp/freerdp-cmake-3.1.patch @@ -0,0 +1,98 @@ +From 1b663ceffe51008af7ae9749e5b7999b2f7d6698 Mon Sep 17 00:00:00 2001 +From: Bernhard Miklautz +Date: Fri, 12 Dec 2014 18:26:45 +0100 +Subject: [PATCH] build: cmake 3.1 compatibility + +* fix problem with REMOVE_DUPLICATES on undefined lists +* since 3.1 file(GLOB FILEPATHS RELATIVE .. returns single / instead of // as + previously - necessary adoptions for regex and matches done. Should + work with all cmake versions. + +Tested with 3.1.0-rc3 +--- + channels/CMakeLists.txt | 4 ++-- + channels/client/CMakeLists.txt | 2 ++ + client/CMakeLists.txt | 4 ++-- + server/CMakeLists.txt | 4 ++-- + third-party/CMakeLists.txt | 6 +++--- + 5 files changed, 11 insertions(+), 9 deletions(-) + +diff --git a/channels/CMakeLists.txt b/channels/CMakeLists.txt +index c4e6048..540b1ac 100644 +--- a/channels/CMakeLists.txt ++++ b/channels/CMakeLists.txt +@@ -253,8 +253,8 @@ set(FILENAME "ChannelOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" DIR ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" DIR ${FILEPATH}) + set(CHANNEL_OPTION) + include(${FILEPATH}) + if(${CHANNEL_OPTION}) +diff --git a/channels/client/CMakeLists.txt b/channels/client/CMakeLists.txt +index 049bc7b..2db18e8 100644 +--- a/channels/client/CMakeLists.txt ++++ b/channels/client/CMakeLists.txt +@@ -24,7 +24,9 @@ set(${MODULE_PREFIX}_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/addin.c + ${CMAKE_CURRENT_SOURCE_DIR}/addin.h) + ++if(CHANNEL_STATIC_CLIENT_ENTRIES) + list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES) ++endif() + + foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES}) + foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES}) +diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt +index 14ed363..b8b7699 100644 +--- a/client/CMakeLists.txt ++++ b/client/CMakeLists.txt +@@ -63,8 +63,8 @@ set(FILENAME "ModuleOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" FREERDP_CLIENT ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" FREERDP_CLIENT ${FILEPATH}) + set(FREERDP_CLIENT_ENABLED 0) + include(${FILEPATH}) + if(FREERDP_CLIENT_ENABLED) +diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt +index cda14ba..ee9458e 100644 +--- a/server/CMakeLists.txt ++++ b/server/CMakeLists.txt +@@ -48,8 +48,8 @@ set(FILENAME "ModuleOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" FREERDP_SERVER ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" FREERDP_SERVER ${FILEPATH}) + set(FREERDP_SERVER_ENABLED 0) + include(${FILEPATH}) + if(FREERDP_SERVER_ENABLED) +diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt +index 09b1fd4..610f35e 100644 +--- a/third-party/CMakeLists.txt ++++ b/third-party/CMakeLists.txt +@@ -22,11 +22,11 @@ + file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt") + + foreach(dir ${all_valid_subdirs}) +- if(${dir} MATCHES "^([^/]*)//CMakeLists.txt") +- string(REGEX REPLACE "^([^/]*)//CMakeLists.txt" "\\1" dir_trimmed ${dir}) ++ if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt") ++ string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir}) + message(STATUS "Adding third-party component ${dir_trimmed}") + add_subdirectory(${dir_trimmed}) + endif() + endforeach(dir) + +-set(THIRD_PARTY_INCLUDES ${THIRD_PARTY_INCLUDES} PARENT_SCOPE) +\ No newline at end of file ++set(THIRD_PARTY_INCLUDES ${THIRD_PARTY_INCLUDES} PARENT_SCOPE) diff --git a/community/freerdp/freerdp-cmake-list.patch b/community/freerdp/freerdp-cmake-list.patch new file mode 100644 index 0000000000..37fd78b9e6 --- /dev/null +++ b/community/freerdp/freerdp-cmake-list.patch @@ -0,0 +1,79 @@ +diff --git a/channels/CMakeLists.txt b/channels/CMakeLists.txt +index c4e6048..540b1ac 100644 +--- a/channels/CMakeLists.txt ++++ b/channels/CMakeLists.txt +@@ -253,8 +253,8 @@ set(FILENAME "ChannelOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" DIR ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" DIR ${FILEPATH}) + set(CHANNEL_OPTION) + include(${FILEPATH}) + if(${CHANNEL_OPTION}) +diff --git a/channels/client/CMakeLists.txt b/channels/client/CMakeLists.txt +index 049bc7b..2db18e8 100644 +--- a/channels/client/CMakeLists.txt ++++ b/channels/client/CMakeLists.txt +@@ -24,7 +24,9 @@ set(${MODULE_PREFIX}_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/addin.c + ${CMAKE_CURRENT_SOURCE_DIR}/addin.h) + ++if(CHANNEL_STATIC_CLIENT_ENTRIES) + list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES) ++endif() + + foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES}) + foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES}) +diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt +index 14ed363..b8b7699 100644 +--- a/client/CMakeLists.txt ++++ b/client/CMakeLists.txt +@@ -63,8 +63,8 @@ set(FILENAME "ModuleOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" FREERDP_CLIENT ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" FREERDP_CLIENT ${FILEPATH}) + set(FREERDP_CLIENT_ENABLED 0) + include(${FILEPATH}) + if(FREERDP_CLIENT_ENABLED) +diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt +index 75acf25..f82b6fe 100644 +--- a/server/CMakeLists.txt ++++ b/server/CMakeLists.txt +@@ -44,8 +44,8 @@ set(FILENAME "ModuleOptions.cmake") + file(GLOB FILEPATHS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/${FILENAME}") + + foreach(FILEPATH ${FILEPATHS}) +- if(${FILEPATH} MATCHES "^([^/]*)//${FILENAME}") +- string(REGEX REPLACE "^([^/]*)//${FILENAME}" "\\1" FREERDP_SERVER ${FILEPATH}) ++ if(${FILEPATH} MATCHES "^([^/]*)/+${FILENAME}") ++ string(REGEX REPLACE "^([^/]*)/+${FILENAME}" "\\1" FREERDP_SERVER ${FILEPATH}) + set(FREERDP_SERVER_ENABLED 0) + include(${FILEPATH}) + if(FREERDP_SERVER_ENABLED) +diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt +index 09b1fd4..610f35e 100644 +--- a/third-party/CMakeLists.txt ++++ b/third-party/CMakeLists.txt +@@ -22,11 +22,11 @@ + file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt") + + foreach(dir ${all_valid_subdirs}) +- if(${dir} MATCHES "^([^/]*)//CMakeLists.txt") +- string(REGEX REPLACE "^([^/]*)//CMakeLists.txt" "\\1" dir_trimmed ${dir}) ++ if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt") ++ string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir}) + message(STATUS "Adding third-party component ${dir_trimmed}") + add_subdirectory(${dir_trimmed}) + endif() + endforeach(dir) + +-set(THIRD_PARTY_INCLUDES ${THIRD_PARTY_INCLUDES} PARENT_SCOPE) +\ No newline at end of file ++set(THIRD_PARTY_INCLUDES ${THIRD_PARTY_INCLUDES} PARENT_SCOPE) diff --git a/community/freerdp/freerdp-fixes-since-24a752a.patch b/community/freerdp/freerdp-fixes-since-24a752a.patch new file mode 100644 index 0000000000..821f57b480 --- /dev/null +++ b/community/freerdp/freerdp-fixes-since-24a752a.patch @@ -0,0 +1,313 @@ +commit 7c3adc8449a4fe89920a6438206e8e2690d7f021 +Author: Armin Novak +Date: Mon Nov 17 00:21:04 2014 +0100 + + Fixed nonnull warning. +commit 232aa89efd13d21b2e5dca69e0aea70a03d09544 +Author: Armin Novak +Date: Mon Nov 17 00:22:33 2014 +0100 + + Fixed memory leak. +commit d9b889ddb7e466837e363b45ae6713c0bcf0f6db +Author: Armin Novak +Date: Mon Nov 17 00:33:37 2014 +0100 + + Fixed memory leak. +commit f34ee395eb9516bd1b91e25acc0fa73a574d531d +Author: Armin Novak +Date: Mon Nov 17 00:34:17 2014 +0100 + + Fixed memory leak. +commit c44f85c2b4e5455e5da1609d2b6d1a73a7ea2371 +Author: Armin Novak +Date: Mon Nov 17 00:42:05 2014 +0100 + + Fixed memory leak. +commit 7881ec762e6f9b51e24878f4c3ed5343a4e05509 +Author: Marc-André Moreau +Date: Fri Nov 21 15:10:39 2014 -0500 + + server/shadow: avoid sending pointer updates when not active, fix remdesk leak +commit 547054a48b83fe81917cb3b474116225e97d340f +Author: Armin Novak +Date: Sun Dec 7 00:23:46 2014 +0100 + + Fixed uninitialized value. +commit 43beef36ff1521756bc41378cfa251c843375f49 +Author: Bernhard Miklautz +Date: Fri Dec 12 18:57:40 2014 +0100 + + rdtk/shadow: install libraries versioned +diff --git a/channels/remdesk/server/remdesk_main.c b/channels/remdesk/server/remdesk_main.c +index 4a7670e..072eec2 100644 +--- a/channels/remdesk/server/remdesk_main.c ++++ b/channels/remdesk/server/remdesk_main.c +@@ -156,6 +156,8 @@ static int remdesk_send_ctl_version_info_pdu(RemdeskServerContext* context) + + remdesk_virtual_channel_write(context, s); + ++ Stream_Free(s, TRUE); ++ + return 1; + } + +diff --git a/client/common/cmdline.c b/client/common/cmdline.c +index f1f9640..a731c31 100644 +--- a/client/common/cmdline.c ++++ b/client/common/cmdline.c +@@ -2077,11 +2077,24 @@ int freerdp_client_load_addins(rdpChannels* channels, rdpSettings* settings) + } + } + ++ if (settings->LyncRdpMode) ++ { ++ settings->EncomspVirtualChannel = TRUE; ++ settings->RemdeskVirtualChannel = TRUE; ++ settings->CompressionEnabled = FALSE; ++ } ++ + if (settings->RemoteAssistanceMode) + { ++ settings->EncomspVirtualChannel = TRUE; ++ settings->RemdeskVirtualChannel = TRUE; ++ } ++ ++ if (settings->EncomspVirtualChannel) + freerdp_client_load_static_channel_addin(channels, settings, "encomsp", settings); ++ ++ if (settings->RemdeskVirtualChannel) + freerdp_client_load_static_channel_addin(channels, settings, "remdesk", settings); +- } + + for (index = 0; index < settings->StaticChannelCount; index++) + { +diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h +index a53c14d..ca358f1 100644 +--- a/include/freerdp/settings.h ++++ b/include/freerdp/settings.h +@@ -599,6 +599,9 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL; + #define FreeRDP_RemoteAssistancePassStub 1026 + #define FreeRDP_RemoteAssistancePassword 1027 + #define FreeRDP_RemoteAssistanceRCTicket 1028 ++#define FreeRDP_EncomspVirtualChannel 1029 ++#define FreeRDP_RemdeskVirtualChannel 1030 ++#define FreeRDP_LyncRdpMode 1031 + #define FreeRDP_TlsSecurity 1088 + #define FreeRDP_NlaSecurity 1089 + #define FreeRDP_RdpSecurity 1090 +@@ -971,7 +974,10 @@ struct rdp_settings + ALIGN64 char* RemoteAssistancePassStub; /* 1026 */ + ALIGN64 char* RemoteAssistancePassword; /* 1027 */ + ALIGN64 char* RemoteAssistanceRCTicket; /* 1028 */ +- UINT64 padding1088[1088 - 1029]; /* 1029 */ ++ ALIGN64 BOOL EncomspVirtualChannel; /* 1029 */ ++ ALIGN64 BOOL RemdeskVirtualChannel; /* 1030 */ ++ ALIGN64 BOOL LyncRdpMode; /* 1031 */ ++ UINT64 padding1088[1088 - 1032]; /* 1032 */ + + /** + * X.224 Connection Request/Confirm +diff --git a/rdtk/CMakeLists.txt b/rdtk/CMakeLists.txt +index 35b0052..93c5a3c 100644 +--- a/rdtk/CMakeLists.txt ++++ b/rdtk/CMakeLists.txt +@@ -44,8 +44,9 @@ include(CMakePackageConfigHelpers) + set(RDTK_VERSION_MAJOR "1") + set(RDTK_VERSION_MINOR "1") + set(RDTK_VERSION_REVISION "0") +-set(RDTK_VERSION "${RDTK_VERSION_MAJOR}.${RDTK_VERSION_MINOR}") +-set(RDTK_VERSION_FULL "${RDTK_VERSION}.${RDTK_VERSION_REVISION}") ++set(RDTK_API_VERSION "${RDTK_VERSION_MAJOR}.${RDTK_VERSION_MINOR}") ++set(RDTK_VERSION "${RDTK_API_VERSION}.${RDTK_VERSION_REVISION}") ++set(RDTK_VERSION_FULL "${RDTK_VERSION}") + set(RDTK_VERSION_FULL ${RDTK_VERSION_FULL} PARENT_SCOPE) + + # Default to release build type +diff --git a/rdtk/librdtk/CMakeLists.txt b/rdtk/librdtk/CMakeLists.txt +index 8a81964..950cc7d 100644 +--- a/rdtk/librdtk/CMakeLists.txt ++++ b/rdtk/librdtk/CMakeLists.txt +@@ -58,6 +58,10 @@ add_library(${MODULE_NAME} ${${MODULE_PREFIX}_SRCS}) + list(APPEND ${MODULE_PREFIX}_LIBS winpr) + list(APPEND ${MODULE_PREFIX}_LIBS freerdp) + ++if (WITH_LIBRARY_VERSIONING) ++ set_target_properties(${MODULE_NAME} PROPERTIES VERSION ${RDTK_VERSION} SOVERSION ${RDTK_API_VERSION}) ++endif() ++ + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) + + install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT RdTkTargets) +diff --git a/server/shadow/CMakeLists.txt b/server/shadow/CMakeLists.txt +index 78f85b0..26a5c7b 100644 +--- a/server/shadow/CMakeLists.txt ++++ b/server/shadow/CMakeLists.txt +@@ -238,6 +238,10 @@ list(APPEND ${MODULE_PREFIX}_LIBS rdtk) + + target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) + ++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) + + set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Server/shadow") +diff --git a/server/shadow/X11/x11_shadow.c b/server/shadow/X11/x11_shadow.c +index 3f1a964..d1a8591 100644 +--- a/server/shadow/X11/x11_shadow.c ++++ b/server/shadow/X11/x11_shadow.c +@@ -386,7 +386,10 @@ int x11_shadow_pointer_alpha_update(x11ShadowSubsystem* subsystem) + msg->pixels = (BYTE*) malloc(msg->scanline * msg->height); + + if (!msg->pixels) ++ { ++ free (msg); + return -1; ++ } + + CopyMemory(msg->pixels, subsystem->cursorPixels, msg->scanline * msg->height); + msg->premultiplied = TRUE; +diff --git a/server/shadow/shadow_client.c b/server/shadow/shadow_client.c +index 63d0b9e..30ab90e 100644 +--- a/server/shadow/shadow_client.c ++++ b/server/shadow/shadow_client.c +@@ -67,6 +67,12 @@ void shadow_client_context_new(freerdp_peer* peer, rdpShadowClient* client) + + settings->RdpKeyFile = _strdup(settings->PrivateKeyFile); + ++ if (server->ipcSocket) ++ { ++ settings->LyncRdpMode = TRUE; ++ settings->CompressionEnabled = FALSE; ++ } ++ + client->inLobby = TRUE; + client->mayView = server->mayView; + client->mayInteract = server->mayInteract; +@@ -217,8 +223,12 @@ void shadow_client_refresh_rect(rdpShadowClient* client, BYTE count, RECTANGLE_1 + + wParam = (SHADOW_MSG_IN_REFRESH_OUTPUT*) calloc(1, sizeof(SHADOW_MSG_IN_REFRESH_OUTPUT)); + +- if (!wParam) ++ if (!wParam || !areas) ++ { ++ if (wParam) ++ free (wParam); + return; ++ } + + wParam->numRects = (UINT32) count; + +@@ -227,7 +237,10 @@ void shadow_client_refresh_rect(rdpShadowClient* client, BYTE count, RECTANGLE_1 + wParam->rects = (RECTANGLE_16*) calloc(wParam->numRects, sizeof(RECTANGLE_16)); + + if (!wParam->rects) ++ { ++ free (wParam); + return; ++ } + } + + CopyMemory(wParam->rects, areas, wParam->numRects * sizeof(RECTANGLE_16)); +@@ -832,12 +845,15 @@ int shadow_client_subsystem_process_message(rdpShadowClient* client, wMessage* m + pointerPosition.xPos = msg->xPos; + pointerPosition.yPos = msg->yPos; + +- if ((msg->xPos != client->pointerX) || (msg->yPos != client->pointerY)) ++ if (client->activated) + { +- IFCALL(update->pointer->PointerPosition, context, &pointerPosition); ++ if ((msg->xPos != client->pointerX) || (msg->yPos != client->pointerY)) ++ { ++ IFCALL(update->pointer->PointerPosition, context, &pointerPosition); + +- client->pointerX = msg->xPos; +- client->pointerY = msg->yPos; ++ client->pointerX = msg->xPos; ++ client->pointerY = msg->yPos; ++ } + } + + free(msg); +@@ -862,14 +878,17 @@ int shadow_client_subsystem_process_message(rdpShadowClient* client, wMessage* m + + pointerCached.cacheIndex = pointerColor->cacheIndex; + +- shadow_client_convert_alpha_pointer_data(msg->pixels, msg->premultiplied, +- msg->width, msg->height, pointerColor); ++ if (client->activated) ++ { ++ shadow_client_convert_alpha_pointer_data(msg->pixels, msg->premultiplied, ++ msg->width, msg->height, pointerColor); + +- IFCALL(update->pointer->PointerNew, context, &pointerNew); +- IFCALL(update->pointer->PointerCached, context, &pointerCached); ++ IFCALL(update->pointer->PointerNew, context, &pointerNew); ++ IFCALL(update->pointer->PointerCached, context, &pointerCached); + +- free(pointerColor->xorMaskData); +- free(pointerColor->andMaskData); ++ free(pointerColor->xorMaskData); ++ free(pointerColor->andMaskData); ++ } + + free(msg->pixels); + free(msg); +diff --git a/server/shadow/shadow_encoder.c b/server/shadow/shadow_encoder.c +index 1e200ee..8d449bf 100644 +--- a/server/shadow/shadow_encoder.c ++++ b/server/shadow/shadow_encoder.c +@@ -407,7 +407,10 @@ rdpShadowEncoder* shadow_encoder_new(rdpShadowClient* client) + encoder->height = server->screen->height; + + if (shadow_encoder_init(encoder) < 0) ++ { ++ free (encoder); + return NULL; ++ } + + return encoder; + } +diff --git a/server/shadow/shadow_subsystem.c b/server/shadow/shadow_subsystem.c +index f0ed9b8..ac4fd70 100644 +--- a/server/shadow/shadow_subsystem.c ++++ b/server/shadow/shadow_subsystem.c +@@ -93,11 +93,11 @@ int shadow_subsystem_load_entry_points(RDP_SHADOW_ENTRY_POINTS* pEntryPoints, co + + entry = shadow_subsystem_load_static_entry(name); + ++ ZeroMemory(pEntryPoints, sizeof(RDP_SHADOW_ENTRY_POINTS)); ++ + if (!entry) + return -1; + +- ZeroMemory(pEntryPoints, sizeof(RDP_SHADOW_ENTRY_POINTS)); +- + if (entry(pEntryPoints) < 0) + return -1; + +diff --git a/server/shadow/shadow_surface.c b/server/shadow/shadow_surface.c +index 9c58142..4c13662 100644 +--- a/server/shadow/shadow_surface.c ++++ b/server/shadow/shadow_surface.c +@@ -44,12 +44,19 @@ rdpShadowSurface* shadow_surface_new(rdpShadowServer* server, int x, int y, int + surface->data = (BYTE*) malloc(surface->scanline * surface->height); + + if (!surface->data) ++ { ++ free (surface); + return NULL; ++ } + + ZeroMemory(surface->data, surface->scanline * surface->height); + + if (!InitializeCriticalSectionAndSpinCount(&(surface->lock), 4000)) ++ { ++ free (surface->data); ++ free (surface); + return NULL; ++ } + + region16_init(&(surface->invalidRegion)); + diff --git a/community/freerdp/libressl-2.5.patch b/community/freerdp/libressl-2.5.patch new file mode 100644 index 0000000000..347b0d1add --- /dev/null +++ b/community/freerdp/libressl-2.5.patch @@ -0,0 +1,16 @@ +diff --git a/libfreerdp/crypto/tls.c b/libfreerdp/crypto/tls.c +index 1b9d165..e76c78c 100644 +--- a/libfreerdp/crypto/tls.c ++++ b/libfreerdp/crypto/tls.c +@@ -220,9 +220,9 @@ static long bio_rdp_tls_ctrl(BIO* bio, int cmd, long num, void* ptr) + case BIO_CTRL_RESET: + SSL_shutdown(tls->ssl); + +- if (tls->ssl->handshake_func == tls->ssl->method->ssl_connect) ++ if (SSL_in_connect_init(tls->ssl)) + SSL_set_connect_state(tls->ssl); +- else if (tls->ssl->handshake_func == tls->ssl->method->ssl_accept) ++ else if (SSL_in_accept_init(tls->ssl)) + SSL_set_accept_state(tls->ssl); + + SSL_clear(tls->ssl); diff --git a/community/freerdp/musl-fix.patch b/community/freerdp/musl-fix.patch new file mode 100644 index 0000000000..ffc2e4ad3f --- /dev/null +++ b/community/freerdp/musl-fix.patch @@ -0,0 +1,47 @@ +--- ./winpr/libwinpr/synch/wait.c.orig ++++ ./winpr/libwinpr/synch/wait.c +@@ -109,12 +109,7 @@ + #if !defined(HAVE_PTHREAD_GNU_EXT) + #include + +-#if defined(__FreeBSD__) +-/*the only way to get it work is to remove the static*/ + int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *timeout) +-#else +-static int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *timeout) +-#endif + { + struct timespec timenow; + struct timespec sleepytime; +--- ./winpr/libwinpr/comm/comm_serial_sys.c.orig ++++ ./winpr/libwinpr/comm/comm_serial_sys.c +@@ -42,6 +42,9 @@ + #define TTY_THRESHOLD_UNTHROTTLE 128 + #define N_TTY_BUF_SIZE 4096 + ++#ifndef CMSPAR ++#define CMSPAR 010000000000 ++#endif + + #define _BAUD_TABLE_END 0010020 /* __MAX_BAUD + 1 */ + +--- ./winpr/libwinpr/synch/wait.c.orig ++++ ./winpr/libwinpr/synch/wait.c +@@ -24,6 +24,7 @@ + #ifdef HAVE_UNISTD_H + #include + #endif ++#include + + #include + #include +--- ./winpr/libwinpr/comm/comm_io.c.orig ++++ ./winpr/libwinpr/comm/comm_io.c +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + + #include + #include -- cgit v1.2.3