aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/ffmpeg/portfile.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/ffmpeg/portfile.cmake')
-rw-r--r--vcpkg/ports/ffmpeg/portfile.cmake1020
1 files changed, 1020 insertions, 0 deletions
diff --git a/vcpkg/ports/ffmpeg/portfile.cmake b/vcpkg/ports/ffmpeg/portfile.cmake
new file mode 100644
index 0000000..03397d7
--- /dev/null
+++ b/vcpkg/ports/ffmpeg/portfile.cmake
@@ -0,0 +1,1020 @@
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO ffmpeg/ffmpeg
+ REF "n${VERSION}"
+ SHA512 8411c45f71d2d61184b11e2a786137044a80d9b979a7e2e8513efc5e716b3360bff4533a13875dd4bca492b97b97f0384f7fb4f3d796802e81981b0857d18a2b
+ HEAD_REF master
+ PATCHES
+ 0001-create-lib-libraries.patch
+ 0002-fix-msvc-link.patch
+ 0003-fix-windowsinclude.patch
+ 0004-dependencies.patch
+ 0005-fix-nasm.patch
+ 0007-fix-lib-naming.patch
+ 0013-define-WINVER.patch
+ 0020-fix-aarch64-libswscale.patch
+ 0024-fix-osx-host-c11.patch
+ 0040-ffmpeg-add-av_stream_get_first_dts-for-chromium.patch # Do not remove this patch. It is required by chromium
+ 0041-add-const-for-opengl-definition.patch
+ 0043-fix-miss-head.patch
+ 0044-fix-vulkan-debug-callback-abi.patch
+)
+
+if(SOURCE_PATH MATCHES " ")
+ message(FATAL_ERROR "Error: ffmpeg will not build with spaces in the path. Please use a directory with no spaces")
+endif()
+
+if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ vcpkg_find_acquire_program(NASM)
+ get_filename_component(NASM_EXE_PATH "${NASM}" DIRECTORY)
+ vcpkg_add_to_path("${NASM_EXE_PATH}")
+endif()
+
+set(OPTIONS "--enable-pic --disable-doc --enable-debug --enable-runtime-cpudetect --disable-autodetect")
+
+if(VCPKG_TARGET_IS_MINGW)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ string(APPEND OPTIONS " --target-os=mingw32")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ string(APPEND OPTIONS " --target-os=mingw64")
+ endif()
+elseif(VCPKG_TARGET_IS_LINUX)
+ string(APPEND OPTIONS " --target-os=linux --enable-pthreads")
+elseif(VCPKG_TARGET_IS_UWP)
+ string(APPEND OPTIONS " --target-os=win32 --enable-w32threads --enable-d3d11va --enable-d3d12va --enable-mediafoundation")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ string(APPEND OPTIONS " --target-os=win32 --enable-w32threads --enable-d3d11va --enable-d3d12va --enable-dxva2 --enable-mediafoundation")
+elseif(VCPKG_TARGET_IS_OSX)
+ string(APPEND OPTIONS " --target-os=darwin --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolbox --enable-videotoolbox")
+elseif(VCPKG_TARGET_IS_IOS)
+ string(APPEND OPTIONS " --enable-avfoundation --enable-coreimage --enable-videotoolbox")
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ string(APPEND OPTIONS " --target-os=android --enable-jni --enable-mediacodec")
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "QNX")
+ string(APPEND OPTIONS " --target-os=qnx")
+endif()
+
+if(VCPKG_TARGET_IS_OSX)
+ list(JOIN VCPKG_OSX_ARCHITECTURES " " OSX_ARCHS)
+ list(LENGTH VCPKG_OSX_ARCHITECTURES OSX_ARCH_COUNT)
+endif()
+
+vcpkg_cmake_get_vars(cmake_vars_file)
+include("${cmake_vars_file}")
+if(VCPKG_DETECTED_MSVC)
+ string(APPEND OPTIONS " --disable-inline-asm") # clang-cl has inline assembly but this leads to undefined symbols.
+ set(OPTIONS "--toolchain=msvc ${OPTIONS}")
+ # This is required because ffmpeg depends upon optimizations to link correctly
+ string(APPEND VCPKG_COMBINED_C_FLAGS_DEBUG " -O2")
+ string(REGEX REPLACE "(^| )-RTC1( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ string(REGEX REPLACE "(^| )-Od( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ string(REGEX REPLACE "(^| )-Ob0( |$)" " " VCPKG_COMBINED_C_FLAGS_DEBUG "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+endif()
+
+string(APPEND VCPKG_COMBINED_C_FLAGS_DEBUG " -I \"${CURRENT_INSTALLED_DIR}/include\"")
+string(APPEND VCPKG_COMBINED_C_FLAGS_RELEASE " -I \"${CURRENT_INSTALLED_DIR}/include\"")
+
+## Setup vcpkg toolchain
+
+set(prog_env "")
+
+if(VCPKG_DETECTED_CMAKE_C_COMPILER)
+ get_filename_component(CC_path "${VCPKG_DETECTED_CMAKE_C_COMPILER}" DIRECTORY)
+ get_filename_component(CC_filename "${VCPKG_DETECTED_CMAKE_C_COMPILER}" NAME)
+ set(ENV{CC} "${CC_filename}")
+ string(APPEND OPTIONS " --cc=${CC_filename}")
+ string(APPEND OPTIONS " --host_cc=${CC_filename}")
+ list(APPEND prog_env "${CC_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_CXX_COMPILER)
+ get_filename_component(CXX_path "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}" DIRECTORY)
+ get_filename_component(CXX_filename "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}" NAME)
+ set(ENV{CXX} "${CXX_filename}")
+ string(APPEND OPTIONS " --cxx=${CXX_filename}")
+ #string(APPEND OPTIONS " --host_cxx=${CC_filename}")
+ list(APPEND prog_env "${CXX_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_RC_COMPILER)
+ get_filename_component(RC_path "${VCPKG_DETECTED_CMAKE_RC_COMPILER}" DIRECTORY)
+ get_filename_component(RC_filename "${VCPKG_DETECTED_CMAKE_RC_COMPILER}" NAME)
+ set(ENV{WINDRES} "${RC_filename}")
+ string(APPEND OPTIONS " --windres=${RC_filename}")
+ list(APPEND prog_env "${RC_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_LINKER AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ get_filename_component(LD_path "${VCPKG_DETECTED_CMAKE_LINKER}" DIRECTORY)
+ get_filename_component(LD_filename "${VCPKG_DETECTED_CMAKE_LINKER}" NAME)
+ set(ENV{LD} "${LD_filename}")
+ string(APPEND OPTIONS " --ld=${LD_filename}")
+ #string(APPEND OPTIONS " --host_ld=${LD_filename}")
+ list(APPEND prog_env "${LD_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_NM)
+ get_filename_component(NM_path "${VCPKG_DETECTED_CMAKE_NM}" DIRECTORY)
+ get_filename_component(NM_filename "${VCPKG_DETECTED_CMAKE_NM}" NAME)
+ set(ENV{NM} "${NM_filename}")
+ string(APPEND OPTIONS " --nm=${NM_filename}")
+ list(APPEND prog_env "${NM_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_AR)
+ get_filename_component(AR_path "${VCPKG_DETECTED_CMAKE_AR}" DIRECTORY)
+ get_filename_component(AR_filename "${VCPKG_DETECTED_CMAKE_AR}" NAME)
+ if(AR_filename MATCHES [[^(llvm-)?lib\.exe$]])
+ set(ENV{AR} "ar-lib ${AR_filename}")
+ string(APPEND OPTIONS " --ar='ar-lib ${AR_filename}'")
+ else()
+ set(ENV{AR} "${AR_filename}")
+ string(APPEND OPTIONS " --ar='${AR_filename}'")
+ endif()
+ list(APPEND prog_env "${AR_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_RANLIB)
+ get_filename_component(RANLIB_path "${VCPKG_DETECTED_CMAKE_RANLIB}" DIRECTORY)
+ get_filename_component(RANLIB_filename "${VCPKG_DETECTED_CMAKE_RANLIB}" NAME)
+ set(ENV{RANLIB} "${RANLIB_filename}")
+ string(APPEND OPTIONS " --ranlib=${RANLIB_filename}")
+ list(APPEND prog_env "${RANLIB_path}")
+endif()
+
+if(VCPKG_DETECTED_CMAKE_STRIP)
+ get_filename_component(STRIP_path "${VCPKG_DETECTED_CMAKE_STRIP}" DIRECTORY)
+ get_filename_component(STRIP_filename "${VCPKG_DETECTED_CMAKE_STRIP}" NAME)
+ set(ENV{STRIP} "${STRIP_filename}")
+ string(APPEND OPTIONS " --strip=${STRIP_filename}")
+ list(APPEND prog_env "${STRIP_path}")
+endif()
+
+if(VCPKG_HOST_IS_WINDOWS)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES automake)
+ set(SHELL "${MSYS_ROOT}/usr/bin/bash.exe")
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" -c "'/usr/bin/automake' --print-lib"
+ OUTPUT_VARIABLE automake_lib
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ WORKING_DIRECTORY "${MSYS_ROOT}"
+ LOGNAME automake-print-lib
+ )
+ list(APPEND prog_env "${MSYS_ROOT}/usr/bin" "${MSYS_ROOT}${automake_lib}")
+else()
+ find_program(SHELL bash)
+endif()
+
+list(REMOVE_DUPLICATES prog_env)
+vcpkg_add_to_path(PREPEND ${prog_env})
+
+# More? OBJCC BIN2C
+
+file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+
+set(FFMPEG_PKGCONFIG_MODULES libavutil)
+
+if("nonfree" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-nonfree")
+endif()
+
+if("gpl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-gpl")
+endif()
+
+if("version3" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-version3")
+endif()
+
+if("ffmpeg" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffmpeg")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffmpeg")
+endif()
+
+if("ffplay" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffplay")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffplay")
+endif()
+
+if("ffprobe" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-ffprobe")
+else()
+ set(OPTIONS "${OPTIONS} --disable-ffprobe")
+endif()
+
+if("avcodec" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avcodec")
+ set(ENABLE_AVCODEC ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavcodec)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avcodec")
+ set(ENABLE_AVCODEC OFF)
+endif()
+
+if("avdevice" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avdevice")
+ set(ENABLE_AVDEVICE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavdevice)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avdevice")
+ set(ENABLE_AVDEVICE OFF)
+endif()
+
+if("avformat" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avformat")
+ set(ENABLE_AVFORMAT ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavformat)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avformat")
+ set(ENABLE_AVFORMAT OFF)
+endif()
+
+if("avfilter" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avfilter")
+ set(ENABLE_AVFILTER ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libavfilter)
+else()
+ set(OPTIONS "${OPTIONS} --disable-avfilter")
+ set(ENABLE_AVFILTER OFF)
+endif()
+
+if("postproc" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-postproc")
+ set(ENABLE_POSTPROC ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libpostproc)
+else()
+ set(OPTIONS "${OPTIONS} --disable-postproc")
+ set(ENABLE_POSTPROC OFF)
+endif()
+
+if("swresample" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-swresample")
+ set(ENABLE_SWRESAMPLE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libswresample)
+else()
+ set(OPTIONS "${OPTIONS} --disable-swresample")
+ set(ENABLE_SWRESAMPLE OFF)
+endif()
+
+if("swscale" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-swscale")
+ set(ENABLE_SWSCALE ON)
+ list(APPEND FFMPEG_PKGCONFIG_MODULES libswscale)
+else()
+ set(OPTIONS "${OPTIONS} --disable-swscale")
+ set(ENABLE_SWSCALE OFF)
+endif()
+
+if ("alsa" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-alsa")
+else()
+ set(OPTIONS "${OPTIONS} --disable-alsa")
+endif()
+
+if("amf" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-amf")
+else()
+ set(OPTIONS "${OPTIONS} --disable-amf")
+endif()
+
+if("aom" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libaom")
+ set(WITH_AOM ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libaom")
+ set(WITH_AOM OFF)
+endif()
+
+if("ass" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libass")
+ set(WITH_ASS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libass")
+ set(WITH_ASS OFF)
+endif()
+
+if("avisynthplus" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-avisynth")
+else()
+ set(OPTIONS "${OPTIONS} --disable-avisynth")
+endif()
+
+if("bzip2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-bzlib")
+else()
+ set(OPTIONS "${OPTIONS} --disable-bzlib")
+endif()
+
+if("dav1d" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libdav1d")
+ set(WITH_DAV1D ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libdav1d")
+ set(WITH_DAV1D OFF)
+endif()
+
+if("fdk-aac" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfdk-aac")
+ set(WITH_AAC ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfdk-aac")
+ set(WITH_AAC OFF)
+endif()
+
+if("fontconfig" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfontconfig")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfontconfig")
+endif()
+
+if("drawtext" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libharfbuzz")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libharfbuzz")
+endif()
+
+if("freetype" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfreetype")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfreetype")
+endif()
+
+if("fribidi" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libfribidi")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libfribidi")
+endif()
+
+if("iconv" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-iconv")
+ set(WITH_ICONV ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-iconv")
+ set(WITH_ICONV OFF)
+endif()
+
+if("ilbc" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libilbc")
+ set(WITH_ILBC ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libilbc")
+ set(WITH_ILBC OFF)
+endif()
+
+if("lzma" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-lzma")
+ set(WITH_LZMA ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-lzma")
+ set(WITH_LZMA OFF)
+endif()
+
+if("mp3lame" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmp3lame")
+ set(WITH_MP3LAME ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmp3lame")
+ set(WITH_MP3LAME OFF)
+endif()
+
+if("modplug" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmodplug")
+ set(WITH_MODPLUG ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmodplug")
+ set(WITH_MODPLUG OFF)
+endif()
+
+if("nvcodec" IN_LIST FEATURES)
+ #Note: the --enable-cuda option does not actually require the cuda sdk or toolset port dependency as ffmpeg uses runtime detection and dynamic loading
+ set(OPTIONS "${OPTIONS} --enable-cuda --enable-nvenc --enable-nvdec --enable-cuvid --enable-ffnvcodec")
+else()
+ set(OPTIONS "${OPTIONS} --disable-cuda --disable-nvenc --disable-nvdec --disable-cuvid --disable-ffnvcodec")
+endif()
+
+if("opencl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-opencl")
+ set(WITH_OPENCL ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-opencl")
+ set(WITH_OPENCL OFF)
+endif()
+
+if("opengl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-opengl")
+else()
+ set(OPTIONS "${OPTIONS} --disable-opengl")
+endif()
+
+if("openh264" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenh264")
+ set(WITH_OPENH264 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenh264")
+ set(WITH_OPENH264 OFF)
+endif()
+
+if("openjpeg" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenjpeg")
+ set(WITH_OPENJPEG ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenjpeg")
+ set(WITH_OPENJPEG OFF)
+endif()
+
+if("openmpt" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopenmpt")
+ set(WITH_OPENMPT ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopenmpt")
+ set(WITH_OPENMPT OFF)
+endif()
+
+if("openssl" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-openssl")
+else()
+ set(OPTIONS "${OPTIONS} --disable-openssl")
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_UWP)
+ string(APPEND OPTIONS " --enable-schannel")
+ endif()
+endif()
+
+if("opus" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libopus")
+ set(WITH_OPUS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libopus")
+ set(WITH_OPUS OFF)
+endif()
+
+if("sdl2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-sdl2")
+else()
+ set(OPTIONS "${OPTIONS} --disable-sdl2")
+endif()
+
+if("snappy" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsnappy")
+ set(WITH_SNAPPY ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsnappy")
+ set(WITH_SNAPPY OFF)
+endif()
+
+if("soxr" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsoxr")
+ set(WITH_SOXR ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsoxr")
+ set(WITH_SOXR OFF)
+endif()
+
+if("speex" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libspeex")
+ set(WITH_SPEEX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libspeex")
+ set(WITH_SPEEX OFF)
+endif()
+
+if("ssh" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libssh")
+ set(WITH_SSH ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libssh")
+ set(WITH_SSH OFF)
+endif()
+
+if("tensorflow" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtensorflow")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtensorflow")
+endif()
+
+if("tesseract" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtesseract")
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtesseract")
+endif()
+
+if("theora" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libtheora")
+ set(WITH_THEORA ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libtheora")
+ set(WITH_THEORA OFF)
+endif()
+
+if("vorbis" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libvorbis")
+ set(WITH_VORBIS ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libvorbis")
+ set(WITH_VORBIS OFF)
+endif()
+
+if("vpx" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libvpx")
+ set(WITH_VPX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libvpx")
+ set(WITH_VPX OFF)
+endif()
+
+if("vulkan" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-vulkan")
+else()
+ set(OPTIONS "${OPTIONS} --disable-vulkan")
+endif()
+
+if("webp" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libwebp")
+ set(WITH_WEBP ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libwebp")
+ set(WITH_WEBP OFF)
+endif()
+
+if("x264" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libx264")
+ set(WITH_X264 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libx264")
+ set(WITH_X264 OFF)
+endif()
+
+if("x265" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libx265")
+ set(WITH_X265 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libx265")
+ set(WITH_X265 OFF)
+endif()
+
+if("xml2" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libxml2")
+ set(WITH_XML2 ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libxml2")
+ set(WITH_XML2 OFF)
+endif()
+
+if("zlib" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-zlib")
+else()
+ set(OPTIONS "${OPTIONS} --disable-zlib")
+endif()
+
+if ("srt" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libsrt")
+ set(WITH_SRT ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libsrt")
+ set(WITH_SRT OFF)
+endif()
+
+if ("qsv" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-libmfx --enable-encoder=h264_qsv --enable-decoder=h264_qsv")
+ set(WITH_MFX ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-libmfx")
+ set(WITH_MFX OFF)
+endif()
+
+if ("vaapi" IN_LIST FEATURES)
+ set(OPTIONS "${OPTIONS} --enable-vaapi")
+ set(WITH_VAAPI ON)
+else()
+ set(OPTIONS "${OPTIONS} --disable-vaapi")
+ set(WITH_VAAPI OFF)
+endif()
+
+set(OPTIONS_CROSS "--enable-cross-compile")
+
+# ffmpeg needs --cross-prefix option to use appropriate tools for cross-compiling.
+if(VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "([^\/]*-)gcc$")
+ string(APPEND OPTIONS_CROSS " --cross-prefix=${CMAKE_MATCH_1}")
+endif()
+
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(BUILD_ARCH "x86_64")
+else()
+ set(BUILD_ARCH ${VCPKG_TARGET_ARCHITECTURE})
+endif()
+
+if (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" OR VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_find_acquire_program(GASPREPROCESSOR)
+ foreach(GAS_PATH ${GASPREPROCESSOR})
+ get_filename_component(GAS_ITEM_PATH ${GAS_PATH} DIRECTORY)
+ vcpkg_add_to_path("${GAS_ITEM_PATH}")
+ endforeach(GAS_PATH)
+ endif()
+endif()
+
+if(VCPKG_TARGET_IS_UWP)
+ set(ENV{LIBPATH} "$ENV{LIBPATH};$ENV{_WKITS10}references\\windows.foundation.foundationcontract\\2.0.0.0\\;$ENV{_WKITS10}references\\windows.foundation.universalapicontract\\3.0.0.0\\")
+ string(APPEND OPTIONS " --disable-programs")
+ string(APPEND OPTIONS " --extra-cflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --extra-cflags=-D_WIN32_WINNT=0x0A00")
+ string(APPEND OPTIONS " --extra-ldflags=-APPCONTAINER --extra-ldflags=WindowsApp.lib")
+endif()
+
+if (VCPKG_TARGET_IS_IOS)
+ set(vcpkg_target_arch "${VCPKG_TARGET_ARCHITECTURE}")
+ if (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(vcpkg_target_arch "x86_64")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ message(FATAL_ERROR "You can build for arm up to iOS 10 but ffmpeg can only be built for iOS 11.0 and later.
+ Did you mean arm64?")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ message(FATAL_ERROR "You can build for x86 up to iOS 10 but ffmpeg can only be built for iOS 11.0 and later.
+ Did you mean x64")
+ endif ()
+
+ set(vcpkg_osx_deployment_target "${VCPKG_OSX_DEPLOYMENT_TARGET}")
+ if (NOT VCPKG_OSX_DEPLOYMENT_TARGET)
+ set(vcpkg_osx_deployment_target 11.0)
+ elseif (VCPKG_OSX_DEPLOYMENT_TARGET LESS 11.0) # nowadays ffmpeg needs to be built for ios 11.0 and later
+ message(FATAL_ERROR "ffmpeg can be built only for iOS 11.0 and later but you set VCPKG_OSX_DEPLOYMENT_TARGET to
+ ${VCPKG_OSX_DEPLOYMENT_TARGET}")
+ endif ()
+
+ if (VCPKG_OSX_SYSROOT STREQUAL "iphonesimulator")
+ set(simulator "-simulator")
+ endif ()
+
+ set(OPTIONS "${OPTIONS} --extra-cflags=--target=${vcpkg_target_arch}-apple-ios${vcpkg_osx_deployment_target}${simulator}")
+ set(OPTIONS "${OPTIONS} --extra-ldflags=--target=${vcpkg_target_arch}-apple-ios${vcpkg_osx_deployment_target}${simulator}")
+
+ set(vcpkg_osx_sysroot "${VCPKG_OSX_SYSROOT}")
+ # only on x64 for some reason you need to specify the sdk path, otherwise it will try to build with the MacOS sdk
+ # (on apple silicon it's not required but shouldn't cause any problems)
+ if ((VCPKG_OSX_SYSROOT MATCHES "^(iphoneos|iphonesimulator)$") OR (NOT VCPKG_OSX_SYSROOT) OR (VCPKG_OSX_SYSROOT STREQUAL "")) # if it's not a path
+ if (VCPKG_OSX_SYSROOT MATCHES "^(iphoneos|iphonesimulator)$")
+ set(requested_sysroot "${VCPKG_OSX_SYSROOT}")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") # if the sysroot is not specified we have to guess
+ set(requested_sysroot "iphoneos")
+ elseif (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(requested_sysroot "iphonesimulator")
+ else ()
+ message(FATAL_ERROR "Unsupported build arch: ${VCPKG_TARGET_ARCHITECTURE}")
+ endif ()
+ message(STATUS "Retrieving default SDK for ${requested_sysroot}")
+ execute_process(
+ COMMAND /usr/bin/xcrun --sdk ${requested_sysroot} --show-sdk-path
+ OUTPUT_VARIABLE sdk_path
+ ERROR_VARIABLE xcrun_error
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+ )
+ if (sdk_path)
+ message(STATUS "Found!")
+ set(vcpkg_osx_sysroot "${sdk_path}")
+ else ()
+ message(FATAL_ERROR "Can't determine ${CMAKE_OSX_SYSROOT} SDK path. Error: ${xcrun_error}")
+ endif ()
+ endif ()
+ set(OPTIONS "${OPTIONS} --extra-cflags=-isysroot\"${vcpkg_osx_sysroot}\"")
+ set(OPTIONS "${OPTIONS} --extra-ldflags=-isysroot\"${vcpkg_osx_sysroot}\"")
+endif ()
+
+set(OPTIONS_DEBUG "--disable-optimizations")
+set(OPTIONS_RELEASE "--enable-optimizations")
+
+set(OPTIONS "${OPTIONS} ${OPTIONS_CROSS}")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ set(OPTIONS "${OPTIONS} --disable-static --enable-shared")
+endif()
+
+if(VCPKG_TARGET_IS_MINGW)
+ set(OPTIONS "${OPTIONS} --extra_cflags=-D_WIN32_WINNT=0x0601")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ set(OPTIONS "${OPTIONS} --extra-cflags=-DHAVE_UNISTD_H=0")
+endif()
+
+set(maybe_needed_libraries -lm)
+separate_arguments(standard_libraries NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}")
+foreach(item IN LISTS standard_libraries)
+ if(item IN_LIST maybe_needed_libraries)
+ set(OPTIONS "${OPTIONS} \"--extra-libs=${item}\"")
+ endif()
+endforeach()
+
+vcpkg_find_acquire_program(PKGCONFIG)
+set(OPTIONS "${OPTIONS} --pkg-config=\"${PKGCONFIG}\"")
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(OPTIONS "${OPTIONS} --pkg-config-flags=--static")
+endif()
+
+message(STATUS "Building Options: ${OPTIONS}")
+
+# Release build
+if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ if (VCPKG_DETECTED_MSVC)
+ set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-ldflags=-libpath:\"${CURRENT_INSTALLED_DIR}/lib\"")
+ else()
+ set(OPTIONS_RELEASE "${OPTIONS_RELEASE} --extra-ldflags=-L\"${CURRENT_INSTALLED_DIR}/lib\"")
+ endif()
+ message(STATUS "Building Release Options: ${OPTIONS_RELEASE}")
+ message(STATUS "Building ${PORT} for Release")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ # We use response files here as the only known way to handle spaces in paths
+ set(crsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/cflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_C_FLAGS_RELEASE}")
+ file(WRITE "${crsp}" "${VCPKG_COMBINED_C_FLAGS_RELEASE_SANITIZED}")
+ set(ldrsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/ldflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE_SANITIZED "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE}")
+ file(WRITE "${ldrsp}" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE_SANITIZED}")
+ set(ENV{CFLAGS} "@${crsp}")
+ # All tools except the msvc arm{,64} assembler accept @... as response file syntax.
+ # For that assembler, there is no known way to pass in flags. We must hope that not passing flags will work acceptably.
+ if(NOT VCPKG_DETECTED_MSVC OR NOT VCPKG_TARGET_ARCHITECTURE MATCHES "^arm")
+ set(ENV{ASFLAGS} "@${crsp}")
+ endif()
+ set(ENV{LDFLAGS} "@${ldrsp}")
+ set(ENV{ARFLAGS} "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE}")
+
+ set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_RELEASE}")
+ set(INST_PREFIX "${CURRENT_PACKAGES_DIR}")
+
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
+
+ z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE)
+
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" ./build.sh
+ WORKING_DIRECTORY "${BUILD_DIR}"
+ LOGNAME "build-${TARGET_TRIPLET}-rel"
+ SAVE_LOG_FILES ffbuild/config.log
+ )
+
+ z_vcpkg_restore_pkgconfig_path()
+endif()
+
+# Debug build
+if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if (VCPKG_DETECTED_MSVC)
+ set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-ldflags=-libpath:\"${CURRENT_INSTALLED_DIR}/debug/lib\"")
+ else()
+ set(OPTIONS_DEBUG "${OPTIONS_DEBUG} --extra-ldflags=-L\"${CURRENT_INSTALLED_DIR}/debug/lib\"")
+ endif()
+ message(STATUS "Building Debug Options: ${OPTIONS_DEBUG}")
+ message(STATUS "Building ${PORT} for Debug")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ set(crsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/cflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_C_FLAGS_DEBUG_SANITIZED "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
+ file(WRITE "${crsp}" "${VCPKG_COMBINED_C_FLAGS_DEBUG_SANITIZED}")
+ set(ldrsp "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/ldflags.rsp")
+ string(REGEX REPLACE "-arch [A-Za-z0-9_]+" "" VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG_SANITIZED "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG}")
+ file(WRITE "${ldrsp}" "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG_SANITIZED}")
+ set(ENV{CFLAGS} "@${crsp}")
+ if(NOT VCPKG_DETECTED_MSVC OR NOT VCPKG_TARGET_ARCHITECTURE MATCHES "^arm")
+ set(ENV{ASFLAGS} "@${crsp}")
+ endif()
+ set(ENV{LDFLAGS} "@${ldrsp}")
+ set(ENV{ARFLAGS} "${VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG}")
+
+ set(BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ set(CONFIGURE_OPTIONS "${OPTIONS} ${OPTIONS_DEBUG}")
+ set(INST_PREFIX "${CURRENT_PACKAGES_DIR}/debug")
+
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/build.sh.in" "${BUILD_DIR}/build.sh" @ONLY)
+
+ z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG)
+
+ vcpkg_execute_required_process(
+ COMMAND "${SHELL}" ./build.sh
+ WORKING_DIRECTORY "${BUILD_DIR}"
+ LOGNAME "build-${TARGET_TRIPLET}-dbg"
+ SAVE_LOG_FILES ffbuild/config.log
+ )
+
+ z_vcpkg_restore_pkgconfig_path()
+endif()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB DEF_FILES "${CURRENT_PACKAGES_DIR}/lib/*.def" "${CURRENT_PACKAGES_DIR}/debug/lib/*.def")
+
+ if(NOT VCPKG_TARGET_IS_MINGW)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(LIB_MACHINE_ARG /machine:ARM)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(LIB_MACHINE_ARG /machine:ARM64)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(LIB_MACHINE_ARG /machine:x86)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(LIB_MACHINE_ARG /machine:x64)
+ else()
+ message(FATAL_ERROR "Unsupported target architecture")
+ endif()
+
+ foreach(DEF_FILE ${DEF_FILES})
+ get_filename_component(DEF_FILE_DIR "${DEF_FILE}" DIRECTORY)
+ get_filename_component(DEF_FILE_NAME "${DEF_FILE}" NAME)
+ string(REGEX REPLACE "-[0-9]*\\.def" "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}" OUT_FILE_NAME "${DEF_FILE_NAME}")
+ file(TO_NATIVE_PATH "${DEF_FILE}" DEF_FILE_NATIVE)
+ file(TO_NATIVE_PATH "${DEF_FILE_DIR}/${OUT_FILE_NAME}" OUT_FILE_NATIVE)
+ message(STATUS "Generating ${OUT_FILE_NATIVE}")
+ vcpkg_execute_required_process(
+ COMMAND lib.exe "/def:${DEF_FILE_NATIVE}" "/out:${OUT_FILE_NATIVE}" ${LIB_MACHINE_ARG}
+ WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}"
+ LOGNAME "libconvert-${TARGET_TRIPLET}"
+ )
+ endforeach()
+ endif()
+
+ file(GLOB EXP_FILES "${CURRENT_PACKAGES_DIR}/lib/*.exp" "${CURRENT_PACKAGES_DIR}/debug/lib/*.exp")
+ file(GLOB LIB_FILES "${CURRENT_PACKAGES_DIR}/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}" "${CURRENT_PACKAGES_DIR}/debug/bin/*${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}")
+ if(VCPKG_TARGET_IS_MINGW)
+ file(GLOB LIB_FILES_2 "${CURRENT_PACKAGES_DIR}/bin/*.lib" "${CURRENT_PACKAGES_DIR}/debug/bin/*.lib")
+ endif()
+ set(files_to_remove ${EXP_FILES} ${LIB_FILES} ${LIB_FILES_2} ${DEF_FILES})
+ if(files_to_remove)
+ file(REMOVE ${files_to_remove})
+ endif()
+endif()
+
+if("ffmpeg" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffmpeg AUTO_CLEAN)
+endif()
+if("ffprobe" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffprobe AUTO_CLEAN)
+endif()
+if("ffplay" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES ffplay AUTO_CLEAN)
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include" "${CURRENT_PACKAGES_DIR}/debug/share")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
+endif()
+
+vcpkg_copy_pdbs()
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ file(GLOB pc_files "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/*.pc" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/*.pc")
+ foreach(file IN LISTS pc_files)
+ # ffmpeg exports -libpath:foo and bar.lib for transitive deps.
+ # But CMake's pkg_check_modules cannot handle this properly.
+ # pc files generally use non-msvc syntax with -Lfoo -lbar.
+ file(READ "${file}" content)
+ foreach(entry IN ITEMS Libs Libs.private)
+ if(content MATCHES "${entry}:( [^\n]*)")
+ set(old_value "${CMAKE_MATCH_1}")
+ string(REGEX REPLACE "-libpath:" "-L" new_value "${old_value}")
+ string(REGEX REPLACE " ([^ /]+)[.]lib" " -l\\1" new_value "${new_value}")
+ string(REPLACE "${entry}:${old_value}" "${entry}:${new_value}" content "${content}")
+ endif()
+ endforeach()
+ file(WRITE "${file}" "${content}")
+ endforeach()
+endif()
+vcpkg_fixup_pkgconfig()
+
+# Handle dependencies
+
+x_vcpkg_pkgconfig_get_modules(PREFIX FFMPEG_PKGCONFIG MODULES ${FFMPEG_PKGCONFIG_MODULES} LIBS)
+
+function(append_dependencies_from_libs out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "LIBS" "")
+ separate_arguments(contents UNIX_COMMAND "${arg_LIBS}")
+ list(FILTER contents EXCLUDE REGEX "^-F.+")
+ list(FILTER contents EXCLUDE REGEX "^-framework$")
+ list(FILTER contents EXCLUDE REGEX "^-L.+")
+ list(FILTER contents EXCLUDE REGEX "^-libpath:.+")
+ list(TRANSFORM contents REPLACE "^-Wl,-framework," "-l")
+ list(FILTER contents EXCLUDE REGEX "^-Wl,.+")
+ list(TRANSFORM contents REPLACE "^-l" "")
+ list(FILTER contents EXCLUDE REGEX "^avutil$")
+ list(FILTER contents EXCLUDE REGEX "^avcodec$")
+ list(FILTER contents EXCLUDE REGEX "^avdevice$")
+ list(FILTER contents EXCLUDE REGEX "^avfilter$")
+ list(FILTER contents EXCLUDE REGEX "^avformat$")
+ list(FILTER contents EXCLUDE REGEX "^postproc$")
+ list(FILTER contents EXCLUDE REGEX "^swresample$")
+ list(FILTER contents EXCLUDE REGEX "^swscale$")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ list(TRANSFORM contents TOLOWER)
+ endif()
+ if(contents)
+ list(APPEND "${out}" "${contents}")
+ set("${out}" "${${out}}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+append_dependencies_from_libs(FFMPEG_DEPENDENCIES_RELEASE LIBS "${FFMPEG_PKGCONFIG_LIBS_RELEASE}")
+append_dependencies_from_libs(FFMPEG_DEPENDENCIES_DEBUG LIBS "${FFMPEG_PKGCONFIG_LIBS_DEBUG}")
+
+# must remove duplicates from the front to respect link order so reverse first
+list(REVERSE FFMPEG_DEPENDENCIES_RELEASE)
+list(REVERSE FFMPEG_DEPENDENCIES_DEBUG)
+list(REMOVE_DUPLICATES FFMPEG_DEPENDENCIES_RELEASE)
+list(REMOVE_DUPLICATES FFMPEG_DEPENDENCIES_DEBUG)
+list(REVERSE FFMPEG_DEPENDENCIES_RELEASE)
+list(REVERSE FFMPEG_DEPENDENCIES_DEBUG)
+
+message(STATUS "Dependencies (release): ${FFMPEG_DEPENDENCIES_RELEASE}")
+message(STATUS "Dependencies (debug): ${FFMPEG_DEPENDENCIES_DEBUG}")
+
+# Handle version strings
+
+function(extract_regex_from_file out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "MAJOR" "FILE_WITHOUT_EXTENSION;REGEX" "")
+ file(READ "${arg_FILE_WITHOUT_EXTENSION}.h" contents)
+ if (contents MATCHES "${arg_REGEX}")
+ if(NOT CMAKE_MATCH_COUNT EQUAL 1)
+ message(FATAL_ERROR "Could not identify match group in regular expression \"${arg_REGEX}\"")
+ endif()
+ else()
+ if (arg_MAJOR)
+ file(READ "${arg_FILE_WITHOUT_EXTENSION}_major.h" contents)
+ if (contents MATCHES "${arg_REGEX}")
+ if(NOT CMAKE_MATCH_COUNT EQUAL 1)
+ message(FATAL_ERROR "Could not identify match group in regular expression \"${arg_REGEX}\"")
+ endif()
+ else()
+ message(WARNING "Could not find line matching \"${arg_REGEX}\" in file \"${arg_FILE_WITHOUT_EXTENSION}_major.h\"")
+ endif()
+ else()
+ message(WARNING "Could not find line matching \"${arg_REGEX}\" in file \"${arg_FILE_WITHOUT_EXTENSION}.h\"")
+ endif()
+ endif()
+ set("${out}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
+endfunction()
+
+function(extract_version_from_component out)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "COMPONENT" "")
+ string(TOLOWER "${arg_COMPONENT}" component_lower)
+ string(TOUPPER "${arg_COMPONENT}" component_upper)
+ extract_regex_from_file(major_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ MAJOR
+ REGEX "#define ${component_upper}_VERSION_MAJOR[ ]+([0-9]+)"
+ )
+ extract_regex_from_file(minor_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ REGEX "#define ${component_upper}_VERSION_MINOR[ ]+([0-9]+)"
+ )
+ extract_regex_from_file(micro_version
+ FILE_WITHOUT_EXTENSION "${SOURCE_PATH}/${component_lower}/version"
+ REGEX "#define ${component_upper}_VERSION_MICRO[ ]+([0-9]+)"
+ )
+ set("${out}" "${major_version}.${minor_version}.${micro_version}" PARENT_SCOPE)
+endfunction()
+
+extract_regex_from_file(FFMPEG_VERSION
+ FILE_WITHOUT_EXTENSION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/libavutil/ffversion"
+ REGEX "#define FFMPEG_VERSION[ ]+\"(.+)\""
+)
+
+extract_version_from_component(LIBAVUTIL_VERSION
+ COMPONENT libavutil)
+extract_version_from_component(LIBAVCODEC_VERSION
+ COMPONENT libavcodec)
+extract_version_from_component(LIBAVDEVICE_VERSION
+ COMPONENT libavdevice)
+extract_version_from_component(LIBAVFILTER_VERSION
+ COMPONENT libavfilter)
+extract_version_from_component(LIBAVFORMAT_VERSION
+ COMPONENT libavformat)
+extract_version_from_component(LIBSWRESAMPLE_VERSION
+ COMPONENT libswresample)
+extract_version_from_component(LIBSWSCALE_VERSION
+ COMPONENT libswscale)
+
+# Handle copyright
+file(STRINGS "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-out.log" LICENSE_STRING REGEX "License: .*" LIMIT_COUNT 1)
+if(LICENSE_STRING STREQUAL "License: LGPL version 2.1 or later")
+ set(LICENSE_FILE "COPYING.LGPLv2.1")
+elseif(LICENSE_STRING STREQUAL "License: LGPL version 3 or later")
+ set(LICENSE_FILE "COPYING.LGPLv3")
+elseif(LICENSE_STRING STREQUAL "License: GPL version 2 or later")
+ set(LICENSE_FILE "COPYING.GPLv2")
+elseif(LICENSE_STRING STREQUAL "License: GPL version 3 or later")
+ set(LICENSE_FILE "COPYING.GPLv3")
+elseif(LICENSE_STRING STREQUAL "License: nonfree and unredistributable")
+ set(LICENSE_FILE "COPYING.NONFREE")
+ file(WRITE "${SOURCE_PATH}/${LICENSE_FILE}" "${LICENSE_STRING}")
+else()
+ message(FATAL_ERROR "Failed to identify license (${LICENSE_STRING})")
+endif()
+
+configure_file("${CMAKE_CURRENT_LIST_DIR}/FindFFMPEG.cmake.in" "${CURRENT_PACKAGES_DIR}/share/${PORT}/FindFFMPEG.cmake" @ONLY)
+configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
+
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" AND NOT VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_OSX AND NOT VCPKG_TARGET_IS_IOS)
+ file(APPEND "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" "
+To use the static libraries to build your own shared library,
+you may need to add the following link option for your library:
+
+ -Wl,-Bsymbolic
+")
+endif()
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/${LICENSE_FILE}")