# This module can be copied and used by external plugins for OBS
#
# Once done these will be defined:
#
#  LIBOBS_FOUND
#  LIBOBS_INCLUDE_DIRS
#  LIBOBS_LIBRARIES

find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
	pkg_check_modules(_OBS QUIET obs libobs)
endif()

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
	set(_lib_suffix 64)
else()
	set(_lib_suffix 32)
endif()

if(DEFINED CMAKE_BUILD_TYPE)
	if(CMAKE_BUILD_TYPE STREQUAL "Debug")
		set(_build_type_base "debug")
	else()
		set(_build_type_base "release")
	endif()
endif()

find_path(LIBOBS_INCLUDE_DIR
	NAMES obs.h
	HINTS
		ENV obsPath${_lib_suffix}
		ENV obsPath
		${obsPath}
		${obsIncludePath}
		${obsPath}/libobs
	PATHS
		/usr/include /usr/local/include /opt/local/include /sw/include /usr/include/obs
	PATH_SUFFIXES
		libobs
	DOC "Lib OBS include directory"
	)

if(APPLE)
	# Hopeful hint at libobs in the /Applications folder
	set(obsLibPath_osx "/Applications/OBS.app/Contents/Frameworks/")
endif()

function(find_obs_lib base_name repo_build_path lib_name)
	string(TOUPPER "${base_name}" base_name_u)

	if(DEFINED _build_type_base)
		set(_build_type_${repo_build_path} "${_build_type_base}/${repo_build_path}")
		set(_build_type_${repo_build_path}${_lib_suffix} "${_build_type_base}${_lib_suffix}/${repo_build_path}")
	endif()

	find_library(${base_name_u}_LIB
		NAMES ${_${base_name_u}_LIBRARIES} ${lib_name} lib${lib_name} ${lib_name}.0
		HINTS
			ENV obsPath${_lib_suffix}
			ENV obsPath
			${obsPath}
			${obsLibPath}
			${_${base_name_u}_LIBRARY_DIRS}
			${obsLibPath_osx}
		PATHS
			/usr/lib /usr/local/lib /opt/local/lib /sw/lib
		PATH_SUFFIXES
			lib${_lib_suffix} lib
			libs${_lib_suffix} libs
			bin${_lib_suffix} bin
			../lib${_lib_suffix} ../lib
			../libs${_lib_suffix} ../libs
			../bin${_lib_suffix} ../bin
			# base repo non-msvc-specific search paths
			${_build_type_${repo_build_path}}
			${_build_type_${repo_build_path}${_lib_suffix}}
			build/${repo_build_path}
			build${_lib_suffix}/${repo_build_path}
			# base repo msvc-specific search paths on windows
			build${_lib_suffix}/${repo_build_path}/Debug
			build${_lib_suffix}/${repo_build_path}/Release
			build${_lib_suffix}/${repo_build_path}/RelWithDebInfo
			build/${repo_build_path}/Debug
			build/${repo_build_path}/Release
			build/${repo_build_path}/RelWithDebInfo
		DOC "Lib OBS library"
		)
endfunction()

find_obs_lib(LIBOBS libobs obs)

if(MSVC)
	find_obs_lib(W32_PTHREADS deps/w32-pthreads w32-pthreads)
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibObs DEFAULT_MSG LIBOBS_LIB LIBOBS_INCLUDE_DIR)
mark_as_advanced(LIBOBS_INCLUDE_DIR LIBOBS_LIB)

if(LIBOBS_FOUND)
	if(MSVC)
		if (NOT DEFINED W32_PTHREADS_LIB)
			message(FATAL_ERROR "Could not find the w32-pthreads library" )
		endif()

		set(W32_PTHREADS_INCLUDE_DIR ${LIBOBS_INCLUDE_DIR}/../deps/w32-pthreads)
	endif()

	set(LIBOBS_INCLUDE_DIRS ${LIBOBS_INCLUDE_DIR} ${W32_PTHREADS_INCLUDE_DIR} CACHE STRING "Lib OBS include directories")
	set(LIBOBS_LIBRARIES ${LIBOBS_LIB} ${W32_PTHREADS_LIB} CACHE STRING "Lib OBS libraries")

	if (EXISTS ${LIBOBS_INCLUDE_DIR}/../cmake/external/ObsPluginHelpers.cmake)
		include(${LIBOBS_INCLUDE_DIR}/../cmake/external/ObsPluginHelpers.cmake)
	endif()

	# allows external plugins to easily use/share common dependencies that are often included with libobs (such as FFmpeg)
	if(NOT DEFINED INCLUDED_LIBOBS_CMAKE_MODULES)
		set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LIBOBS_INCLUDE_DIR}/../cmake/Modules/")
		set(INCLUDED_LIBOBS_CMAKE_MODULES true)
	endif()
else()
	message(FATAL_ERROR "Could not find the libobs library" )
endif()
