Skip to content

Commit dba8043

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

File tree

1 file changed

+31
-13
lines changed

1 file changed

+31
-13
lines changed

CMakeLists.txt

+31-13
Original file line numberDiff line numberDiff line change
@@ -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,7 +254,10 @@ 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()
@@ -268,7 +271,7 @@ if(RTC_UPDATE_VERSION_HEADER)
268271
)
269272
endif()
270273

271-
add_library(datachannel SHARED
274+
add_library(datachannel
272275
${LIBDATACHANNEL_SOURCES}
273276
${LIBDATACHANNEL_HEADERS}
274277
${LIBDATACHANNEL_IMPL_SOURCES}
@@ -301,18 +304,24 @@ target_compile_definitions(datachannel-static PUBLIC RTC_STATIC)
301304
target_include_directories(datachannel PUBLIC
302305
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
303306
$<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)
307+
target_include_directories(datachannel PRIVATE
308+
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc
309+
${CMAKE_CURRENT_SOURCE_DIR}/src)
310+
target_link_libraries(datachannel PRIVATE
311+
Threads::Threads
312+
Usrsctp::Usrsctp
313+
$<BUILD_INTERFACE:plog::plog>)
308314

309315
target_include_directories(datachannel-static PUBLIC
310316
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
311317
$<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)
318+
target_include_directories(datachannel-static PRIVATE
319+
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc
320+
${CMAKE_CURRENT_SOURCE_DIR}/src)
321+
target_link_libraries(datachannel-static PRIVATE
322+
Threads::Threads
323+
Usrsctp::Usrsctp
324+
$<BUILD_INTERFACE:plog::plog>)
316325

317326
if(WIN32)
318327
target_link_libraries(datachannel PUBLIC ws2_32) # winsock2
@@ -348,7 +357,7 @@ else()
348357
target_link_libraries(datachannel-static PRIVATE libSRTP::srtp2)
349358
else()
350359
if(NOT TARGET srtp2)
351-
add_subdirectory(deps/libsrtp EXCLUDE_FROM_ALL)
360+
add_subdirectory(deps/libsrtp)
352361
endif()
353362
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_SRTP=0)
354363
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_SRTP=0)
@@ -425,10 +434,10 @@ else()
425434
target_link_libraries(datachannel PRIVATE LibJuice::LibJuice)
426435
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuice)
427436
else()
428-
add_subdirectory(deps/libjuice EXCLUDE_FROM_ALL)
437+
add_subdirectory(deps/libjuice)
429438
target_compile_definitions(datachannel PRIVATE RTC_SYSTEM_JUICE=0)
430439
target_compile_definitions(datachannel-static PRIVATE RTC_SYSTEM_JUICE=0)
431-
target_link_libraries(datachannel PRIVATE LibJuice::LibJuiceStatic)
440+
target_link_libraries(datachannel PRIVATE LibJuice::LibJuice)
432441
target_link_libraries(datachannel-static PRIVATE LibJuice::LibJuiceStatic)
433442
endif()
434443
endif()
@@ -470,6 +479,15 @@ install(FILES ${LIBDATACHANNEL_HEADERS}
470479
)
471480

472481
# Export targets
482+
if(NOT USE_SYSTEM_USRSCTP AND NOT BUILD_SHARED_LIBS)
483+
# usrsctp lacks an export set
484+
set_target_properties(usrsctp PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "")
485+
install(TARGETS usrsctp EXPORT UsrsctpTargets DESTINATION ${CMAKE_INSTALL_LIBDIR})
486+
install(EXPORT UsrsctpTargets
487+
FILE UsrsctpTargets.cmake
488+
NAMESPACE Usrsctp::
489+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/usrsctp)
490+
endif()
473491
install(
474492
EXPORT LibDataChannelTargets
475493
FILE LibDataChannelTargets.cmake

0 commit comments

Comments
 (0)