From 9914081155b31f1c367d4bb2b8018772baabd39d Mon Sep 17 00:00:00 2001 From: Bobby Rong Date: Mon, 26 Feb 2024 22:09:52 +0800 Subject: [PATCH] freerdp3: init at 3.4.0 Non-maintainer upload. Did not test. Mostly based on changes in `packaging/rpm/freerdp-nightly.spec`. ref: https://github.com/NixOS/nixpkgs/commit/8032bb61739460d5d743c01bde194db1f839c866 --- .../networking/remote/freerdp/3.nix | 209 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 17 +- 2 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 pkgs/applications/networking/remote/freerdp/3.nix diff --git a/pkgs/applications/networking/remote/freerdp/3.nix b/pkgs/applications/networking/remote/freerdp/3.nix new file mode 100644 index 000000000000..45bb8db9d9d8 --- /dev/null +++ b/pkgs/applications/networking/remote/freerdp/3.nix @@ -0,0 +1,209 @@ +{ stdenv +, lib +, fetchFromGitHub +, cmake +, docbook-xsl-nons +, libxslt +, pkg-config +, alsa-lib +, faac +, faad2 +, ffmpeg +, fuse3 +, glib +, openh264 +, openssl +, p11-kit +, pcre2 +, pkcs11helper +, uriparser +, zlib +, libX11 +, libXcursor +, libXdamage +, libXdmcp +, libXext +, libXi +, libXinerama +, libXrandr +, libXrender +, libXtst +, libXv +, libxkbcommon +, libxkbfile +, wayland +, wayland-scanner +, icu +, libunwind +, orc +, cairo +, cjson +, libusb1 +, libpulseaudio +, cups +, pcsclite +, SDL2 +, SDL2_ttf +, SDL2_image +, systemd +, libjpeg_turbo +, libkrb5 +, libopus +, buildServer ? true +, nocaps ? false +, AudioToolbox +, AVFoundation +, Carbon +, Cocoa +, CoreMedia +, withUnfree ? false + + # tries to compile and run generate_argument_docbook.c +, withManPages ? stdenv.buildPlatform.canExecute stdenv.hostPlatform + +, buildPackages +}: + +let + cmFlag = flag: if flag then "ON" else "OFF"; +in +stdenv.mkDerivation (finalAttrs: { + pname = "freerdp"; + version = "3.4.0"; + + src = fetchFromGitHub { + owner = "FreeRDP"; + repo = "FreeRDP"; + rev = finalAttrs.version; + hash = "sha256-ZOYHhldTdV8DrOHoXS42NXB6JHBJMGRswgTczn1S6BE="; + }; + + postPatch = '' + export HOME=$TMP + + # skip NIB file generation on darwin + substituteInPlace "client/Mac/CMakeLists.txt" "client/Mac/cli/CMakeLists.txt" \ + --replace-fail "if (NOT IS_XCODE)" "if (FALSE)" + + substituteInPlace "libfreerdp/freerdp.pc.in" \ + --replace-fail "Requires:" "Requires: @WINPR_PKG_CONFIG_FILENAME@" + '' + lib.optionalString (pcsclite != null) '' + substituteInPlace "winpr/libwinpr/smartcard/smartcard_pcsc.c" \ + --replace-fail "libpcsclite.so" "${lib.getLib pcsclite}/lib/libpcsclite.so" + '' + lib.optionalString nocaps '' + substituteInPlace "libfreerdp/locale/keyboard_xkbfile.c" \ + --replace-fail "RDP_SCANCODE_CAPSLOCK" "RDP_SCANCODE_LCONTROL" + ''; + + nativeBuildInputs = [ + cmake + libxslt + docbook-xsl-nons + pkg-config + wayland-scanner + ]; + + buildInputs = [ + cairo + cjson + cups + faad2 + ffmpeg + glib + icu + libX11 + libXcursor + libXdamage + libXdmcp + libXext + libXi + libXinerama + libXrandr + libXrender + libXtst + libXv + libjpeg_turbo + libkrb5 + libopus + libpulseaudio + libunwind + libusb1 + libxkbcommon + libxkbfile + openh264 + openssl + orc + pcre2 + pcsclite + pkcs11helper + SDL2 + SDL2_ttf + SDL2_image + uriparser + zlib + ] ++ lib.optionals stdenv.isLinux [ + alsa-lib + fuse3 + systemd + wayland + ] ++ lib.optionals stdenv.isDarwin [ + AudioToolbox + AVFoundation + Carbon + Cocoa + CoreMedia + ] ++ lib.optionals withUnfree [ + faac + ]; + + # https://github.com/FreeRDP/FreeRDP/issues/8526#issuecomment-1357134746 + cmakeFlags = [ + "-Wno-dev" + "-DCMAKE_INSTALL_LIBDIR=lib" + "-DDOCBOOKXSL_DIR=${docbook-xsl-nons}/xml/xsl/docbook" + "-DWAYLAND_SCANNER=${buildPackages.wayland-scanner}/bin/wayland-scanner" + ] ++ lib.mapAttrsToList (k: v: "-D${k}=${cmFlag v}") { + BUILD_TESTING = false; # false is recommended by upstream + WITH_CAIRO = (cairo != null); + WITH_CUPS = (cups != null); + WITH_FAAC = (withUnfree && faac != null); + WITH_FAAD2 = (faad2 != null); + WITH_FUSE = (stdenv.isLinux && fuse3 != null); + WITH_JPEG = (libjpeg_turbo != null); + WITH_KRB5 = (libkrb5 != null); + WITH_OPENH264 = (openh264 != null); + WITH_OPUS = (libopus != null); + WITH_OSS = false; + WITH_MANPAGES = withManPages; + WITH_PCSC = (pcsclite != null); + WITH_PULSE = (libpulseaudio != null); + WITH_SERVER = buildServer; + WITH_WEBVIEW = false; # avoid introducing webkit2gtk-4.0 + WITH_VAAPI = false; # false is recommended by upstream + WITH_X11 = true; + }; + + env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [ + "-DTARGET_OS_IPHONE=0" + "-DTARGET_OS_WATCH=0" + "-include AudioToolbox/AudioToolbox.h" + ] ++ lib.optionals stdenv.cc.isClang [ + "-Wno-error=incompatible-function-pointer-types" + ]); + + env.NIX_LDFLAGS = toString (lib.optionals stdenv.isDarwin [ + "-framework AudioToolbox" + ]); + + meta = with lib; { + description = "A Remote Desktop Protocol Client"; + longDescription = '' + FreeRDP is a client-side implementation of the Remote Desktop Protocol (RDP) + following the Microsoft Open Specifications. + ''; + homepage = "https://www.freerdp.com/"; + license = licenses.asl20; + maintainers = with maintainers; [ peterhoeg lheckemann ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9eeca4e65e44..7d6ad9c7dc3b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -31390,10 +31390,19 @@ with pkgs; pulseaudio-module-xrdp = callPackage ../applications/networking/remote/xrdp/pulseaudio-module-xrdp { }; - freerdp = callPackage ../applications/networking/remote/freerdp { - inherit (darwin.apple_sdk.frameworks) AudioToolbox AVFoundation Carbon Cocoa CoreMedia; - inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-good; - }; + inherit + ({ + freerdp = callPackage ../applications/networking/remote/freerdp { + inherit (darwin.apple_sdk.frameworks) AudioToolbox AVFoundation Carbon Cocoa CoreMedia; + inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-good; + }; + freerdp3 = callPackage ../applications/networking/remote/freerdp/3.nix { + inherit (darwin.apple_sdk.frameworks) AudioToolbox AVFoundation Carbon Cocoa CoreMedia; + }; + }) + freerdp + freerdp3 + ; freerdpUnstable = freerdp;