cmake_minimum_required(VERSION 2.8)
set(PROJECT_NAME "tsua")
project(${PROJECT_NAME})

#
# SET OPTIONS
#
option(ENABLE_TEST "Build all tests." OFF)

include(CheckCCompilerFlag)
include(CheckFunctionExists)

if(CMAKE_COMPILER_IS_GNUCXX)
	if(UNIX)
		message(STATUS "Setting Complier options")
		add_definitions("-std=c++0x")
		add_definitions("-g")
		add_definitions("-Wall")
		add_definitions("-Wextra")
	endif(UNIX)
endif(CMAKE_COMPILER_IS_GNUCXX)

if(UNIX)
    add_definitions(-D_UNIX=1)
endif(UNIX)

if(APPLE)
    add_definitions(-D_MACOSX=1)
endif(APPLE)

if(MSVC)
    add_definitions(-D_WINDOWS=1)
	set(EXETYPE WIN32)
endif(MSVC)

##############################
# Setting local modules path
##############################
set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")

#Try to link statically
if(UNIX)
	set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
	set(BUILD_SHARED_LIBS FALSE)
	set(CMAKE_EXE_LINKER_FLGAS '-static')
endif(UNIX)

##############################
#OpenGL
##############################
find_package(OpenGL REQUIRED)
if(OPENGL_FOUND)
#	include_directories($OPENGL_INCLUDE_DIRS})
endif(OPENGL_FOUND)
if( NOT OPENGL_FOUND)
	message(FATAL_ERROR " OpenGl Package is not found")
endif(NOT OPENGL_FOUND)
##############################
#X11
##############################
find_package(X11 REQUIRED)
if(NOT X11_FOUND)
	message(FATAL_ERROR " X11 packages are not found")
endif(NOT X11_FOUND)
##############################
#GLFW
##############################
find_package(GLFW REQUIRED)
if(GLFW_FOUND)
	message("-- GLFW Found")
	set_target_properties(PROPERTIES LINK_SEARCH_START_STATIC 1)
endif()
if(NOT GLFW_FOUND)
	message(FATAL_ERROR " GLFW Package is not found")
endif(NOT GLFW_FOUND)

find_package(GLEW REQUIRED)
if(GLEW_FOUND)
	message("-- GLEW Found ${GLEW_INCLUDE_DIR}")
	include_directories(${GLEW_INCLUDE_DIR})
endif(GLEW_FOUND)
if(NOT GLEW_FOUND)
	message(FATAL_ERROR " GLEW Package is not found")
endif(NOT GLEW_FOUND)


##############################
#BOOST-THREAD-MT #BOOST-THREAD
##############################
find_package(Boost REQUIRED COMPONENTS thread serialization)
if(Boost_FOUND)
	include_directories(${Boost_INCLUDE_DIRS})
endif()
if(NOT Boost_FOUND)
	message(FATAL_ERROR " Boost Package are not found")
endif(NOT Boost_FOUND)

##############################
#FREETYPE
##############################
find_package(Freetype)
if(FREETYPE_FOUND)
	message("-- Freetype Found")
	if(UNIX)
		include_directories(/usr/include/freetype2/)
	endif(UNIX)
endif(FREETYPE_FOUND)
if(NOT FREETYPE_FOUND)
	message(FATAL_ERROR " FreeType Package is not found")
endif(NOT FREETYPE_FOUND)
##############################
#ZLIB
##############################
find_package(ZLIB)
if(ZLIB_FOUND)
	message("-- ZLIB Found")
	if(UNIX)
		#include_directories(/usr/include/)
	endif(UNIX)
endif(ZLIB_FOUND)
if(NOT ZLIB_FOUND)
	message(FATAL_ERROR " Zlib Package is not found")
endif(NOT ZLIB_FOUND) 

##############################
# TSUA 
##############################
include_directories("${PROJECT_SOURCE_DIR}/lib/include")
include(src/CMakeLists.txt)
foreach(FILE ${TSUA_INCLUDE})
	set(TSUA_INC ${TSUA_INC} src/${FILE} )
endforeach()

foreach(FILE ${TSUA_SOURCE})
	set(TSUA_SRC ${TSUA_SRC} src/${FILE} )
endforeach()

foreach(FILE ${TSUA_GAME_INCLUDE})
	set(TSUA_INC ${TSUA_INC} src/${FILE} )
endforeach()

foreach(FILE ${TSUA_GAME_SOURCE})
	set(TSUA_SRC ${TSUA_SRC} src/${FILE} )
endforeach()

if(UNIX)
		set(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-lXrandr -ldl -lxcb")
endif(UNIX)
add_executable(${PROJECT_NAME} ${TSUA_INC} ${TSUA_SRC})

target_link_libraries(${PROJECT_NAME}
	${FREETYPE_LIBRARIES}
	${Boost_LIBRARIES}
	${ZLIB_LIBRARIES}
	${OPENGL_LIBRARIES}
	${GLFW_LIBRARIES}
	${GLEW_LIBRARIES}
	${X11_LIBRARIES}
	${OPTIONAL_LIBS}
)

##############################
# Testing
##############################
if(ENABLE_TEST)
	include(ExternalProject)
	add_subdirectory(${PROJECT_SOURCE_DIR}/cmake/externals/gtest)
	set(TPATH ${PROJECT_SOURCE_DIR}/test)

	file(WRITE ${TPATH}/test.cc "#include \"gtest/gtest.h\"\n\n")
	file(APPEND ${TPATH}/test.cc "TEST(TsuaCategory, TesuaTestName) { SUCCEED(); }\n")
	file(APPEND ${TPATH}/test.cc "int main(int argc, char **argv) {\n")
	file(APPEND ${TPATH}/test.cc "  testing::InitGoogleTest(&argc, argv);\n")
	file(APPEND ${TPATH}/test.cc "  return RUN_ALL_TESTS();\n")
	file(APPEND ${TPATH}/test.cc "}\n")

	# Set default ExternalProject root directory
	#SET_DIRECTORY_PROPERTIES(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/ThirdParty)

	set(TEST1 test_example)
	# Add test executable target
	add_executable(${TEST1} ${TPATH}/test.cc)
	# Create dependency of googletest
	add_dependencies(${TEST1} googletest)

	if(CMAKE_COMPILER_IS_GNUCXX)
		target_link_libraries(${TEST1}
			pthread
			${GTEST_LIBS_DIR}/libgtest.a
			${GTEST_LIBS_DIR}/libgtest_main.a)
	else()
		target_link_libraries(${TEST1}
			debug ${GTEST_LIBS_DIR}/DebugLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${CMAKE_FIND_LIBRARY_SUFFIXES}
			optimized ${binary_dir}/ReleaseLibs/${CMAKE_FIND_LIBRARY_PREFIXES}gtest${CMAKE_FIND_LIBRARY_SUFFIXES})

	endif()
	#
	# Generate lua scirpt to run test cases
	#
	file(WRITE ./build/run.lua "os.execute(\"./${TEST1}\")\n")

endif(ENABLE_TEST)

