This might be a patch that works if the library is found via pkgconfig but not via cmake
--- mediastreamer2-4.4.21.orig/src/CMakeLists.txt +++ mediastreamer2-4.4.21/src/CMakeLists.txt @@ -495,12 +495,16 @@ if(ENABLE_STATIC) ) endif() if(ENABLE_SHARED) - add_library(mediastreamer SHARED ${MEDIASTREAMER2_HEADER_FILES} ${SOURCE_FILES_ALL}) - set_target_properties(mediastreamer PROPERTIES LINKER_LANGUAGE CXX) + add_library(mediastreamer_base SHARED ${MEDIASTREAMER2_HEADER_FILES} ${BASE_SOURCE_FILES_C}) + set_target_properties(mediastreamer_base PROPERTIES LINKER_LANGUAGE CXX) + add_library(mediastreamer_voip SHARED ${MEDIASTREAMER2_HEADER_FILES} ${VOIP_SOURCE_FILES_ALL}) + set_target_properties(mediastreamer_voip PROPERTIES LINKER_LANGUAGE CXX) if(LINK_FLAGS_STR) - set_target_properties(mediastreamer PROPERTIES LINK_FLAGS "${LINK_FLAGS_STR}") + set_target_properties(mediastreamer_base PROPERTIES LINK_FLAGS "${LINK_FLAGS_STR}") + set_target_properties(mediastreamer_voip PROPERTIES LINK_FLAGS "${LINK_FLAGS_STR}") endif() - add_dependencies(mediastreamer ${MS2_DEPENDENCIES}) + add_dependencies(mediastreamer_base ${MS2_DEPENDENCIES}) + add_dependencies(mediastreamer_voip ${MS2_DEPENDENCIES}) if(APPLE) if(IOS) set(MIN_OS ${LINPHONE_IOS_DEPLOYMENT_TARGET}) @@ -526,14 +530,21 @@ if(ENABLE_SHARED) endif() else() # Do not version shared library on Android - set_target_properties(mediastreamer PROPERTIES SOVERSION ${MEDIASTREAMER_SO_VERSION}) + set_target_properties(mediastreamer_base PROPERTIES SOVERSION ${MEDIASTREAMER_SO_VERSION}) + set_target_properties(mediastreamer_voip PROPERTIES SOVERSION ${MEDIASTREAMER_SO_VERSION}) endif() - target_include_directories(mediastreamer INTERFACE + target_include_directories(mediastreamer_base INTERFACE $<INSTALL_INTERFACE:include/> $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/> PRIVATE ${MEDIASTREAMER2_INCLUDE_DIRS} ) - target_link_libraries(mediastreamer PRIVATE ${LINK_LIBS}) + target_include_directories(mediastreamer_voip INTERFACE + $<INSTALL_INTERFACE:include/> + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/> + PRIVATE ${MEDIASTREAMER2_INCLUDE_DIRS} + ) + target_link_libraries(mediastreamer_base PRIVATE ${LINK_LIBS}) + target_link_libraries(mediastreamer_voip PRIVATE ${LINK_LIBS}) if(IOS) target_link_libraries(mediastreamer INTERFACE "-framework Foundation" "-framework AVFoundation") endif() @@ -545,7 +556,14 @@ if(ENABLE_SHARED) ) endif() endif() - install(TARGETS mediastreamer EXPORT ${EXPORT_TARGETS_NAME}Targets + install(TARGETS mediastreamer_base EXPORT ${EXPORT_TARGETS_NAME}Targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION Frameworks + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) + install(TARGETS mediastreamer_voip EXPORT ${EXPORT_TARGETS_NAME}Targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} --- mediastreamer2-4.4.21.orig/tools/CMakeLists.txt +++ mediastreamer2-4.4.21/tools/CMakeLists.txt @@ -28,7 +28,7 @@ if (IOS) endif() if(ENABLE_SHARED) - set(MS2_LIBS_FOR_TOOLS mediastreamer) + set(MS2_LIBS_FOR_TOOLS mediastreamer_voip mediastreamer_base) else() set(MS2_LIBS_FOR_TOOLS mediastreamer-static) if(XV_FOUND) --- mediastreamer2-4.4.21.orig/cmake/Mediastreamer2Config.cmake.in +++ mediastreamer2-4.4.21/cmake/Mediastreamer2Config.cmake.in @@ -36,7 +36,7 @@ include(CMakeFindDependencyMacro) include("${CMAKE_CURRENT_LIST_DIR}/Mediastreamer2Targets.cmake") if(@ENABLE_SHARED@) - set(MEDIASTREAMER2_TARGETNAME mediastreamer) + set(MEDIASTREAMER2_TARGETNAME mediastreamer_voip mediastreamer_base) set(MEDIASTREAMER2_LIBRARIES ${MEDIASTREAMER2_TARGETNAME}) else() set(MEDIASTREAMER2_TARGETNAME mediastreamer-static) I don't understand how such interfaces work... G. I tried a simple CMakeLists.txt project(foo) cmake_minimum_required(VERSION 3.18) find_package(Mediastreamer2 REQUIRED) add_executable(main main.c) target_link_libraries(main mediastreamer2) but fails with: cmake .. -- The C compiler identification is GNU 10.2.1 -- The CXX compiler identification is GNU 10.2.1 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at /usr/share/Mediastreamer2/cmake/Mediastreamer2Config.cmake:68 (get_target_property): get_target_property() called with non-existent target "mediastreamer". Call Stack (most recent call first): CMakeLists.txt:3 (find_package) CMake Error at /usr/share/Mediastreamer2/cmake/Mediastreamer2Config.cmake:76 (get_target_property): get_target_property() called with non-existent target "mediastreamer". Call Stack (most recent call first): CMakeLists.txt:3 (find_package) -- Configuring incomplete, errors occurred! See also "/foo/foo/CMakeFiles/CMakeOutput.log".