cmake: Allow FFmpeg external usage and cleanup

Sets find_package(FFmpeg) to QUIET instead of REQUIRED. This allows
using the FFmpeg external in cases where there is no suitable installed
version of FFmpeg.

Also fixes a bug where multiple CMake configures causes FFmpeg_LIBRARIES
to concatenate on itself, producing cyclical dependencies. Unsets the
variable before building it in the foreach loop.

Fixes FFmpeg_INCLUDE_DIR not including the headers generated at run
time.
This commit is contained in:
lat9nq 2021-04-21 02:57:22 -04:00
parent 8cdd86fa25
commit ea78f9a2ef

View File

@ -19,7 +19,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" ON "EN
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled yuzu" ON "WIN32" OFF) CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON "WIN32" OFF)
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF) option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
@ -394,7 +394,7 @@ set(FFmpeg_COMPONENTS
if (NOT YUZU_USE_BUNDLED_FFMPEG) if (NOT YUZU_USE_BUNDLED_FFMPEG)
# Use system installed FFmpeg # Use system installed FFmpeg
find_package(FFmpeg REQUIRED COMPONENTS ${FFmpeg_COMPONENTS}) find_package(FFmpeg QUIET COMPONENTS ${FFmpeg_COMPONENTS})
if (FFmpeg_FOUND) if (FFmpeg_FOUND)
# Overwrite aggregate defines from FFmpeg module to avoid over-linking libraries. # Overwrite aggregate defines from FFmpeg module to avoid over-linking libraries.
@ -433,6 +433,7 @@ if (YUZU_USE_BUNDLED_FFMPEG)
set(FFmpeg_FOUND YES) set(FFmpeg_FOUND YES)
endif() endif()
unset(FFmpeg_LIBRARIES CACHE)
foreach(COMPONENT ${FFmpeg_COMPONENTS}) foreach(COMPONENT ${FFmpeg_COMPONENTS})
set(FFmpeg_${COMPONENT}_PREFIX "${FFmpeg_BUILD_DIR}/lib${COMPONENT}") set(FFmpeg_${COMPONENT}_PREFIX "${FFmpeg_BUILD_DIR}/lib${COMPONENT}")
set(FFmpeg_${COMPONENT}_LIB_NAME "lib${COMPONENT}.a") set(FFmpeg_${COMPONENT}_LIB_NAME "lib${COMPONENT}.a")
@ -445,7 +446,7 @@ if (YUZU_USE_BUNDLED_FFMPEG)
endforeach() endforeach()
set(FFmpeg_INCLUDE_DIR set(FFmpeg_INCLUDE_DIR
${FFmpeg_PREFIX} "${FFmpeg_PREFIX};${FFmpeg_BUILD_DIR}"
CACHE PATH "Path to FFmpeg headers" FORCE) CACHE PATH "Path to FFmpeg headers" FORCE)
# `configure` parameters builds only exactly what yuzu needs from FFmpeg # `configure` parameters builds only exactly what yuzu needs from FFmpeg
@ -492,13 +493,11 @@ if (YUZU_USE_BUNDLED_FFMPEG)
# ALL makes this custom target build every time # ALL makes this custom target build every time
# but it won't actually build if the DEPENDS parameter is up to date # but it won't actually build if the DEPENDS parameter is up to date
add_custom_target(ffmpeg-build ALL DEPENDS ${FFmpeg_LIBRARIES})
add_custom_target(ffmpeg-configure ALL DEPENDS ${FFmpeg_MAKEFILE}) add_custom_target(ffmpeg-configure ALL DEPENDS ${FFmpeg_MAKEFILE})
add_custom_target(ffmpeg-build ALL DEPENDS ${FFmpeg_LIBRARIES} ffmpeg-configure)
if (FFmpeg_FOUND) if (FFmpeg_FOUND)
message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}") message(STATUS "Found FFmpeg version ${FFmpeg_VERSION}")
add_dependencies(ffmpeg-build ffmpeg-configure)
else() else()
message(FATAL_ERROR "FFmpeg not found") message(FATAL_ERROR "FFmpeg not found")
endif() endif()