mirror of
https://github.com/PabloMK7/citra
synced 2024-11-15 05:08:23 +00:00
citra_qt: win32 fix ffmpeg missing files.
This commit is contained in:
parent
cdce02607a
commit
62ce734505
2 changed files with 68 additions and 5 deletions
4
.github/workflows/build.yml
vendored
4
.github/workflows/build.yml
vendored
|
@ -151,7 +151,7 @@ jobs:
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
- name: Install extra tools (MSVC)
|
- name: Install extra tools (MSVC)
|
||||||
run: choco install ccache ninja wget
|
run: choco install ccache ninja wget unzip
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
- name: Set up MSYS2
|
- name: Set up MSYS2
|
||||||
uses: msys2/setup-msys2@v2
|
uses: msys2/setup-msys2@v2
|
||||||
|
@ -159,7 +159,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
msystem: clang64
|
msystem: clang64
|
||||||
update: true
|
update: true
|
||||||
install: git make p7zip
|
install: git make p7zip unzip
|
||||||
pacboy: >-
|
pacboy: >-
|
||||||
toolchain:p ccache:p cmake:p ninja:p
|
toolchain:p ccache:p cmake:p ninja:p
|
||||||
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
||||||
|
|
|
@ -2,6 +2,49 @@
|
||||||
if (BUNDLE_TARGET_EXECUTE)
|
if (BUNDLE_TARGET_EXECUTE)
|
||||||
# --- Bundling method logic ---
|
# --- Bundling method logic ---
|
||||||
|
|
||||||
|
function(download_ffmpeg target license)
|
||||||
|
if (WIN32)
|
||||||
|
set(FFMPEG_DIR "${CMAKE_BINARY_DIR}/externals/ffmpeg")
|
||||||
|
set(FFMPEG_PACK "${CMAKE_BINARY_DIR}/externals/ffmpeg.zip")
|
||||||
|
set(FFMPEG_PLATFORM "win64")
|
||||||
|
set(PACK_EXT "zip")
|
||||||
|
endif()
|
||||||
|
if (FFMPEG_PACK)
|
||||||
|
if (NOT EXISTS ${FFMPEG_DIR})
|
||||||
|
if (NOT EXISTS ${FFMPEG_PACK})
|
||||||
|
message(STATUS "Downloading ffmpeg")
|
||||||
|
file(DOWNLOAD https://github.com/kongfl888/FFmpeg-Builds/releases/download/latest/ffmpeg-n${target}-latest-${FFMPEG_PLATFORM}-${license}-shared-${target}.${PACK_EXT}
|
||||||
|
${FFMPEG_PACK} SHOW_PROGRESS)
|
||||||
|
if (EXISTS ${FFMPEG_PACK})
|
||||||
|
message(STATUS "package: ${FFMPEG_PACK}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(FFSOURCE_DIR "${CMAKE_BINARY_DIR}/externals/ffmpeg-n${target}-latest-${FFMPEG_PLATFORM}-${license}-shared-${target}")
|
||||||
|
file(REMOVE_RECURSE ${FFSOURCE_DIR})
|
||||||
|
if (PACK_EXT STREQUAL "zip")
|
||||||
|
find_program(UNZIP_PATH unzip)
|
||||||
|
message(STATUS "${UNZIP_PATH}")
|
||||||
|
execute_process(COMMAND ${UNZIP_PATH} -o -d ${CMAKE_BINARY_DIR}/externals ${FFMPEG_PACK}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals"
|
||||||
|
ERROR_VARIABLE error_un
|
||||||
|
RESULT_VARIABLE UNP_RESULT)
|
||||||
|
|
||||||
|
if (EXISTS ${FFSOURCE_DIR})
|
||||||
|
file(REMOVE_RECURSE ${FFMPEG_DIR})
|
||||||
|
file(RENAME ${FFSOURCE_DIR} ${FFMPEG_DIR})
|
||||||
|
if (EXISTS "${FFMPEG_DIR}/bin/ffmpeg.exe")
|
||||||
|
message(STATUS "Found ffmpeg: ${FFMPEG_DIR}/bin/ffmpeg.exe")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "Failed to extract ffmpeg: ${error_un}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "Skip ffmpeg download.")
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
function(symlink_safe_copy from to)
|
function(symlink_safe_copy from to)
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
# Use cmake copy for maximum compatibility.
|
# Use cmake copy for maximum compatibility.
|
||||||
|
@ -65,6 +108,18 @@ if (BUNDLE_TARGET_EXECUTE)
|
||||||
set(qtpaths_executable "${windeployqt_dir}/qtpaths.exe")
|
set(qtpaths_executable "${windeployqt_dir}/qtpaths.exe")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(QTPLUGINS_PATH "${QT_HOST_PATH}/plugins")
|
||||||
|
if (NOT EXISTS ${QTPLUGINS_PATH})
|
||||||
|
set(QTPLUGINS_PATH "${QT_TARGET_PATH}/share/qt6/plugins")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Temporarily remove file ffmpegmediaplugin.dll
|
||||||
|
# Remove the FFmpeg multimedia plugin as we don't include FFmpeg.
|
||||||
|
# We want to use the Windows media plugin instead, which is also included.
|
||||||
|
if (EXISTS "${QTPLUGINS_PATH}/multimedia/ffmpegmediaplugin.dll")
|
||||||
|
file(RENAME "${QTPLUGINS_PATH}/multimedia/ffmpegmediaplugin.dll" "${QTPLUGINS_PATH}/ffmpegmediaplugin.dll")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "Executing windeployqt for executable ${executable_path}")
|
message(STATUS "Executing windeployqt for executable ${executable_path}")
|
||||||
execute_process(COMMAND "${windeployqt_executable}" "${executable_path}"
|
execute_process(COMMAND "${windeployqt_executable}" "${executable_path}"
|
||||||
--qtpaths "${qtpaths_executable}"
|
--qtpaths "${qtpaths_executable}"
|
||||||
|
@ -75,9 +130,17 @@ if (BUNDLE_TARGET_EXECUTE)
|
||||||
message(FATAL_ERROR "windeployqt failed: ${windeployqt_result}")
|
message(FATAL_ERROR "windeployqt failed: ${windeployqt_result}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Remove the FFmpeg multimedia plugin as we don't include FFmpeg.
|
# Actively bundle ffmpeg to the target directory to avoid dependency loss
|
||||||
# We want to use the Windows media plugin instead, which is also included.
|
download_ffmpeg(7.1 gpl)
|
||||||
file(REMOVE "${executable_parent_dir}/plugins/multimedia/ffmpegmediaplugin.dll")
|
symlink_safe_copy("${CMAKE_BINARY_DIR}/externals/ffmpeg/bin/ffmpeg.exe" "${executable_parent_dir}")
|
||||||
|
set(FFMPEG_PATH "${executable_parent_dir}/ffmpeg.exe")
|
||||||
|
bundle_standalone("${FFMPEG_PATH}" "${FFMPEG_PATH}" "${CMAKE_BINARY_DIR}/externals/ffmpeg/bin")
|
||||||
|
|
||||||
|
# Restore file ffmpegmediaplugin.dll
|
||||||
|
if (EXISTS "${QTPLUGINS_PATH}/ffmpegmediaplugin.dll")
|
||||||
|
file(RENAME "${QTPLUGINS_PATH}/ffmpegmediaplugin.dll" "${QTPLUGINS_PATH}/multimedia/ffmpegmediaplugin.dll")
|
||||||
|
endif()
|
||||||
|
file(REMOVE "${executable_parent_dir}/ffmpeg.exe")
|
||||||
elseif (APPLE)
|
elseif (APPLE)
|
||||||
get_filename_component(executable_name "${executable_path}" NAME_WE)
|
get_filename_component(executable_name "${executable_path}" NAME_WE)
|
||||||
find_program(macdeployqt_executable macdeployqt6 PATHS "${QT_HOST_PATH}/bin")
|
find_program(macdeployqt_executable macdeployqt6 PATHS "${QT_HOST_PATH}/bin")
|
||||||
|
|
Loading…
Reference in a new issue