diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/FindFFmpeg.cmake | 67 | ||||
-rw-r--r-- | cmake/FindGObject.cmake | 4 | ||||
-rw-r--r-- | cmake/FindGStreamer.cmake | 6 | ||||
-rw-r--r-- | cmake/FindVAAPI.cmake | 34 |
4 files changed, 76 insertions, 35 deletions
diff --git a/cmake/FindFFmpeg.cmake b/cmake/FindFFmpeg.cmake index 86be24dd7..ecf9b07cb 100644 --- a/cmake/FindFFmpeg.cmake +++ b/cmake/FindFFmpeg.cmake @@ -201,6 +201,7 @@ endmacro() # Clear the previously cached variables, because they are recomputed every time # the Find script is included. unset(FFMPEG_SHARED_LIBRARIES CACHE) +unset(FFMPEG_STUBS CACHE) # Check for components. foreach (_component ${FFmpeg_FIND_COMPONENTS}) @@ -225,33 +226,34 @@ foreach (_component ${FFmpeg_FIND_COMPONENTS}) endif() endforeach() -if (NOT FFMPEG_SHARED_COMPONENTS AND (ANDROID OR LINUX)) - set(ENABLE_DYNAMIC_RESOLVE_OPENSSL_SYMBOLS TRUE CACHE INTERNAL "") -endif() -set(ENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS ${LINUX} CACHE INTERNAL "") +function(qt_internal_multimedia_try_add_dynamic_resolve_dependency _component dep) + set(dynamic_resolve_added FALSE PARENT_SCOPE) -function(__try_add_dynamic_resolve_dependency dep added) - set(added TRUE PARENT_SCOPE) + if (NOT ANDROID AND NOT LINUX) + return() + endif() - if(ENABLE_DYNAMIC_RESOLVE_OPENSSL_SYMBOLS AND - (${dep} STREQUAL "ssl" OR ${dep} STREQUAL "crypto")) - set(DYNAMIC_RESOLVE_OPENSSL_SYMBOLS TRUE CACHE INTERNAL "") - elseif(ENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS AND ${dep} STREQUAL "va") - set(DYNAMIC_RESOLVE_VAAPI_SYMBOLS TRUE CACHE INTERNAL "") - elseif(ENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS AND ${dep} STREQUAL "va-drm") - set(DYNAMIC_RESOLVE_VA_DRM_SYMBOLS TRUE CACHE INTERNAL "") - elseif(ENABLE_DYNAMIC_RESOLVE_VAAPI_SYMBOLS AND ${dep} STREQUAL "va-x11") - set(DYNAMIC_RESOLVE_VA_X11_SYMBOLS TRUE CACHE INTERNAL "") - else() - set(added FALSE PARENT_SCOPE) + set(supported_stubs "ssl|crypto|va|va-drm|va-x11") + if(${_component}_SHARED_LIBRARIES) + set(stub_prefix "Qt${PROJECT_VERSION_MAJOR}FFmpegStub-") + if (${dep} MATCHES "^${stub_prefix}(${supported_stubs})$") + string(REPLACE "${stub_prefix}" "" dep "${dep}") + set(FFMPEG_STUBS ${FFMPEG_STUBS} ${dep} CACHE INTERNAL "") + + set(dynamic_resolve_added TRUE PARENT_SCOPE) + endif() + elseif (${dep} MATCHES "^(${supported_stubs})$") + set(FFMPEG_STUBS ${FFMPEG_STUBS} ${dep} CACHE INTERNAL "") + set(dynamic_resolve_added TRUE PARENT_SCOPE) endif() endfunction() # Function parses package config file to find the static library dependencies # and adds them to the target library. -function(__ffmpeg_internal_set_dependencies lib) - set(PC_FILE ${FFMPEG_DIR}/lib/pkgconfig/lib${lib}.pc) +function(__ffmpeg_internal_set_dependencies _component) + string(TOLOWER ${_component} lib) + set(PC_FILE ${${_component}_LIBRARY_DIR}/pkgconfig/lib${lib}.pc) if(EXISTS ${PC_FILE}) file(READ ${PC_FILE} pcfile) @@ -270,18 +272,22 @@ function(__ffmpeg_internal_set_dependencies lib) foreach(dependency ${deps_no_suffix}) string(REGEX REPLACE ${prefix_l} "" dependency ${dependency}) if(NOT ${lib} STREQUAL ${dependency}) - __try_add_dynamic_resolve_dependency(${dependency} added) - if(NOT added) + qt_internal_multimedia_try_add_dynamic_resolve_dependency(${_component} ${dependency}) + if(NOT dynamic_resolve_added AND NOT ${_component}_SHARED_LIBRARIES) target_link_libraries(FFmpeg::${lib} INTERFACE ${dependency}) endif() endif() endforeach() - list(APPEND deps_lib_suffix ${libs_dependency_lib} ${libs_private_dependency_lib}) - foreach(dependency ${deps_lib_suffix}) - string(REGEX REPLACE ${suffix_lib} "" dependency ${dependency}) - target_link_libraries(FFmpeg::${lib} INTERFACE ${dependency}) - endforeach() + if(NOT ${_component}_SHARED_LIBRARIES) + list(APPEND deps_lib_suffix ${libs_dependency_lib} ${libs_private_dependency_lib}) + foreach(dependency ${deps_lib_suffix}) + string(REGEX REPLACE ${suffix_lib} "" dependency ${dependency}) + target_link_libraries(FFmpeg::${lib} INTERFACE ${dependency}) + endforeach() + endif() + else() + message(WARNING "FFmpeg pc file ${PC_FILE} is not found") endif() endfunction() @@ -302,9 +308,8 @@ endfunction() INTERFACE_LINK_LIBRARIES "${${_component}_LIBRARY_NAME}" INTERFACE_LINK_DIRECTORIES "${${_component}_LIBRARY_DIR}" ) - if(NOT ${_component}_SHARED_LIBRARIES) - __ffmpeg_internal_set_dependencies(${_lowerComponent}) - endif() + + __ffmpeg_internal_set_dependencies(${_component}) target_link_libraries(FFmpeg::${_lowerComponent} INTERFACE "${${_component}_LIBRARY_NAME}") if (UNIX AND NOT APPLE) target_link_options(FFmpeg::${_lowerComponent} INTERFACE "-Wl,--exclude-libs=lib${_lowerComponent}") @@ -317,13 +322,17 @@ endfunction() list(REMOVE_DUPLICATES FFMPEG_INCLUDE_DIRS) list(REMOVE_DUPLICATES FFMPEG_LIBRARY_DIRS) list(REMOVE_DUPLICATES FFMPEG_SHARED_LIBRARIES) + list(REMOVE_DUPLICATES FFMPEG_STUBS) message(STATUS "FFmpeg shared libs: ${FFMPEG_SHARED_LIBRARIES}") + message(STATUS "FFmpeg stubs: ${FFMPEG_STUBS}") # cache the vars. set(FFMPEG_SHARED_LIBRARIES ${FFMPEG_SHARED_LIBRARIES} CACHE STRING "The FFmpeg dynamic libraries." FORCE) + set(FFMPEG_STUBS ${FFMPEG_STUBS} CACHE STRING "The FFmpeg stubs." FORCE) mark_as_advanced(FFMPEG_SHARED_LIBRARIES) + mark_as_advanced(FFMPEG_STUBS) # endif () list(LENGTH FFMPEG_LIBRARY_DIRS DIRS_COUNT) diff --git a/cmake/FindGObject.cmake b/cmake/FindGObject.cmake index 54dd35ead..89a02435a 100644 --- a/cmake/FindGObject.cmake +++ b/cmake/FindGObject.cmake @@ -23,7 +23,7 @@ qt_internal_disable_find_package_global_promotion(GLIB2::GLIB2) if(NOT TARGET GObject::GObject) find_package(PkgConfig QUIET) pkg_check_modules(PC_GOBJECT gobject-2.0 IMPORTED_TARGET) - if (TARGET PkgConfig::PC_GOBJECT) + if(TARGET PkgConfig::PC_GOBJECT) add_library(GObject::GObject INTERFACE IMPORTED) target_link_libraries(GObject::GObject INTERFACE PkgConfig::PC_GOBJECT @@ -35,7 +35,7 @@ if(NOT TARGET GObject::GObject) PATH_SUFFIXES glib-2.0/gobject/ ) find_library(GObject_LIBRARY NAMES gobject-2.0) - if (GObject_LIBRARY AND GObject_INCLUDE_DIR) + if(GObject_LIBRARY AND GObject_INCLUDE_DIR) add_library(GObject::GObject INTERFACE IMPORTED) target_include_directories(GObject::GObject INTERFACE ${GObject_INCLUDE_DIR} diff --git a/cmake/FindGStreamer.cmake b/cmake/FindGStreamer.cmake index dc6776606..b8891e7ed 100644 --- a/cmake/FindGStreamer.cmake +++ b/cmake/FindGStreamer.cmake @@ -97,17 +97,17 @@ endif() # GStreamer optional components foreach(component ${GStreamer_FIND_COMPONENTS}) - if (${component} STREQUAL "App") + if(${component} STREQUAL "App") find_gstreamer_component(App gstreamer-app-1.0 gst/app/gstappsink.h gstapp-1.0) if(TARGET GStreamer::App AND TARGET GStreamer::Base) target_link_libraries(GStreamer::App INTERFACE GStreamer::Base) endif() - elseif (${component} STREQUAL "Photography") + elseif(${component} STREQUAL "Photography") find_gstreamer_component(Photography gstreamer-photography-1.0 gst/interfaces/photography.h gstphotography-1.0) if(TARGET GStreamer::Photography AND TARGET GStreamer::Core) target_link_libraries(GStreamer::Photography INTERFACE GStreamer::Core) endif() - elseif (${component} STREQUAL "Gl") + elseif(${component} STREQUAL "Gl") find_gstreamer_component(Gl gstreamer-gl-1.0 gst/gl/gl.h gstgl-1.0) if(TARGET GStreamer::Gl AND TARGET GStreamer::Video AND TARGET GStreamer::Allocators) target_link_libraries(GStreamer::Gl INTERFACE GStreamer::Video GStreamer::Allocators) diff --git a/cmake/FindVAAPI.cmake b/cmake/FindVAAPI.cmake index a3ea6cd58..b1170dc8e 100644 --- a/cmake/FindVAAPI.cmake +++ b/cmake/FindVAAPI.cmake @@ -4,13 +4,40 @@ find_package(PkgConfig QUIET) +function(qt_internal_multimedia_set_va_outputs component include_dir lib_path) + if ("${component}" STREQUAL "VA") + set(VAAPI_INCLUDE_DIR "${include_dir}" CACHE INTERNAL "") + get_filename_component(lib_realpath "${lib_path}" REALPATH) + + string(REGEX MATCH "[0-9]+(\\.[0-9]+)*$" VAAPI_SUFFIX "${lib_realpath}") + set(VAAPI_SUFFIX "${VAAPI_SUFFIX}" CACHE INTERNAL "") + + mark_as_advanced(VAAPI_SUFFIX VAAPI_INCLUDE_DIR) + endif() +endfunction() + function(find_component component prefix header library) if(NOT TARGET VAAPI::${component}) string(TOUPPER ${component} upper) - pkg_check_modules(PC_VAAPI_${upper} ${prefix} IMPORTED_TARGET) + pkg_search_module(PC_VAAPI_${upper} ${prefix} IMPORTED_TARGET) if(TARGET PkgConfig::PC_VAAPI_${upper}) add_library(VAAPI::${component} INTERFACE IMPORTED) target_link_libraries(VAAPI::${component} INTERFACE PkgConfig::PC_VAAPI_${upper}) + + if (NOT PC_VAAPI_${upper}_LINK_LIBRARIES) + get_target_property(PC_VAAPI_${upper}_LINK_LIBRARIES PkgConfig::PC_VAAPI_${upper} INTERFACE_LINK_LIBRARIES) + message(STATUS "PC_VAAPI_${upper}_LINK_LIBRARIES is not defined by PkgConfig; " + "Get the value from target properties: ${PC_VAAPI_${upper}_LINK_LIBRARIES}") + endif() + + foreach (lib_path ${PC_VAAPI_${upper}_LINK_LIBRARIES}) + get_filename_component(lib_name "${lib_path}" NAME_WLE) + if (${lib_name} STREQUAL ${prefix}) + qt_internal_multimedia_set_va_outputs(${component} + "${PC_VAAPI_${upper}_INCLUDEDIR}" "${lib_path}") + break() + endif() + endforeach() else() find_path(VAAPI_${component}_INCLUDE_DIR NAMES ${header} @@ -25,6 +52,9 @@ function(find_component component prefix header library) target_link_libraries(VAAPI::${component} INTERFACE ${VAAPI_${component}_LIBRARY}) endif() mark_as_advanced(VAAPI_${component}_INCLUDE_DIR VAAPI_${component}_LIBRARY) + + qt_internal_multimedia_set_va_outputs(${component} + "${VAAPI_${component}_INCLUDE_DIR}" "${VAAPI_${component}_LIBRARY}") endif() endif() @@ -48,6 +78,8 @@ find_package_handle_standard_args(VAAPI REQUIRED_VARS VAAPI_VA_FOUND VAAPI_DRM_FOUND + VAAPI_INCLUDE_DIR + VAAPI_SUFFIX HANDLE_COMPONENTS ) |