
# dependens: tinyxml
cmake_minimum_required(VERSION 2.6)

project(TheBurrow)

if(WIN32)
	set(CMAKE_MODULE_PATH "$ENV{OGRE_HOME}/CMake/;${CMAKE_MODULE_PATH}")
	set(OGRE_SAMPLES_INCLUDEPATH
		$ENV{OGRE_HOME}/Samples/include
	)
endif(WIN32)

if(UNIX)
    IF(EXISTS "/usr/lib/OGRE/")
      set(OGRE_SOURCE_DIR "/usr/lib/OGRE/")
      set(CMAKE_MODULE_PATH "/usr/lib/OGRE/cmake")
    elseif (EXISTS "/usr/local/lib/OGRE/")
      set(OGRE_SOURCE_DIR "/usr/lib/OGRE/")
      set(CMAKE_MODULE_PATH "/usr/lib/OGRE/cmake")
    elseif (EXISTS "/usr/share/OGRE/")
      set(OGRE_SOURCE_DIR "/usr/share/OGRE/")
      set(CMAKE_MODULE_PATH "/usr/share/OGRE/cmake/modules")
    endif ()

    set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
    set(INSTALL_PREFIX "/usr/")

endif(UNIX)

if(CMAKE_BUILD_TYPE STREQUAL "")
  # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up
  # differentiation between debug and release builds.
  set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif ()

set(CMAKE_DEBUG_POSTFIX "_d")

set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/dist")

find_package(OGRE REQUIRED)
#if(NOT "${OGRE_VERSION_NAME}" STREQUAL "Cthugha")
#  message(SEND_ERROR "You need Ogre 1.7 Cthugha to build this.")
#endif()

find_package(OIS REQUIRED)

if(NOT OIS_FOUND)
	message(SEND_ERROR "Failed to find OIS.")
endif()

# Find Boost
if (NOT OGRE_BUILD_PLATFORM_IPHONE)
	if (WIN32 OR APPLE)
		set(Boost_USE_STATIC_LIBS TRUE)
	else ()
		# Statically linking boost to a dynamic Ogre build doesn't work on Linux 64bit
		set(Boost_USE_STATIC_LIBS ${OGRE_STATIC})
	endif ()
	if (MINGW)
		# this is probably a bug in CMake: the boost find module tries to look for
		# boost libraries with name libboost_*, but CMake already prefixes library
		# search names with "lib". This is the workaround.
		set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
	endif ()
	set(Boost_ADDITIONAL_VERSIONS "1.44" "1.44.0" "1.42" "1.42.0" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" )
	# Components that need linking (NB does not include header-only components like bind)
	set(OGRE_BOOST_COMPONENTS thread date_time system filesystem)
	find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
	if (NOT Boost_FOUND)
		# Try again with the other type of libs
		set(Boost_USE_STATIC_LIBS NOT ${Boost_USE_STATIC_LIBS})
		find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
	endif()
	find_package(Boost QUIET)

	# Set up referencing of Boost
	include_directories(${Boost_INCLUDE_DIR})
	add_definitions(-DBOOST_ALL_NO_LIB)
	set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
endif()

set(HDRS
    ./BaseApplication.h
    ./AnimationStarter.h
    ./TheBurrow.h
    ./DotScene.h
    ./CollisionTools.h
    ./Bezier.h
    ./TheBurrowScene.h
    ./Scene1.h
    ./Scene1Camera.h
    ./Scene2.h
    ./Scene3.h
    ./SceneMenu.h
    ./Scene3Hole.h
    ./SceneTest.h
    ./MouseCursor.h
    ./TheBurrowMenu.h
    ./Fader.h
    ./Event.h
    ./Helpers.h
    ./Sound.h
    ./RayCast.h
    ./PathMover.h
    ./XmlHelpers.h
    ./Surface3d.h
    ./Hermite3d.h
    ./HermiteMover.h
    ./JumpMover.h
    ./Asteroid.h
    ./FinalFly.h
    ./TextRenderer.h
    ./BetweenAsterFly.h
    ./LinearInterpolate.h
    ./Scene3Processing.h
    ./GhostButterFly.h
)

set(SRCS
    ./BaseApplication.cpp
    ./AnimationStarter.cpp
    ./TheBurrow.cpp
    ./DotScene.cpp
    ./TheBurrowScene.cpp
    ./CollisionTools.cpp
    ./Bezier.cpp
    ./Scene1.cpp
    ./Scene1Camera.cpp
    ./Scene2.cpp
    ./Scene3.cpp
    ./SceneMenu.cpp
    ./SceneTest.cpp
    ./TheBurrowMenu.cpp
    ./Fader.cpp
    ./Event.cpp
    ./Helpers.cpp
    ./Sound.cpp
    ./RayCast.cpp
    ./PathMover.cpp
    ./XmlHelpers.cpp
    ./Hermite3d.cpp
    ./HermiteMover.cpp
    ./JumpMover.cpp
    ./Surface3d.cpp
    ./Asteroid.cpp
    ./FinalFly.cpp
    ./TextRenderer.cpp
    ./BetweenAsterFly.cpp
    ./LinearInterpolate.cpp
    ./Scene3Hole.cpp
    ./Scene3Processing.cpp
    ./GhostButterFly.cpp
)

#file(GLOB alglib ./external/alglib-3.6.0/src/*.cpp)
#set(SRCS ${SRCS} ${alglib})
#include_directories(./external/alglib-3.6.0/src/)
#include_directories(./external/OgreSamples/include)

#Message(STATUS ${OIS_INCLUDE_DIRS})

include_directories( ${OIS_INCLUDE_DIRS}
	${OGRE_INCLUDE_DIRS}
	${OGRE_SAMPLES_INCLUDEPATH}
)

add_executable(TheBurrow WIN32 ${HDRS} ${SRCS})

set_target_properties(TheBurrow PROPERTIES DEBUG_POSTFIX _d)

target_link_libraries(TheBurrow ${OGRE_LIBRARIES} ${OIS_LIBRARIES})

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/bin)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/media)

