cmake_minimum_required(VERSION 3.19)
project(libnice
	LANGUAGES C
	VERSION 0.1.15)
SET (this_target libnice)

if (WIN32)
    add_definitions(
        -D_CRT_SECURE_NO_WARNINGS
        -D_SCL_SECURE_NO_WARNINGS
        -DHAVE_OPENSSL
        -DPACKAGE_STRING="${PROJECT_VERSION}")
else()
    add_definitions(
        -DHAVE_OPENSSL
        -DPACKAGE_STRING="${PROJECT_VERSION}"
        -DHAVE_NETDB_H=1)
endif()

configure_file(${CMAKE_SOURCE_DIR}/win32/vs9/config.h ${CMAKE_SOURCE_DIR}/config.h COPYONLY)
configure_file(${CMAKE_SOURCE_DIR}/win32/vs9/libnice.def ${CMAKE_SOURCE_DIR}/libnice.def COPYONLY)

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 glib-2.0 gobject-2.0 gmodule-2.0 gio-2.0 IMPORTED_TARGET)
find_library(IPHLPAPI_LIBRARY iphlpapi)
find_library(WS2_32_LIB ws2_32)
find_library(ADVAPI32_LIB advapi32)
find_package(OpenSSL REQUIRED)
include_directories(
	${CMAKE_CURRENT_SOURCE_DIR} 
	${CMAKE_CURRENT_SOURCE_DIR}/agent
	${CMAKE_CURRENT_SOURCE_DIR}/random 
	${CMAKE_CURRENT_SOURCE_DIR}/socket
	${CMAKE_CURRENT_SOURCE_DIR}/stun
	${GLIB2_INCLUDE_DIRS})


SET (SRCS
	./agent/address.c
	./agent/agent-enum-types.c
	./agent/agent.c
	./agent/candidate.c
	./agent/component.c
	./agent/conncheck.c
	./agent/debug.c
	./agent/discovery.c
	./agent/inputstream.c
	./agent/interfaces.c
	./agent/iostream.c
	./agent/outputstream.c
	./agent/pseudotcp.c
	./agent/stream.c
	./random/random-glib.c
	./random/random.c
	./random/test.c
	./socket/http.c
	./socket/pseudossl.c
	./socket/socket.c
	./socket/socks5.c
	./socket/tcp-active.c
	./socket/tcp-bsd.c
	./socket/tcp-passive.c
	./socket/udp-bsd.c
	./socket/udp-turn-over-tcp.c
	./socket/udp-turn.c
	./stun/debug.c
	./stun/rand.c
	./stun/stun5389.c
	./stun/stunagent.c
	./stun/stuncrc32.c
	./stun/stunhmac.c
	./stun/stunmessage.c
	./stun/usages/bind.c
	./stun/usages/ice.c
	./stun/usages/timer.c
	./stun/usages/turn.c
	./stun/utils.c
	./libnice.def
	)
SET(HEADERS
	./agent/address.h
	./agent/agent-enum-types.h
	./agent/agent-priv.h
	./agent/agent.h
	./agent/candidate.h
	./agent/component.h
	./agent/conncheck.h
	./agent/debug.h
	./agent/discovery.h
	./agent/inputstream.h
	./agent/interfaces.h
	./agent/iostream.h
	./agent/outputstream.h
	./agent/pseudotcp.h
	./agent/stream.h
	./config.h
	./nice/nice.h
	./random/random-glib.h
	./random/random.h
	./socket/http.h
	./socket/pseudossl.h
	./socket/socket-priv.h
	./socket/socket.h
	./socket/socks5.h
	./socket/tcp-active.h
	./socket/tcp-bsd.h
	./socket/tcp-passive.h
	./socket/udp-bsd.h
	./socket/udp-turn-over-tcp.h
	./socket/udp-turn.h
	./stun/constants.h
	./stun/debug.h
	./stun/rand.h
	./stun/stun5389.h
	./stun/stunagent.h
	./stun/stuncrc32.h
	./stun/stunhmac.h
	./stun/stunmessage.h
	./stun/tools/stund.h
	./stun/usages/bind.h
	./stun/usages/ice.h
	./stun/usages/timer.h
	./stun/usages/turn.h
	./stun/utils.h
	./stun/win32_common.h
	./win32/vs9/config.h
	)
add_library(libnice ${SRCS} ${HEADERS})
if (MSVC)
    set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/wd4244 /wd4005 /wd4391 /wd4142 /wd4267")
endif()
if (WIN32)
    target_link_libraries(libnice ${IPHLPAPI_LIBRARY} ${WS2_32_LIB} ${ADVAPI32_LIB} PkgConfig::GLIB2 OpenSSL::SSL)
else()
    target_link_libraries(libnice PkgConfig::GLIB2 OpenSSL::SSL)
endif()
install(TARGETS libnice
RUNTIME DESTINATION bin
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib)

if (CMAKE_BUILD_TYPE STREQUAL "Release")
install(FILES agent/address.h DESTINATION include/nice)
install(FILES agent/agent.h DESTINATION include/nice)
install(FILES agent/candidate.h DESTINATION include/nice)
install(FILES agent/debug.h DESTINATION include/nice)
install(FILES agent/interfaces.h DESTINATION include/nice)
install(FILES nice/nice.h DESTINATION include/nice)
install(FILES agent/pseudotcp.h DESTINATION include/nice)
install(FILES stun/constants.h DESTINATION include/stun)
install(FILES stun/debug.h DESTINATION include/stun)
install(FILES stun/stunagent.h DESTINATION include/stun)
install(FILES stun/stunmessage.h DESTINATION include/stun)
install(FILES stun/usages/bind.h DESTINATION include/stun/usages)
install(FILES stun/usages/ice.h DESTINATION include/stun/usages)
install(FILES stun/usages/timer.h DESTINATION include/stun/usages)
install(FILES stun/usages/turn.h DESTINATION include/stun/usages)
install(FILES stun/win32_common.h DESTINATION include/stun)
endif()
