# Find the Vision Labs TrackEngine SDK.
# Sets the usual variables expected for find_package scripts:
# TSDK_INCLUDE_DIRS - headers location
# TSDK_LIBRARIES - libraries to link against
# TSDK_FOUND - true if TrackEngine SDK was found.

# This is the directory where the TrackEngine SDK is located.
# By default TSDKDIR environment variable value is taken.

set(TSDK_ROOT "$ENV{TSDKDIR}" CACHE PATH "Vision Labs TrackEngine SDK root directory.")

# Look for headers.
find_path(TSDK_INCLUDE_DIRS
          NAMES tsdk/ITrackEngine.h tsdk/ITrackCallbacks tsdk/IStream.h tsdk/TrackEngineDefs.h tsdk/TrackEngineTypes.h
          HINTS $ENV{TSDKDIR}
          PATHS ${TSDK_ROOT}
          PATH_SUFFIXES include)

#message(STATUS "TSDK: TSDK_INCLUDE_DIRS = ${TSDK_INCLUDE_DIRS}.")

# Determine compiler version and architecture.
# ios has no architechture/compiler branching, because only can only use clang
# and if you need multiple architechtures there still compiled into single universal binary
if(MSVC10)
	set(TSDK_COMPILER_NAME vs2010)
elseif(MSVC11)
	set(TSDK_COMPILER_NAME vs2012)
elseif(MSVC12)
	set(TSDK_COMPILER_NAME vs2013)
elseif(MSVC14)
	set(TSDK_COMPILER_NAME vs2015)
elseif(CMAKE_COMPILER_IS_GNUCXX)
	set(TSDK_COMPILER_NAME gcc4)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
	set(TSDK_COMPILER_NAME clang)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
	set(TSDK_COMPILER_NAME clang)
else()
	message(SEND_ERROR "Unsupported compiler: ${TSDK_COMPILER_NAME}")
endif()

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
	set(TSDK_TARGET_NAME x64)
else()
	set(TSDK_TARGET_NAME x86)
endif()

# What version of TrackEngine SDK to use.
if(ANDROID)
	set(TSDK_LIB_PREFIX ${TSDK_COMPILER_NAME}/${ANDROID_ABI})
else()
	set(TSDK_LIB_PREFIX ${TSDK_COMPILER_NAME}/${TSDK_TARGET_NAME})
endif()

# List of all SDK libraries.
set(TSDK_LIB_NAMES
		TrackEngineSDK)

set(TSDK_LIB_PATH_SUFFIX lib/${TSDK_LIB_PREFIX})
set(TSDK_BIN_PATH_SUFFIX bin/${TSDK_LIB_PREFIX})

set(TSDK_LIB)
foreach(LIB ${TSDK_LIB_NAMES})
	set(LIB_PATH ${LIB}-NOTFOUND)
	find_library(LIB_PATH
		NAMES ${LIB}
		HINTS $ENV{TSDKDIR}
		PATHS ${TSDK_ROOT}
		PATH_SUFFIXES ${TSDK_LIB_PATH_SUFFIX}
			${TSDK_BIN_PATH_SUFFIX}
		NO_DEFAULT_PATH)
	list(APPEND TSDK_LIB ${LIB_PATH})
endforeach()

# Find debug libraries (may be missing in your distribution).
set(TSDK_LIBD)
foreach(LIB ${TSDK_LIB_NAMES})
	set(LIB_PATH ${LIB}-NOTFOUND)
	find_library(LIB_PATH
		NAMES ${LIB}d
		HINTS $ENV{TSDKDIR}
		PATHS ${TSDK_ROOT}
		PATH_SUFFIXES	${TSDK_LIB_PATH_SUFFIX}
			${TSDK_BIN_PATH_SUFFIX}
		NO_DEFAULT_PATH)

	list(APPEND TSDK_LIBD ${LIB_PATH})
endforeach()

# Support the REQUIRED and QUIET arguments, and set TSDK_FOUND if found.
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TSDK DEFAULT_MSG 
                                  TSDK_INCLUDE_DIRS)

set(TSDK_LIBRARIES)

if(TSDK_FOUND)
	if(TSDK_LIB)
		foreach(LIB ${TSDK_LIB})
			list(APPEND TSDK_LIBRARIES optimized ${LIB})
		endforeach()
		message(STATUS "TSDK [INFO]: Release libraries are available.")
	elseif(TSDK_LIBD)
		message(STATUS "TSDK [WARN]: Release libraries are NOT available.")
	else()
		message(FATAL_ERROR "TSDK [ERROR]: TrackEngine libraries are NOT available.")
	endif()

	if(TSDK_LIBD)
		foreach(LIB ${TSDK_LIBD})
			list(APPEND TSDK_LIBRARIES debug ${LIB})
		endforeach()
		message(STATUS "TSDK [INFO]: Debug libraries are available.")
	elseif(TSDK_LIB)
		message(STATUS "TSDK [WARN]: Debug libraries are NOT available.")
	else()
		message(FATAL_ERROR "TSDK [ERROR]: TrackEngine libraries are NOT available.")	
	endif()

	message(STATUS "TSDK [INFO]: Found TDK in ${TSDK_ROOT}.")
else()
	message(STATUS "TSDK [WARN]: TrackEngineSDK was NOT found.")
endif(TSDK_FOUND)

#message(STATUS "TSDK [DEBUG]: TSDK_LIBRARIES = ${TSDK_LIBRARIES}.")

# Don't show in GUI
mark_as_advanced(
	TSDK_INCLUDE_DIRS
	TSDK_LIBRARIES
	TSDK_COMPILER_NAME
	TSDK_TARGET_NAME
	TSDK_LIB_PREFIX
	TSDK_LIB_NAMES
	TSDK_LIB_NAMESD
	TSDK_LIB 
	TSDK_LIBD
	LIB_PATH
)