# post-build copy for win32
if(WIN32 AND NOT MINGW)
	add_custom_command( TARGET TheBurrow PRE_BUILD
		COMMAND if not exist .\\dist\\bin mkdir .\\dist\\bin )
	add_custom_command( TARGET TheBurrow POST_BUILD
		COMMAND copy \"$(TargetPath)\" .\\dist\\bin )
endif(WIN32 AND NOT MINGW)

if(MINGW OR UNIX)
	set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/dist/bin)
endif(MINGW OR UNIX)

if(WIN32)

	install(TARGETS TheBurrow
		RUNTIME DESTINATION bin
		CONFIGURATIONS All)

	install(DIRECTORY ${CMAKE_SOURCE_DIR}/dist/Media
		DESTINATION ./
		CONFIGURATIONS Release RelWithDebInfo Debug
	)

	install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins.cfg
		${CMAKE_SOURCE_DIR}/dist/bin/resources.cfg
		DESTINATION bin
		CONFIGURATIONS Release RelWithDebInfo
	)

	install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins_d.cfg
		${CMAKE_SOURCE_DIR}/dist/bin/resources_d.cfg
		DESTINATION bin
		CONFIGURATIONS Debug
	)

        # NOTE: for the 1.7.1 sdk the OIS dll is called OIS.dll instead of libOIS.dll
        # so you'll have to change that to make it work with 1.7.1
	install(FILES ${OGRE_PLUGIN_DIR_REL}/OgreMain.dll
		${OGRE_PLUGIN_DIR_REL}/RenderSystem_Direct3D9.dll
		${OGRE_PLUGIN_DIR_REL}/RenderSystem_GL.dll
		${OGRE_PLUGIN_DIR_REL}/libOIS.dll
		DESTINATION bin
		CONFIGURATIONS Release RelWithDebInfo
	)

	install(FILES ${OGRE_PLUGIN_DIR_DBG}/OgreMain_d.dll
		${OGRE_PLUGIN_DIR_DBG}/RenderSystem_Direct3D9_d.dll
		${OGRE_PLUGIN_DIR_DBG}/RenderSystem_GL_d.dll
		${OGRE_PLUGIN_DIR_DBG}/libOIS_d.dll
		DESTINATION bin
		CONFIGURATIONS Debug
	)

   # as of sdk 1.7.2 we need to copy the boost dll's as well
   # because they're not linked statically (it worked with 1.7.1 though)
   install(FILES ${Boost_DATE_TIME_LIBRARY_RELEASE}
      ${Boost_THREAD_LIBRARY_RELEASE}
      DESTINATION bin
      CONFIGURATIONS Release RelWithDebInfo
   )

   install(FILES ${Boost_DATE_TIME_LIBRARY_DEBUG}
      ${Boost_THREAD_LIBRARY_DEBUG}
      DESTINATION bin
      CONFIGURATIONS Debug
   )
endif(WIN32)

if(UNIX)

   install(TARGETS TheBurrow DESTINATION "${INSTALL_PREFIX}/bin")
   install(DIRECTORY
       ${CMAKE_SOURCE_DIR}/dist/media
       DESTINATION "${INSTALL_PREFIX}/games/TheBurrow"
   )

   install(FILES 
      ${CMAKE_SOURCE_DIR}/dist/cfg/ogre.cfg
      ${CMAKE_SOURCE_DIR}/dist/cfg/resources.cfg
	  DESTINATION "${INSTALL_PREFIX}/games/TheBurrow/cfg/"
   )
 

   if(CMAKE_SIZEOF_VOID_P EQUAL 8)
      install(FILES 
         ${CMAKE_SOURCE_DIR}/dist/cfg/plugins-64.cfg
   	     DESTINATION "${INSTALL_PREFIX}/games/TheBurrow/cfg/"
         RENAME plugins.cfg
      )
   else() 
      install(FILES 
         ${CMAKE_SOURCE_DIR}/dist/cfg/plugins-32.cfg
   	     DESTINATION "${INSTALL_PREFIX}/games/TheBurrow/cfg/"
         RENAME plugins.cfg
      )
   endif()

      install(FILES 
         ${CMAKE_SOURCE_DIR}/dist/cfg/ogre.cfg
         ${CMAKE_SOURCE_DIR}/dist/cfg/resources.cfg
   	     DESTINATION "${INSTALL_PREFIX}/games/TheBurrow/cfg/"
      )


   install(FILES
      ${CMAKE_SOURCE_DIR}/dist/the-burrow.png
	  DESTINATION "${INSTALL_PREFIX}/share/icons/hicolor/48x48/apps/"
   )
   install(FILES
      ${CMAKE_SOURCE_DIR}/dist/the-burrow.desktop
	  DESTINATION "${INSTALL_PREFIX}share/applications/"
   )
endif(UNIX)

find_package(VorbisFile REQUIRED)
FIND_LIBRARY(TINYXML_LIBRARY NAMES tinyxml tinyxml_s)
IF(TINYXML_LIBRARY)
	TARGET_LINK_LIBRARIES(TheBurrow ${TINYXML_LIBRARY} openal alut vorbis vorbisfile)
ELSE(TINYXML_LIBRARY)
	MESSAGE(STATUS "Could not find system TinyXML library.")
ENDIF(TINYXML_LIBRARY)

#set(CMAKE_CXX_FLAGS "-pg -m32")
set(CMAKE_CXX_FLAGS "-pg")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pg")
