diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/freerdp | |
Diffstat (limited to 'vcpkg/ports/freerdp')
| -rw-r--r-- | vcpkg/ports/freerdp/cmake-project-include.cmake | 9 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/dependencies.patch | 22 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/ffmpeg.diff | 17 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/install-layout.patch | 20 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/portfile.cmake | 156 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/vcpkg.json | 74 | ||||
| -rw-r--r-- | vcpkg/ports/freerdp/windows-linkage.patch | 14 |
7 files changed, 312 insertions, 0 deletions
diff --git a/vcpkg/ports/freerdp/cmake-project-include.cmake b/vcpkg/ports/freerdp/cmake-project-include.cmake new file mode 100644 index 0000000..725148e --- /dev/null +++ b/vcpkg/ports/freerdp/cmake-project-include.cmake @@ -0,0 +1,9 @@ +find_package(PkgConfig REQUIRED) +if(CHANNEL_URBDRC) + pkg_check_modules(vcpkg_libusb REQUIRED libusb-1.0) + set(LIBUSB_1_INCLUDE_DIR "${vcpkg_libusb_INCLUDE_DIRS}") + set(LIBUSB_1_LIBRARY "${vcpkg_libusb_LINK_LIBRARIES}") + string(REPLACE "-Wl,-framework," "-framework " libusb_frameworks "${vcpkg_libusb_LDFLAGS}") + list(FILTER libusb_frameworks INCLUDE REGEX "^-framework ") + list(APPEND LIBUSB_1_LIBRARY ${libusb_frameworks}) +endif() diff --git a/vcpkg/ports/freerdp/dependencies.patch b/vcpkg/ports/freerdp/dependencies.patch new file mode 100644 index 0000000..f404569 --- /dev/null +++ b/vcpkg/ports/freerdp/dependencies.patch @@ -0,0 +1,22 @@ +diff --git a/cmake/FindFeature.cmake b/cmake/FindFeature.cmake +index 11bd9f1..231dcf4 100644 +--- a/cmake/FindFeature.cmake ++++ b/cmake/FindFeature.cmake +@@ -15,7 +15,7 @@ macro(find_feature _feature _type _purpose _description) + set(_feature_default "ON") + message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})") + find_package(${_feature} REQUIRED) +- elseif(${_type} STREQUAL "RECOMMENDED") ++ elseif(0) + if(NOT ${WITH_${_feature_upper}}) + set(_feature_default "OFF") + message(STATUS "Skipping ${_type_lower} feature ${_feature} for ${_purpose} (${_description})") +@@ -31,7 +31,7 @@ macro(find_feature _feature _type _purpose _description) + ) + endif() + endif() +- elseif(${_type} STREQUAL "OPTIONAL") ++ elseif(1) + if(${WITH_${_feature_upper}}) + set(_feature_default "ON") + message(STATUS "Finding ${_type_lower} feature ${_feature} for ${_purpose} (${_description})") diff --git a/vcpkg/ports/freerdp/ffmpeg.diff b/vcpkg/ports/freerdp/ffmpeg.diff new file mode 100644 index 0000000..2e1fdfa --- /dev/null +++ b/vcpkg/ports/freerdp/ffmpeg.diff @@ -0,0 +1,17 @@ +diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake +index 0e5f7be..af23774 100644 +--- a/cmake/FindFFmpeg.cmake ++++ b/cmake/FindFFmpeg.cmake +@@ -86,7 +86,11 @@ endmacro() + # include directories. + # + macro(find_component _component _pkgconfig _library _header) +- if(NOT WIN32) ++ find_package(PkgConfig) ++ pkg_check_modules(PC_${_component} ${_pkgconfig}) ++ set(${_component}_INCLUDE_DIRS "${PC_${_component}_INCLUDE_DIRS}" CACHE STRING "") ++ set(${_component}_LIBRARIES "${PC_${_component}_LINK_LIBRARIES}" CACHE STRING "") ++ if(0) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + find_package(PkgConfig) diff --git a/vcpkg/ports/freerdp/install-layout.patch b/vcpkg/ports/freerdp/install-layout.patch new file mode 100644 index 0000000..8514875 --- /dev/null +++ b/vcpkg/ports/freerdp/install-layout.patch @@ -0,0 +1,20 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 04ab111..9ae59af 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -483,12 +483,12 @@ endif() + option(WITH_ABSOLUTE_PLUGIN_LOAD_PATHS "Load plugins with absolute paths" ${PLUGIN_ABS_PATHS_DEFAULT}) + + if(NOT WITH_ABSOLUTE_PLUGIN_LOAD_PATHS) +- set(FREERDP_DATA_PATH "share") ++ set(FREERDP_DATA_PATH "share/freerdp") + if(NOT FREERDP_INSTALL_PREFIX) + set(FREERDP_INSTALL_PREFIX ".") + endif() +- set(FREERDP_LIBRARY_PATH ".") +- set(FREERDP_PLUGIN_PATH ".") ++ set(FREERDP_LIBRARY_PATH "${CMAKE_INSTALL_LIBDIR}") ++ set(FREERDP_PLUGIN_PATH "${CMAKE_INSTALL_LIBDIR}/freerdp${FREERDP_VERSION_MAJOR}") + else() + set(FREERDP_DATA_PATH "${CMAKE_INSTALL_PREFIX}/share/${FREERDP_MAJOR_DIR}") + if(NOT FREERDP_INSTALL_PREFIX) diff --git a/vcpkg/ports/freerdp/portfile.cmake b/vcpkg/ports/freerdp/portfile.cmake new file mode 100644 index 0000000..5c8f998 --- /dev/null +++ b/vcpkg/ports/freerdp/portfile.cmake @@ -0,0 +1,156 @@ +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO FreeRDP/FreeRDP + REF "${VERSION}" + SHA512 644a22f011fd31f2d91e73e26f0b4cfc1e9f8cf862440b08a9a81a5a94e921aeeb1dde2be24d6a9395e355d0ccbe89fd369b0cf7bb45582c2eb6f741036da775 + HEAD_REF master + PATCHES + dependencies.patch + ffmpeg.diff + install-layout.patch + windows-linkage.patch +) +file(WRITE "${SOURCE_PATH}/.source_version" "${VERSION}-vcpkg") +file(WRITE "${SOURCE_PATH}/CMakeCPack.cmake" "") + +if("x11" IN_LIST FEATURES) + message(STATUS "${PORT} currently requires the following libraries from the system package manager:\n libxfixes-dev\n") +endif() + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + client WITH_CLIENT + ffmpeg WITH_DSP_FFMPEG + ffmpeg WITH_FFMPEG + ffmpeg WITH_SWSCALE + server WITH_SERVER + urbdrc CHANNEL_URBDRC + winpr-tools WITH_WINPR_TOOLS + x11 WITH_X11 + x11 VCPKG_LOCK_FIND_PACKAGE_X11 +) + +if("client" IN_LIST FEATURES) + # Xcode dependency and untested installation paths + if(VCPKG_TARGET_IS_IOS) + message(STATUS "Not building native client components.") + list(APPEND FEATURE_OPTIONS -DWITH_CLIENT_IOS=OFF) + elseif(VCPKG_TARGET_IS_OSX) + message(STATUS "Not building native client components.") + list(APPEND FEATURE_OPTIONS -DWITH_CLIENT_MAC=OFF) + endif() +endif() + +set(HAS_SHADOW_SUBSYSTEM ON) + +if("server" IN_LIST FEATURES) + # actual shadow platform subsystem + if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_WINDOWS # implementation unmaintained + OR NOT WITH_X11) # dependency + set(HAS_SHADOW_SUBSYSTEM OFF) + endif() + # actual platform server implementation + if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_WINDOWS) # implementation unmaintained + list(APPEND FEATURE_OPTIONS -DWITH_PLATFORM_SERVER=OFF) + endif() +endif() + +if (NOT HAS_SHADOW_SUBSYSTEM) + list(APPEND FEATURE_OPTIONS -DWITH_SHADOW_SUBSYSTEM=OFF -DWITH_SERVER_SHADOW_CLI=OFF) +endif() + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + ${GENERATOR_OPTION} + OPTIONS + ${FEATURE_OPTIONS} + "-DCMAKE_PROJECT_INCLUDE=${CMAKE_CURRENT_LIST_DIR}/cmake-project-include.cmake" + -DCMAKE_REQUIRE_FIND_PACKAGE_cJSON=ON + -DUSE_VERSION_FROM_GIT_TAG=OFF + -DWITH_ABSOLUTE_PLUGIN_LOAD_PATHS=OFF + -DWITH_AAD=ON + -DWITH_CCACHE=OFF + -DWITH_CLANG_FORMAT=OFF + -DWITH_MANPAGES=OFF + -DWITH_OPENSSL=ON + -DWITH_SAMPLE=OFF + -DWITH_UNICODE_BUILTIN=ON + "-DMSVC_RUNTIME=${VCPKG_CRT_LINKAGE}" + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" + # Unmaintained + -DWITH_CLIENT_WINDOWS=OFF + -DWITH_WAYLAND=OFF + # Uncontrolled dependencies w.r.t. vcpkg ports, system libs, or tools + # Can be overriden in custom triplet file + -DUSE_UNWIND=OFF + -DWITH_ALSA=OFF + -DWITH_CAIRO=OFF + -DWITH_CLIENT_SDL=OFF + -DWITH_CUPS=OFF + -DWITH_FUSE=OFF + -DWITH_KRB5=OFF + -DWITH_LIBSYSTEMD=OFF + -DWITH_OPUS=OFF + -DWITH_OSS=OFF + -DWITH_PCSC=OFF + -DWITH_PKCS11=OFF + -DWITH_PROXY_MODULES=OFF + -DWITH_PULSE=OFF + -DWITH_URIPARSER=OFF + OPTIONS_RELEASE + -DWITH_VERBOSE_WINPR_ASSERT=OFF + MAYBE_UNUSED_VARIABLES + MSVC_RUNTIME + WITH_CLIENT_WINDOWS +) + +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_fixup_pkgconfig() + +vcpkg_list(SET tools) +if("client" IN_LIST FEATURES AND "x11" IN_LIST FEATURES) + list(APPEND tools xfreerdp) +endif() +if("server" IN_LIST FEATURES) + list(APPEND tools freerdp-proxy) + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeRDP-Proxy3 PACKAGE_NAME freerdp-Proxy3 DO_NOT_DELETE_PARENT_CONFIG_PATH) + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeRDP-Server3 PACKAGE_NAME freerdp-server3 DO_NOT_DELETE_PARENT_CONFIG_PATH) + if (HAS_SHADOW_SUBSYSTEM) + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeRDP-Shadow3 PACKAGE_NAME freerdp-shadow3 DO_NOT_DELETE_PARENT_CONFIG_PATH) + list(APPEND tools freerdp-shadow-cli) + endif() + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/rdtk0 PACKAGE_NAME rdtk0 DO_NOT_DELETE_PARENT_CONFIG_PATH) +endif() +if("winpr-tools" IN_LIST FEATURES) + list(APPEND tools winpr-hash winpr-makecert) + vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/WinPR-tools3 PACKAGE_NAME winpr-tools3 DO_NOT_DELETE_PARENT_CONFIG_PATH) +endif() +vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeRDP-Client3 PACKAGE_NAME freerdp-client3 DO_NOT_DELETE_PARENT_CONFIG_PATH) +vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/WinPR3 PACKAGE_NAME winpr3 DO_NOT_DELETE_PARENT_CONFIG_PATH) +vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/FreeRDP3 PACKAGE_NAME freerdp) + +if(tools) + vcpkg_copy_tools(TOOL_NAMES ${tools} AUTO_CLEAN) +endif() + +vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/winpr3/winpr/build-config.h" "\"${CURRENT_PACKAGES_DIR}" "/* vcpkg redacted */ \"") +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + # They build static with dllexport, so it must be used with dllexport. Proper fix needs invasive patching. + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/freerdp3/freerdp/api.h" "#ifdef FREERDP_EXPORTS" "#if 1") + if(WITH_SERVER) + vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/rdtk0/rdtk/api.h" "#ifdef RDTK_EXPORTS" "#if 1") + endif() +endif() + +file(GLOB cmakefiles "${CURRENT_PACKAGES_DIR}/include/*/CMakeFiles") +file(REMOVE_RECURSE + ${cmakefiles} + "${CURRENT_PACKAGES_DIR}/include/winpr3/config" + "${CURRENT_PACKAGES_DIR}/debug/include" + "${CURRENT_PACKAGES_DIR}/debug/share" +) + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg/ports/freerdp/vcpkg.json b/vcpkg/ports/freerdp/vcpkg.json new file mode 100644 index 0000000..d0d229c --- /dev/null +++ b/vcpkg/ports/freerdp/vcpkg.json @@ -0,0 +1,74 @@ +{ + "name": "freerdp", + "version": "3.17.2", + "description": "A free implementation of the Remote Desktop Protocol (RDP)", + "homepage": "https://github.com/FreeRDP/FreeRDP", + "license": "Apache-2.0", + "supports": "!uwp & (!bsd | freebsd)", + "dependencies": [ + "cjson", + { + "name": "epoll-shim", + "platform": "bsd" + }, + "openssl", + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + "zlib" + ], + "features": { + "client": { + "description": "Build client components" + }, + "ffmpeg": { + "description": "Enable image scaling, video and audio with ffmpeg", + "dependencies": [ + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "avcodec", + "swresample", + "swscale" + ] + } + ] + }, + "server": { + "description": "Build server components", + "supports": "!android & !ios & !uwp", + "dependencies": [ + { + "name": "freerdp", + "default-features": false, + "features": [ + "winpr-tools" + ] + } + ] + }, + "urbdrc": { + "description": "USB redirection channel support", + "dependencies": [ + "libusb" + ] + }, + "winpr-tools": { + "description": "Build winpr tools", + "supports": "!android & !ios & !uwp" + }, + "x11": { + "description": "Enable X11 support", + "supports": "!android & !ios & !windows & !osx", + "dependencies": [ + "xcb" + ] + } + } +} diff --git a/vcpkg/ports/freerdp/windows-linkage.patch b/vcpkg/ports/freerdp/windows-linkage.patch new file mode 100644 index 0000000..84e27da --- /dev/null +++ b/vcpkg/ports/freerdp/windows-linkage.patch @@ -0,0 +1,14 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index db346d3..6ad72d3 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -260,6 +260,9 @@ if(WIN32) + endif() + + add_compile_definitions(FREERDP_EXPORTS) ++if(NOT BUILD_SHARED_LIBS) ++ add_compile_definitions(RDTK_EXPORTS) ++endif() + + # Mac OS X + if(APPLE) |