Skip to content

Commit 1e380de

Browse files
OPNA2608levlam
authored andcommitted
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.
1 parent 89b22ed commit 1e380de

File tree

8 files changed

+73
-43
lines changed

8 files changed

+73
-43
lines changed

CMake/GeneratePkgConfig.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,13 @@ CFlags: -I\"${PKGCONFIG_INCLUDEDIR}\"
8989
Libs: -L\"${PKGCONFIG_LIBDIR}\" -l${TARGET}
9090
${REQUIRES}${LIBRARIES}")
9191

92-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
92+
get_target_property(LIBRARY_TYPE "${TARGET}" TYPE)
93+
if (NOT (LIBRARY_TYPE STREQUAL STATIC_LIBRARY OR LIBRARY_TYPE STREQUAL SHARED_LIBRARY))
94+
message(FATAL_ERROR "Don't know how to handle ${TARGET} of type ${LIBRARY_TYPE}")
95+
endif()
96+
if (NOT TD_ENABLE_FILTERED_INSTALL
97+
OR (LIBRARY_TYPE STREQUAL SHARED_LIBRARY AND BUILD_SHARED_LIBS)
98+
OR (LIBRARY_TYPE STREQUAL STATIC_LIBRARY AND NOT BUILD_SHARED_LIBS))
99+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/${TARGET}.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
100+
endif()
93101
endfunction()

CMakeLists.txt

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ endif()
3939
include(PreventInSourceBuild)
4040
prevent_in_source_build()
4141

42+
option(TD_ENABLE_FILTERED_INSTALL "Use \"ON\" to limit installation to files (libraries, dev files) relevant for the chosen \"BUILD_SHARED_LIBS\" value." OFF)
4243
option(TD_ENABLE_JNI "Use \"ON\" to enable JNI-compatible TDLib API.")
4344
option(TD_ENABLE_DOTNET "Use \"ON\" to enable generation of C++/CLI or C++/CX TDLib API bindings.")
4445
if (NOT CMAKE_CROSSCOMPILING)
@@ -1310,18 +1311,22 @@ add_library(Td::TdJsonStatic ALIAS TdJsonStatic)
13101311
set(INSTALL_TARGETS tdjson TdJson)
13111312
set(INSTALL_STATIC_TARGETS tdjson_static TdJsonStatic tdjson_private "${TD_CORE_PART_TARGETS}" tdcore tdmtproto tdclient TdStatic tdapi)
13121313

1313-
install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
1314-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1315-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1316-
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
1317-
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1318-
)
1314+
if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
1315+
install(TARGETS ${INSTALL_TARGETS} EXPORT TdTargets
1316+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1317+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1318+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
1319+
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1320+
)
1321+
endif()
13191322

1320-
install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
1321-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1322-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1323-
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1324-
)
1323+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
1324+
install(TARGETS ${INSTALL_STATIC_TARGETS} EXPORT TdStaticTargets
1325+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1326+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
1327+
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
1328+
)
1329+
endif()
13251330

13261331
# generate pkg-config files
13271332
include(GeneratePkgConfig)
@@ -1346,16 +1351,21 @@ generate_pkgconfig(tdjson_private "Telegram Library - JSON interface (private)")
13461351
generate_pkgconfig(tdjson "Telegram Library - JSON interface (shared)")
13471352
generate_pkgconfig(tdjson_static "Telegram Library - JSON interface (static)")
13481353

1349-
install(EXPORT TdTargets
1350-
FILE TdTargets.cmake
1351-
NAMESPACE Td::
1352-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
1353-
)
1354-
install(EXPORT TdStaticTargets
1355-
FILE TdStaticTargets.cmake
1356-
NAMESPACE Td::
1357-
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
1358-
)
1354+
if (NOT TD_ENABLE_FILTERED_INSTALL OR BUILD_SHARED_LIBS)
1355+
install(EXPORT TdTargets
1356+
FILE TdTargets.cmake
1357+
NAMESPACE Td::
1358+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
1359+
)
1360+
endif()
1361+
1362+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
1363+
install(EXPORT TdStaticTargets
1364+
FILE TdStaticTargets.cmake
1365+
NAMESPACE Td::
1366+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Td"
1367+
)
1368+
endif()
13591369

13601370
# Install tdjson/tdjson_static:
13611371
install(FILES ${TD_JSON_HEADERS} "${CMAKE_CURRENT_BINARY_DIR}/td/telegram/tdjson_export.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/td/telegram")

TdConfig.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
include(CMakeFindDependencyMacro)
22
#TODO: write all external dependencies
3-
include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
3+
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
4+
include("${CMAKE_CURRENT_LIST_DIR}/TdTargets.cmake")
5+
endif()
46
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
57
include("${CMAKE_CURRENT_LIST_DIR}/TdStaticTargets.cmake")
68
endif()

sqlite/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ elseif (MSVC)
7070
target_compile_options(tdsqlite PRIVATE /wd4996)
7171
endif()
7272

73-
install(TARGETS tdsqlite EXPORT TdStaticTargets
74-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
75-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
76-
)
73+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
74+
install(TARGETS tdsqlite EXPORT TdStaticTargets
75+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
76+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
77+
)
78+
endif()

tdactor/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ if (NOT CMAKE_CROSSCOMPILING)
5151
target_link_libraries(example PRIVATE tdactor)
5252
endif()
5353

54-
install(TARGETS tdactor EXPORT TdStaticTargets
55-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
56-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
57-
)
54+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
55+
install(TARGETS tdactor EXPORT TdStaticTargets
56+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
57+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
58+
)
59+
endif()

tddb/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ if (NOT CMAKE_CROSSCOMPILING)
5555
target_link_libraries(binlog_dump PRIVATE tddb)
5656
endif()
5757

58-
install(TARGETS tddb EXPORT TdStaticTargets
59-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
60-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
61-
)
58+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
59+
install(TARGETS tddb EXPORT TdStaticTargets
60+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
61+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
62+
)
63+
endif()

tdnet/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ if (APPLE_WATCH)
8080
target_link_libraries(tdnet PRIVATE ${FOUNDATION_LIBRARY})
8181
endif()
8282

83-
install(TARGETS tdnet EXPORT TdStaticTargets
84-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
85-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
86-
)
83+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
84+
install(TARGETS tdnet EXPORT TdStaticTargets
85+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
86+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
87+
)
88+
endif()

tdutils/CMakeLists.txt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -409,10 +409,12 @@ if (ATOMICS_LIBRARIES)
409409
target_link_libraries(tdutils PUBLIC "${ATOMICS_LIBRARIES}")
410410
endif()
411411

412-
install(TARGETS tdutils EXPORT TdStaticTargets
413-
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
414-
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
415-
)
412+
if (NOT TD_ENABLE_FILTERED_INSTALL OR NOT BUILD_SHARED_LIBS)
413+
install(TARGETS tdutils EXPORT TdStaticTargets
414+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
415+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
416+
)
417+
endif()
416418

417419
if (TD_TEST_FOLLY AND ABSL_FOUND AND TDUTILS_USE_EXTERNAL_DEPENDENCIES)
418420
find_package(benchmark QUIET)

0 commit comments

Comments
 (0)