From 8b9335aa9008fc5e25516d6d1059a58acbffe0fb Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 11 Sep 2025 07:17:42 +0200 Subject: [PATCH] [CMake,libfreerdp] add pkg-config dependencies --- libfreerdp/CMakeLists.txt | 36 +++++++++++++++++++++------- libfreerdp/codec/CMakeLists.txt | 9 +++++++ libfreerdp/core/CMakeLists.txt | 1 + libfreerdp/crypto/CMakeLists.txt | 2 ++ libfreerdp/emu/CMakeLists.txt | 1 + libfreerdp/freerdp.pc.in | 4 ++-- libfreerdp/locale/CMakeLists.txt | 2 ++ libfreerdp/primitives/CMakeLists.txt | 1 + libfreerdp/utils/CMakeLists.txt | 1 + 9 files changed, 46 insertions(+), 11 deletions(-) diff --git a/libfreerdp/CMakeLists.txt b/libfreerdp/CMakeLists.txt index fb465cafb..a4b7165fc 100644 --- a/libfreerdp/CMakeLists.txt +++ b/libfreerdp/CMakeLists.txt @@ -28,6 +28,22 @@ if(WITH_RESOURCE_VERSIONING) string(APPEND FREERDP_RESOURCE_ROOT "${FREERDP_VERSION_MAJOR}") endif() +set(FREERDP_PC_REQUIRES_PRIVATE "" CACHE INTERNAL "dependencies") +macro(freerdp_pc_add_requires_private) + foreach(_lib ${ARGN}) + list(APPEND FREERDP_PC_REQUIRES_PRIVATE " ${_lib}") + endforeach() + set(FREERDP_PC_REQUIRES_PRIVATE ${FREERDP_PC_REQUIRES_PRIVATE} CACHE INTERNAL "dependencies") +endmacro() + +set(FREERDP_PC_LIBRARY_PRIVATE "" CACHE INTERNAL "dependencies") +macro(freerdp_pc_add_library_private) + foreach(_lib ${ARGN}) + list(APPEND FREERDP_PC_LIBRARY_PRIVATE ${_lib}) + endforeach() + set(FREERDP_PC_LIBRARY_PRIVATE ${FREERDP_PC_LIBRARY_PRIVATE} CACHE INTERNAL "dependencies") +endmacro() + # CMake modules includes include(FindCairo) @@ -121,6 +137,7 @@ if(WITH_FDK_AAC) endif() add_compile_definitions(WITH_FDK_AAC) + freerdp_pc_add_requires_private("fdk-aac") endif() set(OPUS_DEFAULT OFF) @@ -151,13 +168,16 @@ if(WITH_OPUS) freerdp_include_directory_add(${OPUS_INCLUDE_DIRS}) link_directories(${OPUS_LIBRARY_DIRS}) endif() + freerdp_pc_add_requires_private("opus") endif() if(WITH_SWSCALE) find_package(FFmpeg REQUIRED COMPONENTS SWSCALE) + freerdp_pc_add_requires_private("libswscale") endif(WITH_SWSCALE) if(WITH_CAIRO) find_package(Cairo REQUIRED) + freerdp_pc_add_requires_private("cairo") endif(WITH_CAIRO) # Prefer SWScale over Cairo, both at the same time are not possible. @@ -247,13 +267,15 @@ installwithrpath( set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "FreeRDP/libfreerdp") include(pkg-config-install-prefix) -set(FREERDP_REQUIRES_PRIVATE "") -if(WITH_SMARTCARD_EMULATE) - string(APPEND FREERDP_REQUIRES_PRIVATE " zlib") - list(APPEND FREERDP_PC_PRIVATE_LIBS "-lz") +list(REMOVE_DUPLICATES FREERDP_PC_REQUIRES_PRIVATE) +list(JOIN FREERDP_PC_REQUIRES_PRIVATE " " FREERDP_PC_REQUIRES_PRIVATE) + +list(REMOVE_DUPLICATES FREERDP_PC_LIBRARY_PRIVATE) +list(JOIN FREERDP_PC_LIBRARY_PRIVATE " -l" FREERDP_PC_LIBRARY_PRIVATE) +if(FREERDP_PC_LIBRARY_PRIVATE) + string(PREPEND FREERDP_PC_LIBRARY_PRIVATE "-l") endif() -list(JOIN FREERDP_PC_PRIVATE_LIBS " " FREERDP_PC_PRIVATE_LIBS) cleaning_configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/freerdp.pc.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp${FREERDP_VERSION_MAJOR}.pc @ONLY ) @@ -262,8 +284,6 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/freerdp${FREERDP_VERSION_MAJOR}.pc DES ## cmake project export(PACKAGE freerdp) -setfreerdpcmakeinstalldir(FREERDP_CMAKE_INSTALL_DIR "FreeRDP${FREERDP_VERSION_MAJOR}") - configure_package_config_file( FreeRDPConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake INSTALL_DESTINATION ${FREERDP_CMAKE_INSTALL_DIR} PATH_VARS FREERDP_INCLUDE_DIR FREERDP_PLUGIN_PATH @@ -276,5 +296,3 @@ write_basic_package_version_file( install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FreeRDPConfigVersion.cmake DESTINATION ${FREERDP_CMAKE_INSTALL_DIR} ) - -install(EXPORT FreeRDPTargets DESTINATION ${FREERDP_CMAKE_INSTALL_DIR}) diff --git a/libfreerdp/codec/CMakeLists.txt b/libfreerdp/codec/CMakeLists.txt index 9b78f1816..e3776dce8 100644 --- a/libfreerdp/codec/CMakeLists.txt +++ b/libfreerdp/codec/CMakeLists.txt @@ -68,35 +68,42 @@ if(WITH_DSP_FFMPEG) set(CODEC_SRCS ${CODEC_SRCS} dsp_ffmpeg.c dsp_ffmpeg.h) include_directories(SYSTEM ${FFMPEG_INCLUDE_DIRS}) list(APPEND CODEC_LIBS ${FFMPEG_LIBRARIES}) + freerdp_pc_add_requires_private("libavfilter;libavformat;libavcodec;libavutil;libswresample") endif(WITH_DSP_FFMPEG) if(WITH_SOXR) list(APPEND CODEC_LIBS ${SOXR_LIBRARIES}) include_directories(SYSTEM ${SOXR_INCLUDE_DIR}) + freerdp_pc_add_requires_private("soxr") endif(WITH_SOXR) if(GSM_FOUND) list(APPEND CODEC_LIBS ${GSM_LIBRARIES}) include_directories(SYSTEM ${GSM_INCLUDE_DIRS}) + freerdp_pc_add_library_private("gsm") endif() if(LAME_FOUND) list(APPEND CODEC_LIBS ${LAME_LIBRARIES}) include_directories(SYSTEM ${LAME_INCLUDE_DIRS}) + freerdp_pc_add_requires_private("lame") endif() if(WITH_FDK_AAC) list(APPEND CODEC_SRCS dsp_fdk_impl.c dsp_fdk_impl.h dsp_fdk_aac.c dsp_fdk_aac.h) + freerdp_pc_add_requires_private("fdk-aac") endif() if(FAAD2_FOUND) list(APPEND CODEC_LIBS ${FAAD2_LIBRARIES}) include_directories(SYSTEM ${FAAD2_INCLUDE_DIRS}) + freerdp_pc_add_requires_private("faad2") endif() if(FAAC_FOUND) list(APPEND CODEC_LIBS ${FAAC_LIBRARIES}) include_directories(SYSTEM ${FAAC_INCLUDE_DIRS}) + freerdp_pc_add_requires_private("faac") endif() if(WITH_OPENH264) @@ -104,6 +111,7 @@ if(WITH_OPENH264) include_directories(SYSTEM ${OPENH264_INCLUDE_DIR}) if(NOT WITH_OPENH264_LOADING) list(APPEND CODEC_LIBS ${OPENH264_LIBRARIES}) + freerdp_pc_add_requires_private("openh264") endif(NOT WITH_OPENH264_LOADING) endif() @@ -111,6 +119,7 @@ if(WITH_VIDEO_FFMPEG) set(CODEC_SRCS ${CODEC_SRCS} h264_ffmpeg.c) include_directories(SYSTEM ${FFMPEG_INCLUDE_DIRS}) list(APPEND CODEC_LIBS ${FFMPEG_LIBRARIES}) + freerdp_pc_add_requires_private("libavfilter;libavformat;libavcodec;libavutil") endif() if(WIN32 AND WITH_MEDIA_FOUNDATION) diff --git a/libfreerdp/core/CMakeLists.txt b/libfreerdp/core/CMakeLists.txt index c31e7e5f5..a190e27e6 100644 --- a/libfreerdp/core/CMakeLists.txt +++ b/libfreerdp/core/CMakeLists.txt @@ -163,6 +163,7 @@ if(WIN32) endif() freerdp_library_add(${OPENSSL_LIBRARIES}) +freerdp_pc_add_requires_private("libssl") if(BUILD_TESTING_INTERNAL OR BUILD_TESTING) add_subdirectory(test) diff --git a/libfreerdp/crypto/CMakeLists.txt b/libfreerdp/crypto/CMakeLists.txt index 1dde7bb55..756930ce7 100644 --- a/libfreerdp/crypto/CMakeLists.txt +++ b/libfreerdp/crypto/CMakeLists.txt @@ -43,10 +43,12 @@ freerdp_module_add( freerdp_include_directory_add(${OPENSSL_INCLUDE_DIR}) freerdp_library_add(${OPENSSL_LIBRARIES}) +freerdp_pc_add_requires_private("libssl") if(MBEDTLS_FOUND) freerdp_include_directory_add(${MBEDTLS_INCLUDE_DIR}) freerdp_library_add(${MBEDTLS_LIBRARIES}) + freerdp_pc_add_requires_private("mbedtls") endif() if(WIN32) diff --git a/libfreerdp/emu/CMakeLists.txt b/libfreerdp/emu/CMakeLists.txt index 65bde3f47..431a1ad83 100644 --- a/libfreerdp/emu/CMakeLists.txt +++ b/libfreerdp/emu/CMakeLists.txt @@ -10,4 +10,5 @@ if(WITH_SMARTCARD_EMULATE) ) freerdp_module_add(${EMULATE_SRCS}) freerdp_library_add(ZLIB::ZLIB) + freerdp_pc_add_requires_private("zlib") endif() diff --git a/libfreerdp/freerdp.pc.in b/libfreerdp/freerdp.pc.in index 185ec981a..ee8394004 100644 --- a/libfreerdp/freerdp.pc.in +++ b/libfreerdp/freerdp.pc.in @@ -14,7 +14,7 @@ Description: FreeRDP: A Remote Desktop Protocol Implementation URL: http://www.freerdp.com/ Version: @FREERDP_VERSION@ Requires: -Requires.private: winpr@FREERDP_API_VERSION@ @FREERDP_REQUIRES_PRIVATE@ +Requires.private: winpr@FREERDP_API_VERSION@ @FREERDP_PC_REQUIRES_PRIVATE@ Libs: -L${libdir} ${libs} -Libs.private: -ldl -lpthread @FREERDP_PC_PRIVATE_LIBS@ +Libs.private: -L${plugindir} -ldl -lpthread @FREERDP_PC_LIBRARY_PRIVATE@ Cflags: -I${includedir} diff --git a/libfreerdp/locale/CMakeLists.txt b/libfreerdp/locale/CMakeLists.txt index a9d7e6bc8..e5f9b931b 100644 --- a/libfreerdp/locale/CMakeLists.txt +++ b/libfreerdp/locale/CMakeLists.txt @@ -56,6 +56,7 @@ endif() if(WITH_X11 AND NOT WITHOUT_FREERDP_3x_DEPRECATED) find_package(X11 REQUIRED) + freerdp_pc_add_requires_private("x11") freerdp_definition_add(WITH_X11) freerdp_include_directory_add(${X11_INCLUDE_DIR}) @@ -68,6 +69,7 @@ if(WITH_X11 AND NOT WITHOUT_FREERDP_3x_DEPRECATED) endif() if(X11_Xkbfile_FOUND AND (NOT APPLE)) + freerdp_pc_add_requires_private("xkbfile") freerdp_definition_add(WITH_XKBFILE) freerdp_include_directory_add(${X11_Xkbfile_INCLUDE_PATH}) list(APPEND SRCS ${XKBFILE_SRCS}) diff --git a/libfreerdp/primitives/CMakeLists.txt b/libfreerdp/primitives/CMakeLists.txt index 60c3c4153..a42839ce4 100644 --- a/libfreerdp/primitives/CMakeLists.txt +++ b/libfreerdp/primitives/CMakeLists.txt @@ -66,6 +66,7 @@ if(WITH_OPENCL) include_directories(${CMAKE_CURRENT_BINARY_DIR}/opencl) freerdp_include_directory_add(${OpenCL_INCLUDE_DIRS}) freerdp_library_add(OpenCL::OpenCL) + freerdp_pc_add_requires_private("OpenCL") endif() set(PRIMITIVES_OPT_SRCS ${PRIMITIVES_NEON_SRCS} ${PRIMITIVES_SSE3_SRCS} ${PRIMITIVES_SSSE3_SRCS} diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt index c72d02158..4c74774a2 100644 --- a/libfreerdp/utils/CMakeLists.txt +++ b/libfreerdp/utils/CMakeLists.txt @@ -53,6 +53,7 @@ check_library_exists(m pow "" HAVE_LIB_M) if(HAVE_LIB_M) freerdp_library_add(m) + freerdp_pc_add_library_private("m") endif() if(BUILD_TESTING_INTERNAL OR BUILD_TESTING)