diff --git a/CMake/GeneratePkgConfig.cmake b/CMake/GeneratePkgConfig.cmake index a2800e107333..57e59ca749f1 100644 --- a/CMake/GeneratePkgConfig.cmake +++ b/CMake/GeneratePkgConfig.cmake @@ -89,5 +89,13 @@ CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\" 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() diff --git a/CMakeLists.txt b/CMakeLists.txt index 27e8a26229af..818495b21e3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,7 @@ endif() 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.") if (NOT CMAKE_CROSSCOMPILING) @@ -1310,18 +1311,22 @@ add_library(Td::TdJsonStatic ALIAS TdJsonStatic) set(INSTALL_TARGETS tdjson TdJson) set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private "${TD_CORE_PART_TARGETS}" tdcore tdmtproto tdclient TdStatic tdapi) -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) @@ -1346,16 +1351,21 @@ generate_pkgconfig(tdjson_private "Telegram Library - JSON interface (private)") 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" -) -install(EXPORT TdStaticTargets - FILE TdStaticTargets.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") diff --git a/TdConfig.cmake b/TdConfig.cmake index cbe7a0348fcb..807a840edf6f 100644 --- a/TdConfig.cmake +++ b/TdConfig.cmake @@ -1,6 +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() diff --git a/sqlite/CMakeLists.txt b/sqlite/CMakeLists.txt index 82ceb04c8c3d..539eb631e466 100644 --- a/sqlite/CMakeLists.txt +++ b/sqlite/CMakeLists.txt @@ -70,7 +70,9 @@ elseif (MSVC) target_compile_options(tdsqlite PRIVATE /wd4996) endif() -install(TARGETS tdsqlite EXPORT TdStaticTargets - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" -) +if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS) + install(TARGETS tdsqlite EXPORT TdStaticTargets + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ) +endif() diff --git a/tdactor/CMakeLists.txt b/tdactor/CMakeLists.txt index 2a7c68f5d30c..0b0ecd1dbf9b 100644 --- a/tdactor/CMakeLists.txt +++ b/tdactor/CMakeLists.txt @@ -51,7 +51,9 @@ if (NOT CMAKE_CROSSCOMPILING) target_link_libraries(example PRIVATE tdactor) endif() -install(TARGETS tdactor EXPORT TdStaticTargets - 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() diff --git a/tddb/CMakeLists.txt b/tddb/CMakeLists.txt index 85573170dc67..7f9d40a8424d 100644 --- a/tddb/CMakeLists.txt +++ b/tddb/CMakeLists.txt @@ -55,7 +55,9 @@ if (NOT CMAKE_CROSSCOMPILING) target_link_libraries(binlog_dump PRIVATE tddb) endif() -install(TARGETS tddb EXPORT TdStaticTargets - 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() diff --git a/tdnet/CMakeLists.txt b/tdnet/CMakeLists.txt index 0e35c9722643..fead65f0b1b3 100644 --- a/tdnet/CMakeLists.txt +++ b/tdnet/CMakeLists.txt @@ -80,7 +80,9 @@ if (APPLE_WATCH) target_link_libraries(tdnet PRIVATE ${FOUNDATION_LIBRARY}) endif() -install(TARGETS tdnet EXPORT TdStaticTargets - 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() diff --git a/tdutils/CMakeLists.txt b/tdutils/CMakeLists.txt index 4760aab011b5..4b6ac1c2a08e 100644 --- a/tdutils/CMakeLists.txt +++ b/tdutils/CMakeLists.txt @@ -409,10 +409,12 @@ if (ATOMICS_LIBRARIES) target_link_libraries(tdutils PUBLIC "${ATOMICS_LIBRARIES}") endif() -install(TARGETS tdutils EXPORT TdStaticTargets - 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 AND TDUTILS_USE_EXTERNAL_DEPENDENCIES) find_package(benchmark QUIET)