diff --git a/.gitignore b/.gitignore index e69de29..2724a59 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/1.2.0-beta1+android9.tar.gz diff --git a/compat-freerdp12.spec b/compat-freerdp12.spec new file mode 100644 index 0000000..77700b6 --- /dev/null +++ b/compat-freerdp12.spec @@ -0,0 +1,146 @@ +Name: compat-freerdp12 +Version: 1.2.0 +Release: 3%{?dist} +Summary: Compatibility version of the FreeRDP client libraries +License: ASL 2.0 +URL: http://www.freerdp.com/ + +Source0: https://github.com/FreeRDP/FreeRDP/archive/%{version}-beta1+android9.tar.gz + +Patch0: freerdp-aarch64.patch +# https://github.com/FreeRDP/FreeRDP/commit/1b663ceffe51008af7ae9749e5b7999b2f7d6698 +Patch1: freerdp-cmake-list.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1150349 +# https://github.com/FreeRDP/FreeRDP/pull/2310 +Patch2: freerdp-args.patch +Patch3: freerdp-rpmlint.patch + +BuildRequires: alsa-lib-devel +BuildRequires: cmake >= 2.8 +BuildRequires: cups-devel +BuildRequires: gsm-devel +BuildRequires: gstreamer1-devel +BuildRequires: gstreamer1-plugins-base-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: libX11-devel +BuildRequires: libXcursor-devel +BuildRequires: libXdamage-devel +BuildRequires: libXext-devel +BuildRequires: libXi-devel +BuildRequires: libXinerama-devel +BuildRequires: libxkbfile-devel +BuildRequires: libXrandr-devel +BuildRequires: libXv-devel +BuildRequires: pcsc-lite-devel +BuildRequires: pulseaudio-libs-devel +BuildRequires: xmlto +BuildRequires: zlib-devel + +%if 0%{?fedora} >= 26 +BuildRequires: compat-openssl10-devel +%else +BuildRequires: openssl-devel +%endif + +%description +Free implementation of the Remote Desktop Protocol (RDP) protocol. +This compatibility package only contains client libraries. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{?epoch}:%{version}-%{release} +Requires: pkgconfig +Requires: cmake >= 2.8 + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}-libs. + +%prep +%autosetup -p1 -n FreeRDP-%{version}-beta1-android9 + +# Rpmlint fixes +find . -name "*.h" -exec chmod 664 {} \; + +%build +export CFLAGS="%{optflags} -Wl,--as-needed" +%cmake %{?_cmake_skip_rpath} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_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=ON \ + -DWITH_PULSE=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 \ +%ifarch x86_64 + -DWITH_SSE2=ON \ +%else + -DWITH_SSE2=OFF \ +%endif +%ifarch armv7hl + -DARM_FP_ABI=hard \ + -DWITH_NEON=OFF \ +%endif +%ifarch armv7hnl + -DARM_FP_ABI=hard \ + -DWITH_NEON=ON \ +%endif +%ifarch armv5tel armv6l armv7l + -DARM_FP_ABI=soft \ + -DWITH_NEON=OFF \ +%endif +%ifarch aarch64 + -DWITH_SSE2=OFF \ +%endif + . + +%make_build + +%install +%make_install +find %{buildroot} -name "*.a" -delete + +rm -fr %{buildroot}%{_bindir} %{buildroot}%{_mandir} + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%license LICENSE +%doc README ChangeLog +%{_libdir}/freerdp/ +%{_libdir}/*.so.* + +%files devel +%{_libdir}/cmake/FreeRDP +%{_libdir}/cmake/WinPR +%{_includedir}/freerdp +%{_includedir}/winpr +%{_libdir}/*.so +%{_libdir}/pkgconfig/*.pc + +%changelog +* Mon Mar 06 2017 Simone Caronni - 1.2.0-3 +- rpmlint fixes, use make_build macro. + +* Fri Mar 03 2017 Simone Caronni - 1.2.0-2 +- Link libraries as needed, add license macro, use autosetup macro. + +* Thu Mar 02 2017 Simone Caronni - 1.2.0-1 +- First build based on the last useful commit of the 1.2.0 packages. diff --git a/freerdp-aarch64.patch b/freerdp-aarch64.patch new file mode 100644 index 0000000..a131c2f --- /dev/null +++ b/freerdp-aarch64.patch @@ -0,0 +1,21 @@ +--- freerdp-1.1.0-beta+2013071101/cmake/ConfigOptions.cmake.orig 2014-06-07 20:34:55.607853558 +0100 ++++ freerdp-1.1.0-beta+2013071101/cmake/ConfigOptions.cmake 2014-06-07 20:36:29.987547540 +0100 +@@ -6,6 +6,8 @@ + elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "i386") AND (CMAKE_SIZEOF_VOID_P EQUAL 8) AND (APPLE)) + # Mac is weird like that. + set(TARGET_ARCH "x64") ++elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") ++ set(TARGET_ARCH "AARCH64") + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm*") + set(TARGET_ARCH "ARM") + endif() +@@ -19,6 +21,9 @@ + option(WITH_SSE2 "Enable SSE2 optimization." OFF) + endif() + ++if(TARGET_ARCH MATCHES "AARCH64") ++endif() ++ + if(TARGET_ARCH MATCHES "ARM") + if (NOT DEFINED WITH_NEON) + option(WITH_NEON "Enable NEON optimization." ON) diff --git a/freerdp-args.patch b/freerdp-args.patch new file mode 100644 index 0000000..efedc4c --- /dev/null +++ b/freerdp-args.patch @@ -0,0 +1,184 @@ +diff -up FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c.args FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c +--- FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c.args 2015-01-15 14:38:15.573870682 -0700 ++++ FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c 2015-01-15 14:51:29.640391722 -0700 +@@ -1087,8 +1087,10 @@ BOOL freerdp_client_detect_command_line( + *flags |= COMMAND_LINE_SIGIL_DASH | COMMAND_LINE_SIGIL_DOUBLE_DASH; + *flags |= COMMAND_LINE_SIGIL_ENABLE_DISABLE; + +- 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 -up FreeRDP-1.2.0-beta1-android9/client/common/compatibility.c.args FreeRDP-1.2.0-beta1-android9/client/common/compatibility.c +--- FreeRDP-1.2.0-beta1-android9/client/common/compatibility.c.args 2014-09-11 16:46:32.000000000 -0600 ++++ FreeRDP-1.2.0-beta1-android9/client/common/compatibility.c 2015-01-15 14:53:19.418773129 -0700 +@@ -119,16 +119,20 @@ void freerdp_client_old_parse_hostname(c + + 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; + DEBUG_WARN( "--plugin cliprdr -> +clipboard\n"); + } + 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)) + { +@@ -156,21 +160,26 @@ int freerdp_client_old_process_plugin(rd + } + 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 +@@ -178,14 +187,12 @@ int freerdp_client_old_process_plugin(rd + 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)) + { +@@ -201,11 +208,10 @@ int freerdp_client_old_command_line_pre_ + 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 + { +@@ -215,6 +221,7 @@ int freerdp_client_old_command_line_pre_ + + if (strcmp("--plugin", argv[index]) == 0) + { ++ int args_handled = 0; + int length; + char *a, *p; + int i, j, t; +@@ -230,20 +237,19 @@ int freerdp_client_old_command_line_pre_ + 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++) + { +@@ -264,6 +270,9 @@ int freerdp_client_old_command_line_pre_ + 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); +@@ -278,11 +287,14 @@ int freerdp_client_old_command_line_pre_ + 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++; + } +@@ -291,19 +303,16 @@ int freerdp_client_old_command_line_pre_ + { + 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/freerdp-cmake-list.patch b/freerdp-cmake-list.patch new file mode 100644 index 0000000..332a331 --- /dev/null +++ b/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 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/freerdp-rpmlint.patch b/freerdp-rpmlint.patch new file mode 100644 index 0000000..e3bc7a2 --- /dev/null +++ b/freerdp-rpmlint.patch @@ -0,0 +1,23 @@ +diff -Naur FreeRDP-1.2.0-beta1-android9.old/libfreerdp/core/peer.c FreeRDP-1.2.0-beta1-android9/libfreerdp/core/peer.c +--- FreeRDP-1.2.0-beta1-android9.old/libfreerdp/core/peer.c 2014-09-12 00:46:32.000000000 +0200 ++++ FreeRDP-1.2.0-beta1-android9/libfreerdp/core/peer.c 2017-03-03 09:18:20.142741246 +0100 +@@ -58,7 +58,6 @@ + { + DEBUG_WARN( "%s: Key sizes > 2048 are currently not supported for RDP security.\n", __FUNCTION__); + DEBUG_WARN( "%s: Set a different key file than %s\n", __FUNCTION__, settings->RdpKeyFile); +- exit(1); + } + } + +diff -Naur FreeRDP-1.2.0-beta1-android9.old/client/common/cmdline.c FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c +--- FreeRDP-1.2.0-beta1-android9.old/client/common/cmdline.c 2017-03-06 14:24:08.262302914 +0100 ++++ FreeRDP-1.2.0-beta1-android9/client/common/cmdline.c 2017-03-06 14:24:42.574740832 +0100 +@@ -1758,7 +1758,7 @@ + } + CommandLineSwitchCase(arg, "tls-ciphers-netmon") + { +- settings->PermittedTLSCiphers = arg->Value ? _strdup("ALL:!ECDH") : NULL; ++ settings->PermittedTLSCiphers = arg->Value ? _strdup("PROFILE=SYSTEM") : NULL; + } + CommandLineSwitchCase(arg, "cert-name") + { diff --git a/sources b/sources index e69de29..6efd6e8 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +SHA512 (1.2.0-beta1+android9.tar.gz) = e6339e9b2f2fffcbc190d1879245d5d83599b998a81ec58d675dfa0dae0c34575a373a5be4c14c54edb0ad3bfb011272df2a6a32d8aa9ca18b227dbb410196db