Skip to content

Commit 67f9ba0

Browse files
Make datachannel target comply with BUILD_SHARED_LIBS option
1 parent 6cc706f commit 67f9ba0

File tree

1 file changed

+41
-20
lines changed

1 file changed

+41
-20
lines changed

CMakeLists.txt

+41-20
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.7)
1+
cmake_minimum_required(VERSION 3.13)
22
project(libdatachannel
33
VERSION 0.21.2
44
LANGUAGES CXX)
@@ -7,6 +7,7 @@ set(PROJECT_DESCRIPTION "C/C++ WebRTC network library featuring Data Channels, M
77
include(GNUInstallDirs)
88

99
# Options
10+
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
1011
option(USE_GNUTLS "Use GnuTLS instead of OpenSSL" OFF)
1112
option(USE_MBEDTLS "Use Mbed TLS instead of OpenSSL" OFF)
1213
option(USE_NICE "Use libnice instead of libjuice" OFF)
@@ -49,7 +50,6 @@ endif()
4950

5051
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
5152
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
52-
set(BUILD_SHARED_LIBS OFF) # to force usrsctp to be built static
5353

5454
if(WIN32)
5555
add_definitions(-DWIN32_LEAN_AND_MEAN)
@@ -254,11 +254,24 @@ else()
254254
option(sctp_inet6 OFF)
255255
option(sctp_werror OFF)
256256
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
257+
set(OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
258+
set(BUILD_SHARED_LIBS OFF) # to force usrsctp to be built static
257259
add_subdirectory(deps/usrsctp EXCLUDE_FROM_ALL)
260+
set(BUILD_SHARED_LIBS ${OLD_BUILD_SHARED_LIBS})
258261
if (MSYS OR MINGW)
259262
target_compile_definitions(usrsctp PUBLIC -DSCTP_STDINT_INCLUDE=<stdint.h>)
260263
endif()
261264
add_library(Usrsctp::Usrsctp ALIAS usrsctp)
265+
if(NOT BUILD_SHARED_LIBS)
266+
# usrsctp lacks an export set
267+
set_target_properties(usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
268+
install(TARGETS usrsctp EXPORT UsrsctpTargets)
269+
install(EXPORT UsrsctpTargets
270+
FILE UsrsctpTargets.cmake
271+
NAMESPACE Usrsctp::
272+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/usrsctp
273+
EXCLUDE_FROM_ALL)
274+
endif()
262275
endif()
263276

264277
if(RTC_UPDATE_VERSION_HEADER)
@@ -268,7 +281,7 @@ if(RTC_UPDATE_VERSION_HEADER)
268281
)
269282
endif()
270283

271-
add_library(datachannel SHARED
284+
add_library(datachannel
272285
${LIBDATACHANNEL_SOURCES}
273286
${LIBDATACHANNEL_HEADERS}
274287
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -301,18 +314,24 @@ target_compile_definitions(datachannel-static PUBLIC RTC_STATIC)
301314
target_include_directories(datachannel PUBLIC
302315
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
303316
$<INSTALL_INTERFACE:include>)
304-
target_include_directories(datachannel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/rtc)
305-
target_include_directories(datachannel PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
306-
target_link_libraries(datachannel PRIVATE Threads::Threads)
307-
target_link_libraries(datachannel PRIVATE Usrsctp::Usrsctp plog::plog)
317+
target_include_directories(datachannel PRIVATE
318+
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc
319+
${CMAKE_CURRENT_SOURCE_DIR}/src)
320+
target_link_libraries(datachannel PRIVATE
321+
Threads::Threads
322+
Usrsctp::Usrsctp
323+
$<BUILD_INTERFACE:plog::plog>)
308324

309325
target_include_directories(datachannel-static PUBLIC
310326
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
311327
$<INSTALL_INTERFACE:include>)
312-
target_include_directories(datachannel-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/rtc)
313-
target_include_directories(datachannel-static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
314-
target_link_libraries(datachannel-static PRIVATE Threads::Threads)
315-
target_link_libraries(datachannel-static PRIVATE Usrsctp::Usrsctp plog::plog)
328+
target_include_directories(datachannel-static PRIVATE
329+
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc
330+
${CMAKE_CURRENT_SOURCE_DIR}/src)
331+
target_link_libraries(datachannel-static PRIVATE
332+
Threads::Threads
333+
Usrsctp::Usrsctp
334+
$<BUILD_INTERFACE:plog::plog>)
316335

317336
if(WIN32)
318337
target_link_libraries(datachannel PUBLIC ws2_32) # winsock2
@@ -349,6 +368,7 @@ else()
349368
else()
350369
if(NOT TARGET srtp2)
351370
add_subdirectory(deps/libsrtp EXCLUDE_FROM_ALL)
371+
install(TARGETS srtp2)
352372
endif()
353373
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354374
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -369,22 +389,22 @@ if (USE_GNUTLS)
369389
endif()
370390
target_compile_definitions(datachannel PRIVATE USE_GNUTLS=1)
371391
target_compile_definitions(datachannel-static PRIVATE USE_GNUTLS=1)
372-
target_link_libraries(datachannel PRIVATE GnuTLS::GnuTLS)
373-
target_link_libraries(datachannel-static PRIVATE GnuTLS::GnuTLS)
392+
target_link_libraries(datachannel PUBLIC GnuTLS::GnuTLS)
393+
target_link_libraries(datachannel-static PUBLIC GnuTLS::GnuTLS)
374394
if (NOT NO_WEBSOCKET)
375395
# Needed for SHA1, it should be present as GnuTLS cryptography backend
376396
find_package(Nettle REQUIRED)
377-
target_link_libraries(datachannel PRIVATE Nettle::Nettle)
378-
target_link_libraries(datachannel-static PRIVATE Nettle::Nettle)
397+
target_link_libraries(datachannel PUBLIC Nettle::Nettle)
398+
target_link_libraries(datachannel-static PUBLIC Nettle::Nettle)
379399
endif()
380400
elseif(USE_MBEDTLS)
381401
if(NOT TARGET MbedTLS::MbedTLS)
382402
find_package(MbedTLS 3 REQUIRED)
383403
endif()
384404
target_compile_definitions(datachannel PRIVATE USE_MBEDTLS=1)
385405
target_compile_definitions(datachannel-static PRIVATE USE_MBEDTLS=1)
386-
target_link_libraries(datachannel PRIVATE MbedTLS::MbedTLS)
387-
target_link_libraries(datachannel-static PRIVATE MbedTLS::MbedTLS)
406+
target_link_libraries(datachannel PUBLIC MbedTLS::MbedTLS)
407+
target_link_libraries(datachannel-static PUBLIC MbedTLS::MbedTLS)
388408
else()
389409
if(APPLE)
390410
# This is a bug in CMake that causes it to prefer the system version over
@@ -405,8 +425,8 @@ else()
405425
find_package(OpenSSL REQUIRED)
406426
target_compile_definitions(datachannel PRIVATE USE_GNUTLS=0)
407427
target_compile_definitions(datachannel-static PRIVATE USE_GNUTLS=0)
408-
target_link_libraries(datachannel PRIVATE OpenSSL::SSL)
409-
target_link_libraries(datachannel-static PRIVATE OpenSSL::SSL)
428+
target_link_libraries(datachannel PUBLIC OpenSSL::SSL)
429+
target_link_libraries(datachannel-static PUBLIC OpenSSL::SSL)
410430
endif()
411431

412432
if (USE_NICE)
@@ -426,9 +446,10 @@ else()
426446
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuice)
427447
else()
428448
add_subdirectory(deps/libjuice EXCLUDE_FROM_ALL)
449+
install(TARGETS juice)
429450
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430451
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431-
target_link_libraries(datachannel PRIVATE LibJuice::LibJuiceStatic)
452+
target_link_libraries(datachannel PRIVATE LibJuice::LibJuice)
432453
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433454
endif()
434455
endif()

0 commit comments

Comments
 (0)