From 2e1d9c80d9ddc2807d6ef01abdcd4bf6b2083fa6 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Tue, 19 Apr 2022 15:54:00 +0400 Subject: [PATCH] Workaround cmake's random library order in external_ffmpeg --- external/ffmpeg/CMakeLists.txt | 91 ++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 36 deletions(-) diff --git a/external/ffmpeg/CMakeLists.txt b/external/ffmpeg/CMakeLists.txt index a83053f..5b17ff7 100644 --- a/external/ffmpeg/CMakeLists.txt +++ b/external/ffmpeg/CMakeLists.txt @@ -24,45 +24,64 @@ if (DESKTOP_APP_USE_PACKAGED) PkgConfig::SWSCALE PkgConfig::SWRESAMPLE ) + + return() +endif() + +set(ffmpeg_lib_list) + +if (LINUX) + list(APPEND ffmpeg_lib_list + -lavformat + -lavcodec + -lswresample + -lswscale + -lavutil + ) else() - if (LINUX) - target_link_static_libraries(external_ffmpeg - INTERFACE - avformat - avcodec - swresample - swscale - avutil - ) - else() - set(ffmpeg_lib_loc ${libs_loc}/ffmpeg) + set(ffmpeg_lib_loc ${libs_loc}/ffmpeg) - target_include_directories(external_ffmpeg SYSTEM - INTERFACE - ${ffmpeg_lib_loc} - ) - - target_link_libraries(external_ffmpeg - INTERFACE - ${ffmpeg_lib_loc}/libavformat/libavformat.a - ${ffmpeg_lib_loc}/libavcodec/libavcodec.a - ${ffmpeg_lib_loc}/libswresample/libswresample.a - ${ffmpeg_lib_loc}/libswscale/libswscale.a - ${ffmpeg_lib_loc}/libavutil/libavutil.a - ) - endif() - - target_link_libraries(external_ffmpeg + target_include_directories(external_ffmpeg SYSTEM INTERFACE - $ - $ - $ - $ + ${ffmpeg_lib_loc} ) - if (APPLE) - target_link_libraries(external_ffmpeg INTERFACE bz2) - elseif (LINUX) - target_link_static_libraries(external_ffmpeg INTERFACE lzma) - endif() + list(APPEND ffmpeg_lib_list + ${ffmpeg_lib_loc}/libavformat/libavformat.a + ${ffmpeg_lib_loc}/libavcodec/libavcodec.a + ${ffmpeg_lib_loc}/libswresample/libswresample.a + ${ffmpeg_lib_loc}/libswscale/libswscale.a + ${ffmpeg_lib_loc}/libavutil/libavutil.a + ) endif() + +list(APPEND ffmpeg_lib_list + $ + $ +) + +if (APPLE) + list(APPEND ffmpeg_lib_list bz2) +elseif (LINUX) + list(APPEND ffmpeg_lib_list -llzma) +endif() + +# Workaround cmake's random order on Linux... +if (LINUX) + list(JOIN ffmpeg_lib_list , ffmpeg_lib_link) + target_link_libraries(external_ffmpeg + INTERFACE + -Wl,--push-state,-Bstatic,${ffmpeg_lib_link},--pop-state + ) +else() + target_link_libraries(external_ffmpeg + INTERFACE + ${ffmpeg_lib_list} + ) +endif() + +target_link_libraries(external_ffmpeg +INTERFACE + $ + $ +)