Description: Add option to install only BUILD_SHARED_LIBS-matching files
 TD_ENABLE_FILTERED_INSTALL allows limiting installed libraries & supporting files to only those matching
 BUILD_SHARED_LIBS.
Author: Cosima Neidahl <opna2608@protonmail.com>
Origin: backport, https://github.com/tdlib/td/commit/1e380de89fddff7132b31372f3c90091b6375077.patch
Bug: https://github.com/tdlib/td/issues/1810
Forwarded: https://github.com/tdlib/td/pull/3081
Applied-Upstream: 1.8.38
Last-Update: 2025-01-10
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/CMake/GeneratePkgConfig.cmake
+++ b/CMake/GeneratePkgConfig.cmake
@@ -88,5 +88,13 @@
 Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
 ${REQUIRES}${LIBRARIES}")
 
-  install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+  get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
+  if (NOT (LIBRARY_TYPE STREQUAL STATIC_LIBRARY OR LIBRARY_TYPE STREQUAL SHARED_LIBRARY))
+    message(FATAL_ERROR "Don't know how to handle ${TARGET} of type ${LIBRARY_TYPE}")
+  endif()
+  if (NOT TD_ENABLE_FILTERED_INSTALL
+    OR (LIBRARY_TYPE STREQUAL SHARED_LIBRARY AND BUILD_SHARED_LIBS)
+    OR (LIBRARY_TYPE STREQUAL STATIC_LIBRARY AND NOT BUILD_SHARED_LIBS))
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+  endif()
 endfunction()
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,7 @@
 include(PreventInSourceBuild)
 prevent_in_source_build()
 
+option(TD_ENABLE_FILTERED_INSTALL "Use \"ON\" to limit installation to files (libraries, dev files) relevant for the chosen \"BUILD_SHARED_LIBS\" value." OFF)
 option(TD_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TDLib API.")
 option(TD_ENABLE_DOTNET "Use \"ON\" to enable generation of C++/CLI or C++/CX TDLib API bindings.")
 
@@ -1013,18 +1014,22 @@
 set(INSTALL_TARGETS tdjson TdJson)
 set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private tdclient tdcore tdapi TdStatic)
 
-install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
-  INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
+  install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+  )
+endif()
 
-install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+  )
+endif()
 
 # generate pkg-config files
 include(GeneratePkgConfig)
@@ -1048,11 +1053,21 @@
 generate_pkgconfig(tdjson "Telegram Library - JSON interface (shared)")
 generate_pkgconfig(tdjson_static "Telegram Library - JSON interface (static)")
 
-install(EXPORT TdTargets
-  FILE TdTargets.cmake
-  NAMESPACE Td::
-  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
+  install(EXPORT TdTargets
+    FILE TdTargets.cmake
+    NAMESPACE Td::
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
+  )
+endif()
+
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(EXPORT TdStaticTargets
+    FILE TdStaticTargets.cmake
+    NAMESPACE Td::
+    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
+  )
+endif()
 
 # Install tdjson/tdjson_static:
 install(FILES ${TD_JSON_HEADERS} "${CMAKE_CURRENT_BINARY_DIR}/td/telegram/tdjson_export.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/td/telegram")
--- a/TdConfig.cmake
+++ b/TdConfig.cmake
@@ -1,3 +1,8 @@
 include(CMakeFindDependencyMacro)
 #TODO: write all external dependencies
-include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+  include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
+endif()
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
+  include("${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
+endif()
--- a/tdactor/CMakeLists.txt
+++ b/tdactor/CMakeLists.txt
@@ -56,7 +56,9 @@
   target_link_libraries(example PRIVATE tdactor)
 endif()
 
-install(TARGETS tdactor EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdactor EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
--- a/tddb/CMakeLists.txt
+++ b/tddb/CMakeLists.txt
@@ -56,7 +56,9 @@
   target_link_libraries(binlog_dump PRIVATE tddb)
 endif()
 
-install(TARGETS tddb EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tddb EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
--- a/tdnet/CMakeLists.txt
+++ b/tdnet/CMakeLists.txt
@@ -84,7 +84,9 @@
   target_link_libraries(tdnet PRIVATE ${FOUNDATION_LIBRARY})
 endif()
 
-install(TARGETS tdnet EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdnet EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
--- a/tdutils/CMakeLists.txt
+++ b/tdutils/CMakeLists.txt
@@ -406,10 +406,12 @@
   target_link_libraries(tdutils PUBLIC atomic)
 endif()
 
-install(TARGETS tdutils EXPORT TdTargets
-  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-  ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-)
+if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
+  install(TARGETS tdutils EXPORT TdStaticTargets
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+  )
+endif()
 
 if (TD_TEST_FOLLY AND ABSL_FOUND)
   find_package(benchmark QUIET)
