aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias C. M. Troffaes <matthias.troffaes@gmail.com>2020-10-20 19:28:09 +0100
committerGitHub <noreply@github.com>2020-10-20 11:28:09 -0700
commit83ce14a29a916a08d4c4a926427ca2985320b3cc (patch)
tree06c377171c3e27aa0aeaadacaa7b5be9987d2d9a
parent91b255887ccbab1c085c38a71a8c3728c40dd527 (diff)
downloadvcpkg-83ce14a29a916a08d4c4a926427ca2985320b3cc.tar.gz
vcpkg-83ce14a29a916a08d4c4a926427ca2985320b3cc.zip
[ffmpeg] fix theora, speex, and openssl static linkage, and refactor/robustify library selection code into functions (#14026)
-rw-r--r--ports/ffmpeg/CONTROL2
-rw-r--r--ports/ffmpeg/FindFFMPEG.cmake.in144
2 files changed, 71 insertions, 75 deletions
diff --git a/ports/ffmpeg/CONTROL b/ports/ffmpeg/CONTROL
index de7d3a5f4..5cdcb190c 100644
--- a/ports/ffmpeg/CONTROL
+++ b/ports/ffmpeg/CONTROL
@@ -1,6 +1,6 @@
Source: ffmpeg
Version: 4.3.1
-Port-Version: 1
+Port-Version: 2
Homepage: https://ffmpeg.org
Description: a library to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.
diff --git a/ports/ffmpeg/FindFFMPEG.cmake.in b/ports/ffmpeg/FindFFMPEG.cmake.in
index db970a309..a96c04235 100644
--- a/ports/ffmpeg/FindFFMPEG.cmake.in
+++ b/ports/ffmpeg/FindFFMPEG.cmake.in
@@ -29,6 +29,37 @@ include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake)
include(${CMAKE_ROOT}/Modules/CMakeFindDependencyMacro.cmake)
+function(select_library_configurations_from_names)
+ cmake_parse_arguments(_slc "" "BASENAME" "NAMES;NAMES_RELEASE;NAMES_DEBUG" ${ARGN})
+ list(APPEND _slc_NAMES_RELEASE ${_slc_NAMES})
+ list(APPEND _slc_NAMES_DEBUG ${_slc_NAMES})
+ find_library(${_slc_BASENAME}_LIBRARY_RELEASE NAMES ${_slc_NAMES_RELEASE} PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
+ find_library(${_slc_BASENAME}_LIBRARY_DEBUG NAMES ${_slc_NAMES_DEBUG} PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
+ select_library_configurations(${_slc_BASENAME})
+ set(${_slc_BASENAME}_LIBRARIES ${${_slc_BASENAME}_LIBRARIES} PARENT_SCOPE)
+endfunction()
+
+function(select_library_configurations_from_targets)
+ cmake_parse_arguments(_slc "" "BASENAME" "TARGETS" ${ARGN})
+ foreach(_target ${_slc_TARGETS})
+ get_target_property(_rel ${_target} IMPORTED_LOCATION_RELEASE)
+ get_target_property(_dbg ${_target} IMPORTED_LOCATION_DEBUG)
+ get_target_property(_deps ${_target} INTERFACE_LINK_LIBRARIES)
+ list(APPEND ${_slc_BASENAME}_LIBRARY_RELEASE ${_rel})
+ list(APPEND ${_slc_BASENAME}_LIBRARY_DEBUG ${_dbg})
+ foreach(_dep ${_deps})
+ if(TARGET ${_dep})
+ get_target_property(_dep_rel ${_dep} IMPORTED_LOCATION_RELEASE)
+ get_target_property(_dep_dbg ${_dep} IMPORTED_LOCATION_DEBUG)
+ list(APPEND ${_slc_BASENAME}_LIBRARY_RELEASE ${_dep_rel})
+ list(APPEND ${_slc_BASENAME}_LIBRARY_DEBUG ${_dep_dbg})
+ endif()
+ endforeach()
+ endforeach()
+ select_library_configurations(${_slc_BASENAME})
+ set(${_slc_BASENAME}_LIBRARIES ${${_slc_BASENAME}_LIBRARIES} PARENT_SCOPE)
+endfunction()
+
set(FFMPEG_VERSION "4.2")
find_dependency(Threads)
@@ -41,9 +72,8 @@ endif()
if(@ENABLE_BZIP2@)
find_dependency(BZip2)
- get_target_property(BZip2_LIBRARY_RELEASE BZip2::BZip2 IMPORTED_LOCATION_RELEASE)
- get_target_property(BZip2_LIBRARY_DEBUG BZip2::BZip2 IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${BZip2_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${BZip2_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME BZip2 TARGETS BZip2::BZip2)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${BZip2_LIBRARIES})
endif()
if(@ENABLE_ICONV@)
@@ -52,25 +82,19 @@ if(@ENABLE_ICONV@)
endif()
if(@ENABLE_FDKAAC@)
- find_library(FDK_LIBRARY_RELEASE NAMES fdk-aac libfdk-aac PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(FDK_LIBRARY_DEBUG NAMES fdk-aac libfdk-aac PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(FDK)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${FDK_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${FDK_LIBRARY_RELEASE}>")
+ select_library_configurations_from_names(BASENAME FDK NAMES fdk-aac libfdk-aac)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${FDK_LIBRARIES})
endif()
if(@ENABLE_LZMA@)
find_dependency(LibLZMA)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${LibLZMA_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${LibLZMA_LIBRARY_RELEASE}>")
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${LibLZMA_LIBRARIES})
endif()
if(@ENABLE_LAME@)
find_dependency(mp3lame)
- get_target_property(LAME_LIBRARY_RELEASE mp3lame::mp3lame IMPORTED_LOCATION_RELEASE)
- get_target_property(LAME_LIBRARY_DEBUG mp3lame::mp3lame IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${LAME_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${LAME_LIBRARY_RELEASE}>")
- get_target_property(LAMEMPG_LIBRARY_RELEASE mp3lame::mpghip IMPORTED_LOCATION_RELEASE)
- get_target_property(LAMEMPG_LIBRARY_DEBUG mp3lame::mpghip IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${LAMEMPG_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${LAMEMPG_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME mp3lame TARGETS mp3lame::mp3lame mp3lame::mpghip)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${mp3lame_LIBRARIES})
endif()
if(@ENABLE_OPENCL@)
@@ -80,105 +104,78 @@ endif()
if(@ENABLE_OPENSSL@)
find_dependency(OpenSSL)
- get_target_property(LIBSSL_LIBRARY_RELEASE OpenSSL::SSL IMPORTED_LOCATION_RELEASE)
- get_target_property(LIBSSL_LIBRARY_DEBUG OpenSSL::SSL IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${LIBSSL_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${LIBSSL_LIBRARY_RELEASE}>")
- get_target_property(LIBCRYPTO_LIBRARY_RELEASE OpenSSL::Crypto IMPORTED_LOCATION_RELEASE)
- get_target_property(LIBCRYPTO_LIBRARY_DEBUG OpenSSL::Crypto IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${LIBCRYPTO_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${LIBCRYPTO_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME SSL TARGETS OpenSSL::SSL OpenSSL::Crypto)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${SSL_LIBRARIES})
+ if(WIN32 AND NOT CYGWIN)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS Crypt32)
+ endif()
endif()
if(@ENABLE_OPUS@)
find_dependency(Opus)
- get_target_property(OPUS_LIBRARY_RELEASE Opus::opus IMPORTED_LOCATION_RELEASE)
- get_target_property(OPUS_LIBRARY_DEBUG Opus::opus IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${OPUS_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${OPUS_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME Opus TARGETS Opus::opus)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${Opus_LIBRARIES})
endif()
if(@ENABLE_SDL2@)
find_dependency(SDL2)
if(TARGET SDL2::SDL2-static)
- get_target_property(SDL2_LIBRARY_RELEASE SDL2::SDL2-static IMPORTED_LOCATION_RELEASE)
- get_target_property(SDL2_LIBRARY_DEBUG SDL2::SDL2-static IMPORTED_LOCATION_DEBUG)
+ select_library_configurations_from_targets(BASENAME SDL2 TARGETS SDL2::SDL2-static)
else()
- get_target_property(SDL2_LIBRARY_RELEASE SDL2::SDL2 IMPORTED_LOCATION_RELEASE)
- get_target_property(SDL2_LIBRARY_DEBUG SDL2::SDL2 IMPORTED_LOCATION_DEBUG)
+ select_library_configurations_from_targets(BASENAME SDL2 TARGETS SDL2::SDL2)
endif()
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${SDL2_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${SDL2_LIBRARY_RELEASE}>")
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${SDL2_LIBRARIES})
endif()
if(@ENABLE_SNAPPY@)
find_dependency(Snappy)
- get_target_property(SNAPPY_LIBRARY_RELEASE Snappy::snappy IMPORTED_LOCATION_RELEASE)
- get_target_property(SNAPPY_LIBRARY_DEBUG Snappy::snappy IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${SNAPPY_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${SNAPPY_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME Snappy TARGETS Snappy::snappy)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${Snappy_LIBRARIES})
endif()
if(@ENABLE_SOXR@)
- find_library(SOXR_LIBRARY_RELEASE NAMES soxr PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(SOXR_LIBRARY_DEBUG NAMES soxr PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(SOXR)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${SOXR_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${SOXR_LIBRARY_RELEASE}>")
+ select_library_configurations_from_names(BASENAME SOXR NAMES soxr)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${SOXR_LIBRARIES})
endif()
if(@ENABLE_SPEEX@)
- find_library(SPEEX_LIBRARY_RELEASE NAMES speex libspeex PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(SPEEX_LIBRARY_DEBUG NAMES speex libspeex PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(SPEEX)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${SPEEX_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${SPEEX_LIBRARY_RELEASE}>")
+ select_library_configurations_from_names(BASENAME SPEEX NAMES_RELEASE libspeex NAMES_DEBUG libspeexd)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${SPEEX_LIBRARIES})
endif()
if(@ENABLE_THEORA@)
- find_library(THEORA_LIBRARY_RELEASE NAMES theora PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(THEORA_LIBRARY_DEBUG NAMES theora PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(THEORA)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${THEORA_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${THEORA_LIBRARY_RELEASE}>")
+ find_dependency(Ogg) # ensure Ogg::ogg is defined as a target
+ find_dependency(unofficial-theora)
+ select_library_configurations_from_targets(BASENAME THEORA TARGETS unofficial::theora::theoraenc)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${THEORA_LIBRARIES})
endif()
if(@ENABLE_VORBIS@)
find_dependency(Vorbis)
- get_target_property(VORBIS_LIBRARY_RELEASE Vorbis::vorbis IMPORTED_LOCATION_RELEASE)
- get_target_property(VORBIS_LIBRARY_DEBUG Vorbis::vorbis IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${VORBIS_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${VORBIS_LIBRARY_RELEASE}>")
- get_target_property(VORBISENC_LIBRARY_RELEASE Vorbis::vorbisenc IMPORTED_LOCATION_RELEASE)
- get_target_property(VORBISENC_LIBRARY_DEBUG Vorbis::vorbisenc IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${VORBISENC_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${VORBISENC_LIBRARY_RELEASE}>")
- get_target_property(VORBIS_DEP_LIBRARIES Vorbis::vorbis INTERFACE_LINK_LIBRARIES)
- foreach(deps ${VORBIS_DEP_LIBRARIES})
- if(TARGET ${deps})
- get_target_property(VORBIS_DEP_LIBRARY_RELEASE ${deps} IMPORTED_LOCATION_RELEASE)
- get_target_property(VORBIS_DEP_LIBRARY_DEBUG ${deps} INTERFACE_LINK_LIBRARIES)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${VORBIS_DEP_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${VORBIS_DEP_LIBRARY_RELEASE}>")
- endif()
- endforeach()
+ select_library_configurations_from_targets(BASENAME vorbis TARGETS Vorbis::vorbis Vorbis::vorbisenc)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${vorbis_LIBRARIES})
endif()
if(@ENABLE_VPX@)
find_dependency(unofficial-libvpx)
- get_target_property(VPX_LIBRARY_RELEASE unofficial::libvpx::libvpx IMPORTED_LOCATION_RELEASE)
- get_target_property(VPX_LIBRARY_DEBUG unofficial::libvpx::libvpx IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${VPX_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${VPX_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME libvpx TARGETS unofficial::libvpx::libvpx)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${libvpx_LIBRARIES})
endif()
if(@ENABLE_WAVPACK@)
find_dependency(wavpack)
- get_target_property(WAVPACK_LIBRARY_RELEASE WavPack::wavpack IMPORTED_LOCATION_RELEASE)
- get_target_property(WAVPACK_LIBRARY_DEBUG WavPack::wavpack IMPORTED_LOCATION_DEBUG)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${WAVPACK_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${WAVPACK_LIBRARY_RELEASE}>")
+ select_library_configurations_from_targets(BASENAME wavpack TARGETS WavPack::wavpack)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${wavpack_LIBRARIES})
endif()
if(@ENABLE_X264@)
- find_library(X264_LIBRARY_RELEASE NAMES x264 libx264 PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(X264_LIBRARY_DEBUG NAMES x264 libx264 PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(X264)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${X264_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${X264_LIBRARY_RELEASE}>")
+ select_library_configurations_from_names(BASENAME X264 NAMES x264 libx264)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${X264_LIBRARIES})
endif()
if(@ENABLE_X265@)
- find_library(X265_LIBRARY_RELEASE NAMES x265 x265-static PATHS ${_IMPORT_PREFIX}/lib/ NO_DEFAULT_PATH)
- find_library(X265_LIBRARY_DEBUG NAMES x265 x265-static PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
- select_library_configurations(X265)
- list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS "$<$<CONFIG:Debug>:${X265_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${X265_LIBRARY_RELEASE}>")
+ select_library_configurations_from_names(BASENAME X265 NAMES x265 x265-static)
+ list(APPEND FFMPEG_PLATFORM_DEPENDENT_LIBS ${X265_LIBRARIES})
endif()
if(@ENABLE_ZLIB@)
@@ -214,9 +211,8 @@ macro(FFMPEG_FIND varname shortname headername)
find_library(FFMPEG_${varname}_LIBRARY_DEBUG NAMES ${shortname}d ${shortname} PATHS ${_IMPORT_PREFIX}/debug/lib/ NO_DEFAULT_PATH)
get_filename_component(FFMPEG_${varname}_LIBRARY_RELEASE_DIR ${FFMPEG_${varname}_LIBRARY_RELEASE} DIRECTORY)
get_filename_component(FFMPEG_${varname}_LIBRARY_DEBUG_DIR ${FFMPEG_${varname}_LIBRARY_DEBUG} DIRECTORY)
- #select_library_configurations(FFMPEG_${varname})
- set(FFMPEG_${varname}_LIBRARY "$<$<CONFIG:Debug>:${FFMPEG_${varname}_LIBRARY_DEBUG}>$<$<NOT:$<CONFIG:Debug>>:${FFMPEG_${varname}_LIBRARY_RELEASE}>" CACHE STRING "")
- set(FFMPEG_${varname}_LIBRARIES ${FFMPEG_${varname}_LIBRARY} CACHE STRING "")
+ select_library_configurations(FFMPEG_${varname})
+ set(FFMPEG_${varname}_LIBRARY ${FFMPEG_${varname}_LIBRARY} CACHE STRING "")
endif()
if (FFMPEG_${varname}_LIBRARY AND FFMPEG_${varname}_INCLUDE_DIRS)
set(FFMPEG_${varname}_FOUND TRUE BOOL)