# Top-Level CMakeLists.txt
# TODO: Fix find-modules for debug only found mode
# TODO: Copy media folder to installed
# TODO: configure scripts for resource.cfg and plugins.cfg
PROJECT(SkyX)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
# This can be used to override existing modules
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMAKEMODULES;${CMAKE_MODULE_PATH}")
# MESSAGE("\n CMAKE-Module Path:" ${CMAKE_MODULE_PATH})

# default to debug-builds
IF (NOT CMAKE_BUILD_TYPE)
  SET (CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
ENDIF (NOT CMAKE_BUILD_TYPE)

# use dwarf-2 debugging format on APPLE
IF (CMAKE_BUILD_TYPE STREQUAL Debug)
  IF (APPLE)
    add_definitions("-gdwarf-2")
  ENDIF (APPLE)

  IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
      ADD_DEFINITIONS(-D_DEBUG)
  ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")

  IF(MINGW)
    ADD_DEFINITIONS(-D_DEBUG)
    ADD_DEFINITIONS(-DWIN32)
  ENDIF(MINGW)
ENDIF (CMAKE_BUILD_TYPE STREQUAL Debug)

# avoid some warnings on windows 
IF(WIN32)
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
ENDIF(WIN32)


# do not reconfigure when doing a rebuild/clean for example in VS
# if you wish to reconfigure use cmake, ccmake or cmakesetup directly
SET(CMAKE_SUPPRESS_REGENERATION true)

# our debug-suffix
IF(MSVC)
  SET(CMAKE_DEBUG_POSTFIX  "d")
ENDIF(MSVC)

# lib-postfix for 32/64
IF(UNIX AND NOT WIN32 AND NOT APPLE)
  IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
    SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
    MARK_AS_ADVANCED(LIB_POSTFIX)
  ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)
IF(NOT DEFINED LIB_POSTFIX)
  SET(LIB_POSTFIX "")
ENDIF(NOT DEFINED LIB_POSTFIX) 

# preset install dir
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  SET(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/installed" CACHE PATH "CMAKE_INSTALL_PREFIX" FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

# main source/target
# Executable-Source-Level

# some dependencies on MacOS
IF(APPLE)
  FIND_PATH(CARBON_INCLUDE_DIR Carbon/Carbon.h)
  FIND_LIBRARY(CARBON_LIBRARY Carbon)
  FIND_LIBRARY(IOKIT_LIBRARY IOKit)
  MARK_AS_ADVANCED(CARBON_INCLUDE_DIR CARBON_LIBRARY IOKIT_LIBRARY)
  SET(EXTRALIBS_APPLE ${CARBON_LIBRARY} ${IOKIT_LIBRARY})
ENDIF (APPLE)

# find dependencies
FIND_PACKAGE(Ogre)
FIND_PACKAGE(OIS)

# set BHEL_CALAS_DIR
#get_filename_component(BHEL_CALAS_DIR "${CMAKE_SOURCE_DIR}/.." ABSOLUTE)
#MESSAGE(STATUS "BHEL_CALAS_DIR = ${BHEL_CALAS_DIR}")

# set some variables and generate config files
# assume env.var OGRE_HOME points to the right place
FILE(TO_CMAKE_PATH "$ENV{OGRE_HOME}" OGRESDK_DIR)
IF (WIN32)
  SET(OGRE_SAMPLES_DIR "${OGRESDK_DIR}")
  SET(OGRE_COMMENT "")
  IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
	SET(OGRE_PLUGINS_DIR "${OGRESDK_DIR}/bin/debug")
  ELSE(CMAKE_BUILD_TYPE STREQUAL "Debug")
	SET(OGRE_PLUGINS_DIR "${OGRESDK_DIR}/bin/release")
  ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
ELSE (WIN32)
  SET(OGRE_SAMPLES_DIR "${OGRESDK_DIR}/Samples")
  SET(OGRE_COMMENT "# ")
  get_filename_component(OGRE_PLUGINS_DIR "${OGRE_LIBRARY}" PATH)
  IF (APPLE)
    SET(OGRE_PLUGINS_DIR "${OGRESDK_DIR}/lib")
  ELSE (APPLE)
    SET(OGRE_PLUGINS_DIR "${OGRE_PLUGINS_DIR}/OGRE")
  ENDIF (APPLE)
ENDIF (WIN32)
MESSAGE(STATUS "OGRESDK_DIR = ${OGRESDK_DIR}")


#CONFIGUREFILE("${BHEL_CALAS_DIR}/modelle/packs/OgreCore.zip" "${CMAKE_CURRENT_BINARY_DIR}/resources/OgreCore.zip" COPYONLY)


# our include dirs
SET(OGRE_INCLUDES
  "${OGRE_INCLUDE_DIR}"
  "${OIS_INCLUDE_DIR}"
  "${CARBON_INCLUDE_DIR}"
)

# Configure cfgs
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/plugins.cfg.in" "${CMAKE_CURRENT_BINARY_DIR}/plugins.cfg" IMMEDIATE @ONLY)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources.cfg.in" "${CMAKE_CURRENT_BINARY_DIR}/resources.cfg" IMMEDIATE @ONLY)
CONFIGURE_FILE("${CMAKE_CURRENT_BINARY_DIR}/resources.cfg" "${CMAKE_CURRENT_BINARY_DIR}/resources_d.cfg" COPYONLY)
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/plugins_d.cfg.in" "${CMAKE_CURRENT_BINARY_DIR}/plugins_d.cfg" IMMEDIATE @ONLY)

