cmake_minimum_required(VERSION 3.12)

project(omohclient)

add_subdirectory("../cgame" "./cgame")

file(GLOB SOURCES_CLIENT "./*.c*")
file(GLOB_RECURSE SOURCES_UILIB "../uilib/*.c*")

set(SOURCES_CLIENT ${SOURCES_CLIENT}
	# Gamespy
	"${CMAKE_SOURCE_DIR}/code/gamespy/cl_gamespy.c"
)

# Made as an interface and not static, as static only links used methods
add_library(omohclient INTERFACE)
target_compile_definitions(omohclient INTERFACE APP_MODULE)
target_compile_features(omohclient INTERFACE cxx_nullptr)
target_compile_features(omohclient INTERFACE c_variadic_macros)
target_link_libraries(omohclient INTERFACE omohsdl_client)
target_link_libraries(omohclient INTERFACE gcd)

# Sound stuff
target_compile_definitions(omohclient INTERFACE USE_CODEC_MP3)

if (NOT NO_MODERN_DMA)
	# Use OpenAL
	find_package(OpenAL REQUIRED)

	if (OPENAL_FOUND)
		target_compile_definitions(omohclient INTERFACE USE_OPENAL=1 NO_MODERN_DMA=0)
		if (MSVC)
			target_include_directories(omohclient INTERFACE ${OPENAL_INCLUDE_DIR}/AL)
		else()
			target_include_directories(omohclient INTERFACE ${OPENAL_INCLUDE_DIR})
		endif()

		if(NOT USE_SYSTEM_LIBS)
			target_compile_definitions(omohclient INTERFACE USE_OPENAL_DLOPEN=1)
		else()
			# Link against system OpenAL
			target_link_libraries(omohclient INTERFACE OpenAL::OpenAL)
		endif()
	endif()

	list(FILTER SOURCES_CLIENT EXCLUDE REGEX "./snd_([a-zA-Z0-9_]+)\.c$")
	file(GLOB SOURCES_CLIENT_SND "./snd_*_new.c*" "./snd_codec*.c*")
	list(APPEND SOURCES_CLIENT ${SOURCES_CLIENT_SND})
else()
	#
	# Fallback to old DMA sound system
	#
	message(NOTICE "OpenAL was explicitly disabled - fallback to old SDL sound system")
	target_compile_definitions(omohclient INTERFACE NO_MODERN_DMA=1)
	set(NO_MODERN_DMA TRUE)

	list(FILTER SOURCES_CLIENT EXCLUDE REGEX "./snd_([a-zA-Z0-9_]+)\.cpp$")
	file(GLOB_RECURSE SOURCES_CLIENT_SND "./new/*.c*")
	list(APPEND SOURCES_CLIENT ${SOURCES_CLIENT_SND})
endif()

set(OLD_VALUE ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)

if(USE_INTERNAL_MAD)
	add_subdirectory("../thirdparty/libmad" "./libmad" EXCLUDE_FROM_ALL)
	target_link_libraries(omohclient INTERFACE mad)
else()
	include(FindPackageHandleStandardArgs)
	find_path(LIBMAD_INCLUDE_DIRS mad.h)
	find_library(LIBMAD_LIBRARIES mad)
	find_package_handle_standard_args(
		LibMad
		DEFAULT_MSG
		LIBMAD_LIBRARIES
		LIBMAD_INCLUDE_DIRS
	)
	target_include_directories(omohclient INTERFACE ${LIBMAD_INCLUDE_DIRS})
	target_link_libraries(omohclient INTERFACE ${LIBMAD_LIBRARIES})
endif()

set(BUILD_SHARED_LIBS ${OLD_VALUE} CACHE BOOL "" FORCE)

target_sources(omohclient INTERFACE ${SOURCES_CLIENT} ${SOURCES_UILIB})
