From 5d02d9591a1501d6a3cf9aa3ae891f88823cb9d4 Mon Sep 17 00:00:00 2001 From: Frankie Dintino Date: Mon, 22 Jul 2024 13:24:32 -0400 Subject: [PATCH] fix: link against transitive libaom library dependencies fixes #2274 --- cmake/Modules/Findaom.cmake | 9 +++++++++ cmake/Modules/LocalAom.cmake | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/cmake/Modules/Findaom.cmake b/cmake/Modules/Findaom.cmake index e6b003fb62..6f7a638c11 100644 --- a/cmake/Modules/Findaom.cmake +++ b/cmake/Modules/Findaom.cmake @@ -42,9 +42,18 @@ mark_as_advanced(AOM_INCLUDE_DIR AOM_LIBRARY AOM_LIBRARIES) if(AOM_LIBRARY) if("${AOM_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$") add_library(aom STATIC IMPORTED GLOBAL) + set(_AOM_PC_PREFIX "_AOM_STATIC") else() add_library(aom SHARED IMPORTED GLOBAL) + set(_AOM_PC_PREFIX "_AOM") endif() set_target_properties(aom PROPERTIES IMPORTED_LOCATION "${AOM_LIBRARY}") target_include_directories(aom INTERFACE ${AOM_INCLUDE_DIR}) + + target_link_directories(aom INTERFACE "${${_AOM_PC_PREFIX}_LIBRARY_DIRS}") + + set(_AOM_PC_LIBRARIES "${${_AOM_PC_PREFIX}_LIBRARIES}") + # remove "aom" so we only have library dependencies + list(REMOVE_ITEM _AOM_PC_LIBRARIES "aom") + target_link_libraries(aom INTERFACE "${_AOM_PC_LIBRARIES}") endif() diff --git a/cmake/Modules/LocalAom.cmake b/cmake/Modules/LocalAom.cmake index ebeae0eeec..90d9d9fc9e 100644 --- a/cmake/Modules/LocalAom.cmake +++ b/cmake/Modules/LocalAom.cmake @@ -23,6 +23,23 @@ if(EXISTS "${LIB_FILENAME}") # ext/avm/aom/aom_encoder.h includes config/aom_config.h which is generated by the local build of avm. target_include_directories(aom INTERFACE "${AOM_EXT_SOURCE_DIR}/build.libavif") endif() + + # Add link dependency flags from the aom.pc file in ext/aom or ext/avm + # by prepending the build directory to PKG_CONFIG_PATH and then calling + # pkg_check_modules + if(MSVC) + set(ENV{PKG_CONFIG_PATH} "${AOM_EXT_SOURCE_DIR}/build.libavif;$ENV{PKG_CONFIG_PATH}") + else() + set(ENV{PKG_CONFIG_PATH} "${AOM_EXT_SOURCE_DIR}/build.libavif:$ENV{PKG_CONFIG_PATH}") + endif() + + pkg_check_modules(_AOM QUIET aom) + target_link_directories(aom INTERFACE ${_AOM_STATIC_LIBRARY_DIRS}) + + set(_AOM_PC_LIBRARIES ${_AOM_STATIC_LIBRARIES}) + # remove "aom" so we only have library dependencies + list(REMOVE_ITEM _AOM_PC_LIBRARIES "aom") + target_link_libraries(aom INTERFACE ${_AOM_PC_LIBRARIES}) else() message(STATUS "${AOM_MESSAGE_PREFIX}: compiled library not found at ${LIB_FILENAME}, using FetchContent") if(EXISTS "${AOM_EXT_SOURCE_DIR}")