SET(SKYX_CONFIG_FILES 
    "${CMAKE_CURRENT_BINARY_DIR}/plugins.cfg"
    "${CMAKE_CURRENT_BINARY_DIR}/plugins_d.cfg"
    "${CMAKE_CURRENT_BINARY_DIR}/resources.cfg"
	"${CMAKE_CURRENT_BINARY_DIR}/resources_d.cfg"
)

INCLUDE_DIRECTORIES(
  ${OGRE_INCLUDES}
  )


# SkyX library
ADD_SUBDIRECTORY(SkyX)

# SkyXDemo 1
ADD_SUBDIRECTORY(SkyXDemo)

#SkyXDemo 2
ADD_SUBDIRECTORY(SkyXDemo2)


# in order to have an "uninstall" target
CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/CMAKEMODULES/cmake_uninstall.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  IMMEDIATE @ONLY)
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
INSTALL(FILES ${SKYX_CONFIG_FILES} DESTINATION "bin")

#Package Installer configuration
#TODO: Should be split in an app installer and sdk installer
#SET(CPACK_PACKAGE_NAME "GameCore Shadow-TechDemo")
#SET(CPACK_PACKAGE_VENDOR "SilverCoin GameDevelopment")
#SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Shadow Techdemo of the GameCore-Engine")
#SET(CPACK_PACKAGE_VERSION "0.1.0")
#SET(CPACK_PACKAGE_VERSION_MAJOR "0")
#SET(CPACK_PACKAGE_VERSION_MINOR "1")
#SET(CPACK_PACKAGE_VERSION_PATCH "0")
#SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../documents/Readme.txt")
#SET(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../documents/branding.png")
#SET(CPACK_NSIS_INSTALLED_ICON_NAME " 
#SET(CPACK_PACKAGE_EXECUTABLES "bhel-calas.bat;GameCore")
#SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.silvercoin-gamedev.net")
#SET(CPACK_PACKAGE_INSTALL_DIRECTORY "GameCore")
#SET(CPACK_COMPONENT_GAMECORE_DISPLAY_NAME "GameCore TechDemo")
#SET(CPACK_COMPONENT_DIRECTX_DISPLAY_NAME "DirectX March2009 Runtime")
#SET(CPACK_COMPONENT_OPENAL_DISPLAY_NAME "OpenAL Runtime")
#SET(CPACK_COMPONENTS_ALL GameCore DirectX)
#IF(CMAKE_BUILD_TYPE STREQUAL "Release")
#	SET(CPACK_COMPONENT_GAMECORE_DESCRIPTION 
#	   "The GameCore Shadow TechDemo for evaluation purposes.")
#ELSE(CMAKE_BUILD_TYPE STREQUAL "Release")
#	SET(CPACK_COMPONENT_GAMECORE_DESCRIPTION 
#	   "DEBUG Version! Only for intgernal purpose! The GameCore Shadow TechDemo for evaluation purposes.")
#ENDIF(CMAKE_BUILD_TYPE STREQUAL "Release")
#SET(CPACK_COMPONENT_DIRECTX_DESCRIPTION
#   "The DirectX Runtime of the August 2009 SDK, only needed if not yet installed or older version is installed.")
#SET(CPACK_COMPONENT_OPENAL_DESCRIPTION
#   "The OpenAL Runtime components.")
   
#SET(CPACK_COMPONENT_GROUP_GAMECORE_DESCRIPTION
#   "The actual game engine binaries and content files needed to run the program.")
#SET(CPACK_COMPONENT_GROUP_DIRECTX_DESCRIPTION
#   "The specific DirectX runtime from needed for the GameCore. If a newer version of DirectX or the DirectX SDK is already installed this package is not required.")
#SET(CPACK_COMPONENT_GROUP_OPENAL_DESCRIPTION
#   "The OpenAL runtime files. This is not required if OpenAL is already installed.")

#SET(CPACK_COMPONENT_GAMECORE_GROUP "Application")
#SET(CPACK_COMPONENT_DIRECTX_GROUP "Runtime")
#SET(CPACK_COMPONENT_OPENAL_GROUP "Runtime")

#SET(CPACK_ALL_INSTALL_TYPES Full Minimal)
#SET(CPACK_COMPONENT_GAMECORE_INSTALL_TYPES Full Minimal)
#SET(CPACK_COMPONENT_DIRECTX_INSTALL_TYPES Full)
#SET(CPACK_COMPONENT_OPENAL_INSTALL_TYPES Full)

#SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\installer\\\\directx_aug2009_redist.exe\\\"'")
#SET(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/../screens/gamecore_logo.ico")

# This must always be last!
#INCLUDE(CPack)
